Kara no Shōjo Wiki karanoshoujowiki https://karanoshoujo.miraheze.org/wiki/Main_Page MediaWiki 1.40.1 first-letter Media Special Talk User User talk Kara no Shōjo Wiki Kara no Shōjo Wiki talk File File talk MediaWiki MediaWiki talk Template Template talk Help Help talk Category Category talk Campaign Campaign talk Module Module talk Gadget Gadget talk Gadget definition Gadget definition talk Template:Dated maintenance category 10 71 148 2014-01-08T08:14:55Z wikipedia>John of Reading 0 Second attempt. Those spaces upset inline templates such as {{As of}}. Instead, try an unconditional <nowiki/> wikitext text/x-wiki <nowiki/><!--This nowiki helps to prevent whitespace at the top of articles-->{{#ifeq:{{FULLROOTPAGENAME}}|Wikipedia:Template messages|<!--Do not categorize-->|<!-- -->{{#ifexpr:{{#if:{{NAMESPACE}}|0|1}}+{{#ifeq:{{{onlyarticles|no}}}|yes|0|1}} |{{#if:{{{3|}}} |[[Category:{{{1}}} {{{2}}} {{{3}}}]]<!-- -->{{#ifexist:Category:{{{1}}} {{{2}}} {{{3}}} |<!-- -->|[[Category:Articles with invalid date parameter in template]]<!-- -->}} |[[Category:{{#if:{{{5|}}} |{{{5}}}<!-- -->|{{{1}}}<!-- -->}}]]<!-- -->}}{{#if:{{{4|}}} |[[Category:{{{4}}}]]}}<!-- -->}}<!-- -->}}<noinclude> {{documentation}} </noinclude> 41e7d4000124d4f718ddf222af0b72825048c4c4 Template:Hatnote 10 110 236 2014-05-23T15:55:04Z wikipedia>SMcCandlish 0 tweak wikitext text/x-wiki <includeonly>{{#invoke:Hatnote|hatnote}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 4a1d1028d07c9056022807a96051e1c82cf2a1c7 Template:When on basepage 10 191 543 2014-09-30T08:52:52Z wikipedia>Sardanaphalus 0 Sardanaphalus moved page [[Template:Basepage subpage]] to [[Template:When on basepage]]: Per move request wikitext text/x-wiki {{#switch: <!--If no or empty "page" parameter then detect basepage/subpage/subsubpage--> {{#if:{{{page|}}} | {{#if:{{#titleparts:{{{page}}}|0|3}} | subsubpage <!--Subsubpage or lower--> | {{#if:{{#titleparts:{{{page}}}|0|2}} | subpage | basepage }} }} | {{#if:{{#titleparts:{{FULLPAGENAME}}|0|3}} | subsubpage <!--Subsubpage or lower--> | {{#if:{{#titleparts:{{FULLPAGENAME}}|0|2}} | subpage | basepage }} }} }} | basepage = {{{1|}}} | subpage = {{{2|}}} | subsubpage = {{{3| {{{2|}}} }}} <!--Respecting empty parameter on purpose--> }}<!--End switch--><noinclude> {{Documentation}} </noinclude> cf4dc92df647a26ab0ce149772a1fe3ac6c3dfc0 Template:When on user page 10 216 610 2014-11-29T21:38:24Z wikipedia>Sardanaphalus 0 Created redirect wikitext text/x-wiki #redirect [[Template:User other]] [[Category:User namespace templates]] [[Category:Namespace manipulation templates]] 2cfc08fbeab39bc369817a2250cc3c2d2ae29fb1 Module:Ns has subpages 828 74 154 2014-12-10T06:37:29Z wikipedia>Mr. Stradivarius 0 Protected Module:Ns has subpages: [[WP:High-risk templates|High-risk Lua module]] ([Edit=Allow only template editors and admins] (indefinite) [Move=Allow only template editors and admins] (indefinite)) Scribunto text/plain -- This module implements [[Template:Ns has subpages]]. -- While the template is fairly simple, this information is made available to -- Lua directly, so using a module means that we don't have to update the -- template as new namespaces are added. local p = {} function p._main(ns, frame) -- Get the current namespace if we were not passed one. if not ns then ns = mw.title.getCurrentTitle().namespace end -- Look up the namespace table from mw.site.namespaces. This should work -- for a majority of cases. local nsTable = mw.site.namespaces[ns] -- Try using string matching to get the namespace from page names. -- Do a quick and dirty bad title check to try and make sure we do the same -- thing as {{NAMESPACE}} in most cases. if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then local nsStripped = ns:gsub('^[_%s]*:', '') nsStripped = nsStripped:gsub(':.*$', '') nsTable = mw.site.namespaces[nsStripped] end -- If we still have no match then try the {{NAMESPACE}} parser function, -- which should catch the remainder of cases. Don't use a mw.title object, -- as this would increment the expensive function count for each new page -- tested. if not nsTable then frame = frame or mw.getCurrentFrame() local nsProcessed = frame:callParserFunction('NAMESPACE', ns) nsTable = nsProcessed and mw.site.namespaces[nsProcessed] end return nsTable and nsTable.hasSubpages end function p.main(frame) local ns = frame:getParent().args[1] if ns then ns = ns:match('^%s*(.-)%s*$') -- trim whitespace ns = tonumber(ns) or ns end local hasSubpages = p._main(ns, frame) return hasSubpages and 'yes' or '' end return p e133068ba73738b16e1e3eba47735516a461eb5b Template:Spaces 10 78 168 2015-10-25T11:38:26Z wikipedia>Edokter 0 use class wikitext text/x-wiki <span class="nowrap">{{#iferror:{{#expr:{{{1|1}}}}} |{{#switch:{{{1}}} |fig=&#8199; |en=&ensp; |em=&emsp; |thin=&thinsp; |hair=&#8202; |&nbsp; }} |{{#invoke:String|rep|{{#switch:{{{2}}} |fig=&#8199; |en=&ensp; |em=&emsp; |thin=&thinsp; |hair=&#8202; |&nbsp; }}|{{{1|1}}}}} }}</span><noinclude> {{documentation}} </noinclude> a9ed762825e7579f15dcb9b171b0c1c3bf524b3f Template:Nowrap 10 141 327 2015-11-28T10:13:53Z wikipedia>Edokter 0 Adapt comment; edits inside noinclude blocks should not affect job queue, but won't kill parser either way. wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> 5d0dc6b6d89b37f4356242404f46138a4017f015 Template:Category link 10 253 730 2016-09-21T14:41:05Z wikipedia>Anthony Appleyard 0 Anthony Appleyard moved page [[Template:Cl]] to [[Template:Category link]] over redirect: [[Special:Permalink/740508935|Requested]] by Nyuszika7H at [[WP:RM/TR]]: The template should be located at the natural, unabbreviated title and &#123;&#123;[[Temp... wikitext text/x-wiki {{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Stub types for deletion |[[:Category:{{{1}}}|Cat:{{{1}}}]] | [[:Category:{{{1}}}|{{{2|Category:{{{1}}}}}}]]{{#ifeq:{{Yesno|{{{count|no}}}}}|yes|<small> {{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|<span style="font-weight: bold; color: #DD0000;">}}(&thinsp;{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}}}&thinsp;){{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|</span>}}</small>}}}}<noinclude> {{Documentation}} </noinclude> cb0fcaeb8242d1d37c27a8dcb57f76fe5b5faa36 Template:Section link 10 148 343 2017-01-17T01:29:39Z wikipedia>Primefac 0 done wikitext text/x-wiki {{#invoke:Section link|main}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 8d047e5845f8a9b74a4655b5dd79ca7595a8f88b Template:Tlp 10 188 537 2017-01-23T13:35:17Z wikipedia>MSGJ 0 MSGJ moved page [[Template:Tlp]] to [[Template:Template link with parameters]]: expand name of template wikitext text/x-wiki #REDIRECT [[Template:Template link with parameters]] {{R from move}} 3867e4ef4fe637ce8530859b5486b23e916d0b8a Template:TOCright 10 261 746 2017-03-31T02:09:13Z wikipedia>Paine Ellsworth 0 add [[WP:RCAT|rcat]]s wikitext text/x-wiki #REDIRECT [[Template:TOC right]] {{Redirect category shell| {{R from move}} {{R from modification}} {{R from template shortcut}} }} f20e461364ddb55d5f46a9e77871e34208173664 Template:Navbar 10 109 234 2017-04-22T18:49:17Z wikipedia>Plastikspork 0 Closed wikitext text/x-wiki <includeonly>{{#invoke:Navbar|navbar}}</includeonly><noinclude> {{documentation}} </noinclude> 868e3566b7e8a9a5a7f3dac75cac429c47de10d3 Template:Further information 10 153 353 2017-12-09T03:53:22Z wikipedia>Alex 21 0 Changed redirect target from [[Template:Further information]] to [[Template:Further]] wikitext text/x-wiki #REDIRECT [[Template:Further]] {{R from move}} 42879303989bb2724f884c7b099077b50c789c48 Module:Lang/ISO 639 synonyms 828 245 714 2017-12-13T23:10:47Z wikipedia>Trappist the monk 0 Scribunto text/plain -- File-Date: 2013-01-11 return { ["aar"] = "aa", ["abk"] = "ab", ["afr"] = "af", ["aka"] = "ak", ["amh"] = "am", ["ara"] = "ar", ["arg"] = "an", ["asm"] = "as", ["ava"] = "av", ["ave"] = "ae", ["aym"] = "ay", ["aze"] = "az", ["bak"] = "ba", ["bam"] = "bm", ["bel"] = "be", ["ben"] = "bn", ["bih"] = "bh", ["bis"] = "bi", ["bod"] = "bo", ["bos"] = "bs", ["bre"] = "br", ["bul"] = "bg", ["cat"] = "ca", ["ces"] = "cs", ["cha"] = "ch", ["che"] = "ce", ["chu"] = "cu", ["chv"] = "cv", ["cor"] = "kw", ["cos"] = "co", ["cre"] = "cr", ["cym"] = "cy", ["dan"] = "da", ["deu"] = "de", ["div"] = "dv", ["dzo"] = "dz", ["ell"] = "el", ["eng"] = "en", ["epo"] = "eo", ["est"] = "et", ["eus"] = "eu", ["ewe"] = "ee", ["fao"] = "fo", ["fas"] = "fa", ["fij"] = "fj", ["fin"] = "fi", ["fra"] = "fr", ["fry"] = "fy", ["ful"] = "ff", ["gla"] = "gd", ["gle"] = "ga", ["glg"] = "gl", ["glv"] = "gv", ["grn"] = "gn", ["guj"] = "gu", ["hat"] = "ht", ["hau"] = "ha", ["heb"] = "he", ["her"] = "hz", ["hin"] = "hi", ["hmo"] = "ho", ["hrv"] = "hr", ["hun"] = "hu", ["hye"] = "hy", ["ibo"] = "ig", ["ido"] = "io", ["iii"] = "ii", ["iku"] = "iu", ["ile"] = "ie", ["ina"] = "ia", ["ind"] = "id", ["ipk"] = "ik", ["isl"] = "is", ["ita"] = "it", ["jav"] = "jv", ["jpn"] = "ja", ["kal"] = "kl", ["kan"] = "kn", ["kas"] = "ks", ["kat"] = "ka", ["kau"] = "kr", ["kaz"] = "kk", ["khm"] = "km", ["kik"] = "ki", ["kin"] = "rw", ["kir"] = "ky", ["kom"] = "kv", ["kon"] = "kg", ["kor"] = "ko", ["kua"] = "kj", ["kur"] = "ku", ["lao"] = "lo", ["lat"] = "la", ["lav"] = "lv", ["lim"] = "li", ["lin"] = "ln", ["lit"] = "lt", ["ltz"] = "lb", ["lub"] = "lu", ["lug"] = "lg", ["mah"] = "mh", ["mal"] = "ml", ["mar"] = "mr", ["mkd"] = "mk", ["mlg"] = "mg", ["mlt"] = "mt", ["mon"] = "mn", ["mri"] = "mi", ["msa"] = "ms", ["mya"] = "my", ["nau"] = "na", ["nav"] = "nv", ["nbl"] = "nr", ["nde"] = "nd", ["ndo"] = "ng", ["nep"] = "ne", ["nld"] = "nl", ["nno"] = "nn", ["nob"] = "nb", ["nor"] = "no", ["nya"] = "ny", ["oci"] = "oc", ["oji"] = "oj", ["ori"] = "or", ["orm"] = "om", ["oss"] = "os", ["pan"] = "pa", ["pli"] = "pi", ["pol"] = "pl", ["por"] = "pt", ["pus"] = "ps", ["que"] = "qu", ["roh"] = "rm", ["ron"] = "ro", ["run"] = "rn", ["rus"] = "ru", ["sag"] = "sg", ["san"] = "sa", ["sin"] = "si", ["slk"] = "sk", ["slv"] = "sl", ["sme"] = "se", ["smo"] = "sm", ["sna"] = "sn", ["snd"] = "sd", ["som"] = "so", ["sot"] = "st", ["spa"] = "es", ["sqi"] = "sq", ["srd"] = "sc", ["srp"] = "sr", ["ssw"] = "ss", ["sun"] = "su", ["swa"] = "sw", ["swe"] = "sv", ["tah"] = "ty", ["tam"] = "ta", ["tat"] = "tt", ["tel"] = "te", ["tgk"] = "tg", ["tgl"] = "tl", ["tha"] = "th", ["tir"] = "ti", ["ton"] = "to", ["tsn"] = "tn", ["tso"] = "ts", ["tuk"] = "tk", ["tur"] = "tr", ["twi"] = "tw", ["uig"] = "ug", ["ukr"] = "uk", ["urd"] = "ur", ["uzb"] = "uz", ["ven"] = "ve", ["vie"] = "vi", ["vol"] = "vo", ["wln"] = "wa", ["wol"] = "wo", ["xho"] = "xh", ["yid"] = "yi", ["yor"] = "yo", ["zha"] = "za", ["zho"] = "zh", ["zul"] = "zu" } f3fb5374c9e0fdef6ce6ea22736b79468358ca19 Template:Var 10 258 740 2017-12-21T13:31:52Z wikipedia>Izno 0 nix xml lang invocation wikitext text/x-wiki <var {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} style="padding-right: 1px;{{{style|}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</var><noinclude> <!--Categories and interwikis go near the bottom of the /doc page.--> {{Documentation}} </noinclude> 0e9e47694c01ca4c7b29566a1cb11a117dfbf2c0 Template:LangSwitch 10 422 1283 2018-02-10T09:18:59Z mw>Mainframe98 0 Protected "[[Template:LangSwitch]]": Excessive vandalism ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) wikitext text/x-wiki {{{ {{#switch: {{{ {{Uselang|lang={{{lang|}}}}} |}}} | ~ = empty | = {{#switch: {{{ {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}} | ~ = empty | = {{#switch: {{{ {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}} | ~ = empty | = {{#if: {{{default|}}} | default | en }} | #default = {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}} }} | #default = {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}} }} | #default = {{Uselang|lang={{{lang|}}}}} }} |}}}<noinclude> {{Documentation}} </noinclude> 6276da6db4a231df3efb5b4f4a68cc35dc2b8211 Template:Yesno-no 10 103 222 2018-02-13T20:27:17Z wikipedia>WOSlinker 0 separate pp-template not needed wikitext text/x-wiki {{safesubst:<noinclude />yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}<noinclude> {{Documentation|Template:Yesno/doc}} <!--Categories go in the doc page referenced above; interwikis go in Wikidata.--> </noinclude> 1ad7b7800da1b867ead8f6ff8cef76e6201b3b56 Template:TemplateDataHeader 10 126 284 2018-02-23T16:30:31Z wikipedia>Primefac 0 Changed protection level for "[[Template:TemplateDataHeader]]": [[WP:HIGHRISK|high-risk]] template with 4000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) wikitext text/x-wiki #REDIRECT [[Template:TemplateData header]] {{R from move}} 61e461016bcb3a0a6fc4d8aea35d590298c19630 Template:Thinsp 10 234 692 2018-02-23T17:03:07Z wikipedia>Primefac 0 Changed protection level for "[[Template:Thinsp]]": [[WP:HIGHRISK|high-risk]] template with 2000+ transclusions ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) wikitext text/x-wiki #REDIRECT [[Template:Thin space]] {{Redirect category shell| {{R from move}} {{R from modification}} {{R from template shortcut}} }} 2469064d969db6a9cf1e47e2d1ee0a5e2c9eb495 Template:Details 10 250 724 2018-02-26T07:20:44Z wikipedia>Galobtter 0 redirect to complete merge wikitext text/x-wiki #REDIRECT [[Template:Further]] {{Redirect category shell| {{R from merge}} }} 1a90a51d85f6cb700979ea38f5f69bee0ff2c85e Module:Distinguish 828 144 335 2018-04-01T10:06:10Z wikipedia>Galobtter 0 fixed with text and selfref Scribunto text/plain local mHatnote = require('Module:Hatnote') local mHatlist = require('Module:Hatnote list') local mArguments --initialize lazily local mTableTools --initialize lazily local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local p = {} function p.distinguish(frame) mArguments = require('Module:Arguments') mTableTools = require('Module:TableTools') local args = mArguments.getArgs(frame) local selfref = args.selfref local text = args.text args = mTableTools.compressSparseArray(args) return p._distinguish(args, text, selfref) end function p._distinguish(args, text, selfref) checkType("_distinguish", 1, args, 'table') if #args == 0 and not text then return '' end local text = string.format( 'Not to be confused with %s.', text or mHatlist.orList(args, true) ) hnOptions = {selfref = selfref} return mHatnote._hatnote(text, hnOptions) end return p 0364d14af01fc656ad1d898c5036fbd12a7ca938 Template:Chart bottom 10 205 588 2018-04-19T21:18:47Z wikipedia>Plastikspork 0 Better wikitext text/x-wiki <includeonly>|}</includeonly><noinclude> {{documentation|Template:Chart top/doc}} </noinclude> 8656d1ab679f4008937f20349c95b51e5b78781e Template:Param 10 158 363 2018-05-27T03:56:56Z wikipedia>JJMC89 0 clean subst wikitext text/x-wiki {{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||<{{{tag|code}}}>}}&#123;&#123;&#123;{{{1<noinclude>|foo</noinclude>}}}{{SAFESUBST:<noinclude />#ifeq:{{{2}}}|{{{2|}}} |&#124;}}{{{2|}}}&#125;&#125;&#125;{{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||</{{{tag|code}}}>}}<noinclude> {{Documentation}} <!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --> </noinclude> abdb5d7fe0982064ea62ad15e8298d1693ed69e2 Template:Tag 10 40 250 2018-07-26T17:17:13Z wikipedia>SMcCandlish 0 These are called attributes; no one who does HTML calls them "parameters". wikitext text/x-wiki <code class="{{#ifeq:{{{wrap|}}}|yes|wrap|nowrap}}" style="{{#ifeq:{{{style|}}}|plain|border:none;background:transparent;|{{{style|}}}}}"><!-- Opening tag -->{{#switch:{{{2|pair}}} |c|close = |e|empty|s|single|v|void |o|open |p|pair = &lt;{{#if:{{{link|}}}|[[HTML element#{{{1|tag}}}|{{{1|tag}}}]]|{{{1|tag}}}}}{{#if:{{{params|{{{attribs|}}}}}}|&#32;{{{params|{{{attribs}}}}}}}} }}<!-- Content between tags -->{{#switch:{{{2|pair}}} |c|close = {{{content|}}} |e|empty|s|single|v|void = &#32;&#47;&gt; |o|open = &gt;{{{content|}}} |p|pair = {{#ifeq:{{{1|tag}}}|!--||&gt;}}{{{content|...}}} }}<!-- Closing tag -->{{#switch:{{{2|pair}}} |e|empty|s|single|v|void |o|open = |c|close |p|pair = {{#ifeq:{{{1|tag}}}|!--|--&gt;|&lt;&#47;{{{1|tag}}}&gt;}} }}<!-- --></code><noinclude> {{Documentation}} </noinclude> eae208bc1612c834de697fa3ee9b343966cf8602 Template:Further 10 145 337 2018-07-27T17:29:22Z wikipedia>Galobtter 0 fix so that don't need [[Module:Further]] anymore wikitext text/x-wiki <includeonly>{{#invoke:labelled list hatnote|labelledList|Further information{{#if:{{{topic|}}}|&#32;on {{{topic|}}}}}}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> dd29c6dfb3894a2dc3f20144a654b7012c9a9214 Template:Str left 10 413 1261 2018-10-05T15:26:02Z mw>SA 13 Bro 0 Undo revision 2908854 by [[Special:Contributions/49.181.244.49|49.181.244.49]] ([[User talk:49.181.244.49|talk]]) wikitext text/x-wiki <includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude> {{documentation}} </noinclude> b0625523728bd6c2c9e6c0a5722a80621103d361 Template:Oldid 10 111 246 2018-12-10T20:41:24Z wikipedia>Jonesey95 0 rm stray trailing space, per talk page request wikitext text/x-wiki <span class="plainlinks">[{{fullurl:{{{page|{{{1|Main Page}}}}}}|oldid={{{oldid|{{{2|}}}}}}}} {{{label|{{{title|{{{3|{{#if:{{{oldid|{{{2|}}}}}}|Old revision|Current version}} of {{#if:{{{page|{{{1|}}}}}}|'''{{{page|{{{1}}}}}}'''|a page}}}}}}}}}}}]</span><noinclude> {{documentation}} </noinclude> 4a42ae0cc77ec0385d4b6508c5d3f366db39ecdb Template:Template other 10 4 172 2018-12-16T22:06:25Z wikipedia>Amorymeltzer 0 Changed protection level for "[[Template:Template other]]": [[WP:High-risk templates|Highly visible template]]: Transclusion count has increased dramatically ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Template}} | template | other }} }} | template = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 06fb13d264df967b5232141067eb7d2b67372d76 Module:Color contrast 828 105 226 2019-01-06T22:38:25Z wikipedia>Johnuniq 0 fix unintended color2lum global error which is causing errors; clean whitespace Scribunto text/plain -- -- This module implements -- {{Color contrast ratio}} -- {{Greater color contrast ratio}} -- {{ColorToLum}} -- {{RGBColorToLum}} -- local p = {} local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' ) local function sRGB (v) if (v <= 0.03928) then v = v / 12.92 else v = math.pow((v+0.055)/1.055, 2.4) end return v end local function rgbdec2lum(R, G, B) if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255) else return '' end end local function hsl2lum(h, s, l) if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then local c = (1 - math.abs(2*l - 1))*s local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) ) local m = l - c/2 local r, g, b = m, m, m if( 0 <= h and h < 60 ) then r = r + c g = g + x elseif( 60 <= h and h < 120 ) then r = r + x g = g + c elseif( 120 <= h and h < 180 ) then g = g + c b = b + x elseif( 180 <= h and h < 240 ) then g = g + x b = b + c elseif( 240 <= h and h < 300 ) then r = r + x b = b + c elseif( 300 <= h and h < 360 ) then r = r + c b = b + x end return rgbdec2lum(255*r, 255*g, 255*b) else return '' end end local function color2lum(c) if (c == nil) then return '' end -- html '#' entity c = c:gsub("&#35;", "#") -- whitespace c = c:match( '^%s*(.-)[%s;]*$' ) -- unstrip nowiki strip markers c = mw.text.unstripNoWiki(c) -- lowercase c = c:lower() -- first try to look it up local L = HTMLcolor[c] if (L ~= nil) then return L end -- convert from hsl if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$') return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100) end -- convert from rgb if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$') return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B)) end -- convert from rgb percent if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$') return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100) end -- remove leading # (if there is one) and whitespace c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$') -- split into rgb local cs = mw.text.split(c or '', '') if( #cs == 6 ) then local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2]) local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4]) local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6]) return rgbdec2lum(R, G, B) elseif ( #cs == 3 ) then local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1]) local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2]) local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3]) return rgbdec2lum(R, G, B) end -- failure, return blank return '' end -- This exports the function for use in other modules. -- The colour is passed as a string. function p._lum(color) return color2lum(color) end function p._greatercontrast(args) local bias = tonumber(args['bias'] or '0') or 0 local css = (args['css'] and args['css'] ~= '') and true or false local v1 = color2lum(args[1] or '') local c2 = args[2] or '#FFFFFF' local v2 = color2lum(c2) local c3 = args[3] or '#000000' local v3 = color2lum(c3) local ratio1 = -1; local ratio2 = -1; if (type(v1) == 'number' and type(v2) == 'number') then ratio1 = (v2 + 0.05)/(v1 + 0.05) ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1 end if (type(v1) == 'number' and type(v3) == 'number') then ratio2 = (v3 + 0.05)/(v1 + 0.05) ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2 end if css then local c1 = args[1] or '' if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then c1 = '#' .. c1 end if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then c2 = '#' .. c2 end if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then c3 = '#' .. c3 end return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';' end return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '' end function p._ratio(args) local v1 = color2lum(args[1]) local v2 = color2lum(args[2]) if (type(v1) == 'number' and type(v2) == 'number') then -- v1 should be the brighter of the two. if v2 > v1 then v1, v2 = v2, v1 end return (v1 + 0.05)/(v2 + 0.05) else return args['error'] or '?' end end function p._styleratio(args) local style = (args[1] or ''):lower() local bg, fg = 'white', 'black' local lum_bg, lum_fg = 1, 0 if args[2] then local lum = color2lum(args[2]) if lum ~= '' then bg, lum_bg = args[2], lum end end if args[3] then local lum = color2lum(args[3]) if lum ~= '' then fg, lum_fg = args[3], lum end end local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '&#35;', '#'), ';') for k = 1,#slist do local s = slist[k] local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' ) k = k or '' v = v or '' if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then local lum = color2lum(v) if( lum ~= '' ) then bg, lum_bg = v, lum end elseif (k:match('^[%s]*(color)[%s]*$')) then local lum = color2lum(v) if( lum ~= '' ) then bg, lum_fg = v, lum end end end if lum_bg > lum_fg then return (lum_bg + 0.05)/(lum_fg + 0.05) else return (lum_fg + 0.05)/(lum_bg + 0.05) end end --[[ Use {{#invoke:Color contrast|somecolor}} directly or {{#invoke:Color contrast}} from a wrapper template. Parameters: -- |1= — required; A color to check. --]] function p.lum(frame) local color = frame.args[1] or frame:getParent().args[1] return p._lum(color) end function p.ratio(frame) local args = frame.args[1] and frame.args or frame:getParent().args return p._ratio(args) end function p.styleratio(frame) local args = frame.args[1] and frame.args or frame:getParent().args return p._styleratio(args) end function p.greatercontrast(frame) local args = frame.args[1] and frame.args or frame:getParent().args return p._greatercontrast(args) end return p 1e399769117591366a63f62996c9a407077cc711 Template:FULLBASEPAGENAME 10 116 262 2019-01-07T15:38:13Z wikipedia>Bsherr 0 bypassing redirect, removing excess white space wikitext text/x-wiki {{#if: {{Ns has subpages | {{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} }} | {{#if: {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}} | {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}} | {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} }} | {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} }}<noinclude> {{documentation}} </noinclude> a21f32ffc20eab6d41631b3fb8af4c63e153a6c3 Module:Color contrast/colors 828 106 228 2019-01-24T12:30:11Z wikipedia>Galobtter 0 Changed protection level for "[[Module:Color contrast/colors]]": [[WP:High-risk templates|High-risk Lua module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) Scribunto text/plain return { aliceblue = 0.92880068253475, antiquewhite = 0.84646951707754, aqua = 0.7874, aquamarine = 0.8078549208338, azure = 0.97265264954166, beige = 0.8988459998705, bisque = 0.80732327372979, black = 0, blanchedalmond = 0.85084439608156, blue = 0.0722, blueviolet = 0.12622014321946, brown = 0.098224287876511, burlywood = 0.51559844533893, cadetblue = 0.29424681085422, chartreuse = 0.76032025902623, chocolate = 0.23898526114557, coral = 0.37017930872924, cornflowerblue = 0.30318641994179, cornsilk = 0.93562110372965, crimson = 0.16042199953026, cyan = 0.7874, darkblue = 0.018640801980939, darkcyan = 0.20329317839046, darkgoldenrod = 0.27264703559993, darkgray = 0.39675523072563, darkgreen = 0.091143429047575, darkgrey = 0.39675523072563, darkkhaki = 0.45747326349994, darkmagenta = 0.07353047651207, darkolivegreen = 0.12651920884889, darkorange = 0.40016167026524, darkorchid = 0.13413142174857, darkred = 0.054889674531132, darksalmon = 0.40541471563381, darkseagreen = 0.43789249325969, darkslateblue = 0.065792846227988, darkslategray = 0.067608151928044, darkslategrey = 0.067608151928044, darkturquoise = 0.4874606277449, darkviolet = 0.10999048339343, deeppink = 0.23866895828276, deepskyblue = 0.44481603395575, dimgray = 0.14126329114027, dimgrey = 0.14126329114027, dodgerblue = 0.27442536991456, firebrick = 0.10724525535015, floralwhite = 0.95922484825004, forestgreen = 0.18920812076002, fuchsia = 0.2848, gainsboro = 0.71569350050648, ghostwhite = 0.94311261886323, gold = 0.69860877428159, goldenrod = 0.41919977809569, gray = 0.2158605001139, green = 0.15438342968146, greenyellow = 0.80609472611453, grey = 0.2158605001139, honeydew = 0.96336535554782, hotpink = 0.34658438169715, indianred = 0.21406134963884, indigo = 0.03107561486337, ivory = 0.99071270600615, khaki = 0.77012343394121, lavender = 0.80318750514521, lavenderblush = 0.90172748631046, lawngreen = 0.73905893124963, lemonchiffon = 0.94038992245622, lightblue = 0.63709141280807, lightcoral = 0.35522120733135, lightcyan = 0.94587293494829, lightgoldenrodyellow = 0.93348351018297, lightgray = 0.65140563741982, lightgreen = 0.69091979956865, lightgrey = 0.65140563741982, lightpink = 0.58566152734898, lightsalmon = 0.4780675225206, lightseagreen = 0.35050145117042, lightskyblue = 0.56195637618331, lightslategray = 0.23830165007287, lightslategrey = 0.23830165007287, lightsteelblue = 0.53983888284666, lightyellow = 0.98161818392882, lime = 0.7152, limegreen = 0.44571042246098, linen = 0.88357340984379, magenta = 0.2848, maroon = 0.045891942324215, mediumaquamarine = 0.49389703310801, mediumblue = 0.044077780212328, mediumorchid = 0.21639251153773, mediumpurple = 0.22905858091648, mediumseagreen = 0.34393112338131, mediumslateblue = 0.20284629471622, mediumspringgreen = 0.70704308194184, mediumturquoise = 0.5133827926448, mediumvioletred = 0.14371899849357, midnightblue = 0.02071786635086, mintcream = 0.97834604947588, mistyrose = 0.82183047859185, moccasin = 0.80083000991567, navajowhite = 0.76519682342785, navy = 0.015585128108224, oldlace = 0.91900633405549, olive = 0.20027537200568, olivedrab = 0.22593150951929, orange = 0.4817026703631, orangered = 0.25516243753416, orchid = 0.31348806761439, palegoldenrod = 0.78792647887614, palegreen = 0.77936759006353, paleturquoise = 0.76436077921714, palevioletred = 0.28754994117889, papayawhip = 0.87797100199835, peachpuff = 0.74905589878251, peru = 0.30113074877936, pink = 0.63271070702466, plum = 0.45734221587969, powderblue = 0.68254586500605, purple = 0.061477070432439, rebeccapurple = 0.07492341159447, red = 0.2126, rosybrown = 0.32319457649407, royalblue = 0.16663210743188, saddlebrown = 0.097922285020521, salmon = 0.36977241527596, sandybrown = 0.46628543696283, seagreen = 0.19734199706275, seashell = 0.92737862206922, sienna = 0.13697631337098, silver = 0.52711512570581, skyblue = 0.55291668518184, slateblue = 0.14784278062136, slategray = 0.20896704076536, slategrey = 0.20896704076536, snow = 0.96533341834849, springgreen = 0.73052306068529, steelblue = 0.20562642207625, tan = 0.48237604163921, teal = 0.16996855778968, thistle = 0.56818401093733, tomato = 0.30638612719415, turquoise = 0.5895536427578, violet = 0.40315452986676, wheat = 0.74909702820482, white = 1, whitesmoke = 0.91309865179342, yellow = 0.9278, yellowgreen = 0.50762957208707, } 6ae47fdb24de4eed5ec26d203faf5341a388987b Template:Lua 10 122 276 2019-03-20T22:04:45Z wikipedia>RMCD bot 0 Removing notice of move discussion wikitext text/x-wiki <includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude> {{Lua|Module:Lua banner}} {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7 Template:Cl 10 254 732 2019-04-24T04:30:48Z wikipedia>JJMC89 0 actual template is in the category wikitext text/x-wiki #REDIRECT [[Template:Category link]] {{R from move}} f79fddc38797fc163b6e6ddeb4377afbea7d0cfc Template:Clc 10 123 278 2019-04-24T04:30:59Z wikipedia>JJMC89 0 actual template is in the category wikitext text/x-wiki #REDIRECT [[Template:Category link with count]] 02280e2ab57b544236e11f913e3759c5781ca9d5 Template:Str endswith 10 236 696 2019-05-30T14:16:29Z wikipedia>MSGJ 0 use [[Module:String]] per [[Wikipedia:Templates_for_discussion/Log/2019_February_18#Module:Str_endswith|TfD]] discussion wikitext text/x-wiki {{#ifeq:{{{1|a}}}{{{2|a}}}|{{{1|b}}}{{{2|b}}}|{{#invoke:String|endswith|source={{{1}}}|pattern={{{2}}} }}|yes<!--backward compatibility -->}}<noinclude> {{documentation}} </noinclude> 13dfad2dc8c562869bc85a37524258ffebf9a62f Template:Ll 10 404 1241 2019-08-30T05:43:05Z mw>DannyS712 0 Changed protection level for "[[Template:Ll]]": Highly visible template: Redundant to current transclusion on a cascading protected page, but better safe than sorry ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) wikitext text/x-wiki #REDIRECT [[Template:Localized link]] e3f7e3e940787f3cd08503ff50bc563b52242bdd Template:Yesno 10 23 45 2019-08-30T05:49:31Z mw>DannyS712 0 Protected "[[Template:Yesno]]": Highly visible template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only administrators] (indefinite)) wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |false |0 = {{{no|<!-- null -->}}} | = {{{blank|{{{no|<!-- null -->}}}}}} |¬ = {{{¬|}}} |yes |y |true |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }}<noinclude> {{Documentation}} </noinclude> 166fab9e5411aacd02ca4c9e93fbc7bf6bcf26ac Module:Arguments 828 13 25 2019-09-02T12:39:11Z mw>AKlapper (WMF) 0 4 revisions imported from [[:meta:Module:Arguments]]: See [[phab:T231001]] Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 3134ecce8429b810d445e29eae115e2ae4c36c53 134 25 2020-04-01T06:12:40Z wikipedia>MusikAnimal 0 1 revision imported Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 3134ecce8429b810d445e29eae115e2ae4c36c53 Template:Pagelang 10 9 17 2019-11-10T01:45:55Z mw>Shirayuki 0 This template should return empty string if the pagename does not end with "/en" for consistency wikitext text/x-wiki {{#ifeq:{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}|en |{{#ifeq:{{#titleparts:{{{1|{{PAGENAME}}}}}||-1}}|en |{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}} }} |{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}} }}<noinclude> {{Documentation}} </noinclude> c4102d40356283246cbc855bef4754c0a15b4bea Template:User other 10 211 600 2019-12-09T01:20:12Z wikipedia>RMCD bot 0 Removing notice of move discussion wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:User}} | user | other }} }} | user = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> f5acc28ea326bedc6c0df1b8fb14cfe5fa940a7f Module:Documentation/i18n 828 28 55 2019-12-28T03:33:21Z mw>94rain 0 Protected "[[Module:Documentation/i18n]]": Highly visible page or template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only administrators] (indefinite)) Scribunto text/plain local format = require('Module:TNT').format local i18n = {} i18n['cfg-error-msg-type'] = format('I18n/Documentation', 'cfg-error-msg-type') i18n['cfg-error-msg-empty'] = format('I18n/Documentation', 'cfg-error-msg-empty') -- cfg['template-namespace-heading'] -- The heading shown in the template namespace. i18n['template-namespace-heading'] = format('I18n/Documentation', 'template-namespace-heading') -- cfg['module-namespace-heading'] -- The heading shown in the module namespace. i18n['module-namespace-heading'] = format('I18n/Documentation', 'module-namespace-heading') -- cfg['file-namespace-heading'] -- The heading shown in the file namespace. i18n['file-namespace-heading'] = format('I18n/Documentation', 'file-namespace-heading') -- cfg['other-namespaces-heading'] -- The heading shown in other namespaces. i18n['other-namespaces-heading'] = format('I18n/Documentation', 'other-namespaces-heading') -- cfg['view-link-display'] -- The text to display for "view" links. i18n['view-link-display'] = format('I18n/Documentation', 'view-link-display') -- cfg['edit-link-display'] -- The text to display for "edit" links. i18n['edit-link-display'] = format('I18n/Documentation', 'edit-link-display') -- cfg['history-link-display'] -- The text to display for "history" links. i18n['history-link-display'] = format('I18n/Documentation', 'history-link-display') -- cfg['purge-link-display'] -- The text to display for "purge" links. i18n['purge-link-display'] = format('I18n/Documentation', 'purge-link-display') -- cfg['create-link-display'] -- The text to display for "create" links. i18n['create-link-display'] = format('I18n/Documentation', 'create-link-display') return i18n 9a9f234b177a424f1fc465eb25c484eff54905c0 Module:Yesno 828 12 23 2020-03-01T02:09:18Z mw>Minorax 0 8 revisions imported from [[:meta:Module:Yesno]] Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end f767643e7d12126d020d88d662a3dd057817b9dc 132 23 2020-04-01T06:27:55Z wikipedia>MusikAnimal 0 Undid revision 948472533 by [[Special:Contributions/w>Vogone|w>Vogone]] ([[User talk:w>Vogone|talk]]) Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end f767643e7d12126d020d88d662a3dd057817b9dc Module:TableTools 828 31 61 2020-03-01T02:09:18Z mw>Minorax 0 4 revisions imported from [[:meta:Module:TableTools]] Scribunto text/plain --[[ ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should -- -- not be called directly from #invoke. -- ------------------------------------------------------------------------------------ --]] local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti --[[ ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ --]] function p.isPositiveInteger(v) if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then return true else return false end end --[[ ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a value can be a valid table key. Lua will -- generate an error if a NaN is used as a table key. ------------------------------------------------------------------------------------ --]] function p.isNan(v) if type(v) == 'number' and tostring(v) == '-nan' then return true else return false end end --[[ ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ --]] function p.shallowClone(t) local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end --[[ ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ --]] function p.removeDuplicates(t) checkType('removeDuplicates', 1, t, 'table') local isNan = p.isNan local ret, exists = {}, {} for i, v in ipairs(t) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v else if not exists[v] then ret[#ret + 1] = v exists[v] = true end end end return ret end --[[ ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ --]] function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k, v in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end --[[ ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will -- return {1, 3, 6}. ------------------------------------------------------------------------------------ --]] function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') return s end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k, v in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end --[[ ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table -- of subtables in the format -- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} } -- Keys that don't end with an integer are stored in a subtable named "other". -- The compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ --]] function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end --[[ ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ --]] function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end --[[ ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ --]] function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end --[[ ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ --]] function p.size(t) checkType('size', 1, t, 'table') local i = 0 for k in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 else -- This will fail with table, boolean, function. return item1 < item2 end end --[[ Returns a list of the keys in a table, sorted using either a default comparison function or a custom keySort function. ]] function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' }) end local list = {} local index = 1 for key, value in pairs(t) do list[index] = key index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(list, keySort) end return list end --[[ Iterates through a table, with the keys sorted using the keysToList function. If there are only numerical keys, sparseIpairs is probably more efficient. ]] function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local list = p.keysToList(t, keySort, true) local i = 0 return function() i = i + 1 local key = list[i] if key ~= nil then return key, t[key] else return nil, nil end end end --[[ Returns true if all keys in the table are consecutive integers starting at 1. --]] function p.isArray(t) checkType("isArray", 1, t, "table") local i = 0 for k, v in pairs(t) do i = i + 1 if t[i] == nil then return false end end return true end -- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 } function p.invert(array) checkType("invert", 1, array, "table") local map = {} for i, v in ipairs(array) do map[v] = i end return map end --[[ { "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true } --]] function p.listToSet(t) checkType("listToSet", 1, t, "table") local set = {} for _, item in ipairs(t) do set[item] = true end return set end --[[ Recursive deep copy function. Preserves identities of subtables. ]] local function _deepCopy(orig, includeMetatable, already_seen) -- Stores copies of tables indexed by the original table. already_seen = already_seen or {} local copy = already_seen[orig] if copy ~= nil then return copy end if type(orig) == 'table' then copy = {} for orig_key, orig_value in pairs(orig) do copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen) end already_seen[orig] = copy if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then local mt_copy = deepcopy(mt, includeMetatable, already_seen) setmetatable(copy, mt_copy) already_seen[mt] = mt_copy end end else -- number, string, boolean, etc copy = orig end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen) end --[[ Concatenates all values in the table that are indexed by a number, in order. sparseConcat{ a, nil, c, d } => "acd" sparseConcat{ nil, b, c, d } => "bcd" ]] function p.sparseConcat(t, sep, i, j) local list = {} local list_i = 0 for _, v in p.sparseIpairs(t) do list_i = list_i + 1 list[list_i] = v end return table.concat(list, sep, i, j) end --[[ -- This returns the length of a table, or the first integer key n counting from -- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return -- a different value when there are gaps in the array portion of the table. -- Intended to be used on data loaded with mw.loadData. For other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of -- the number of unnamed template parameters, so use this function for -- frame.args. --]] function p.length(t) local i = 1 while t[i] ~= nil do i = i + 1 end return i - 1 end function p.inArray(arr, valueToFind) checkType("inArray", 1, arr, "table") -- if valueToFind is nil, error? for _, v in ipairs(arr) do if v == valueToFind then return true end end return false end return p fe918509f168332267834b3a6f5c219a9de5b2e7 Template:Ombox 10 146 339 2020-04-01T06:12:36Z wikipedia>MusikAnimal 0 1 revision imported wikitext text/x-wiki {{#invoke:Message box|ombox}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 0e54065432d540737b9e56c4e3a8e7f74d4534ea Module:File link 828 85 186 2020-04-01T06:31:54Z wikipedia>MusikAnimal 0 Undid revision 948472508 by [[Special:Contributions/w>IPad365|w>IPad365]] ([[User talk:w>IPad365|talk]]) Scribunto text/plain -- This module provides a library for formatting file wikilinks. local yesno = require('Module:Yesno') local checkType = require('libraryUtil').checkType local p = {} function p._main(args) checkType('_main', 1, args, 'table') -- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our -- own function to get the right error level. local function checkArg(key, val, level) if type(val) ~= 'string' then error(string.format( "type error in '%s' parameter of '_main' (expected string, got %s)", key, type(val) ), level) end end local ret = {} -- Adds a positional parameter to the buffer. local function addPositional(key) local val = args[key] if not val then return nil end checkArg(key, val, 4) ret[#ret + 1] = val end -- Adds a named parameter to the buffer. We assume that the parameter name -- is the same as the argument key. local function addNamed(key) local val = args[key] if not val then return nil end checkArg(key, val, 4) ret[#ret + 1] = key .. '=' .. val end -- Filename checkArg('file', args.file, 3) ret[#ret + 1] = 'File:' .. args.file -- Format if args.format then checkArg('format', args.format) if args.formatfile then checkArg('formatfile', args.formatfile) ret[#ret + 1] = args.format .. '=' .. args.formatfile else ret[#ret + 1] = args.format end end -- Border if yesno(args.border) then ret[#ret + 1] = 'border' end addPositional('location') addPositional('alignment') addPositional('size') addNamed('upright') addNamed('link') addNamed('alt') addNamed('page') addNamed('class') addNamed('lang') addNamed('start') addNamed('end') addNamed('thumbtime') addPositional('caption') return string.format('[[%s]]', table.concat(ret, '|')) end function p.main(frame) local origArgs = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:File link' }) if not origArgs.file then error("'file' parameter missing from [[Template:File link]]", 0) end -- Copy the arguments that were passed to a new table to avoid looking up -- every possible parameter in the frame object. local args = {} for k, v in pairs(origArgs) do -- Make _BLANK a special argument to add a blank parameter. For use in -- conditional templates etc. it is useful for blank arguments to be -- ignored, but we still need a way to specify them so that we can do -- things like [[File:Example.png|link=]]. if v == '_BLANK' then v = '' end args[k] = v end return p._main(args) end return p 66925f088d11530f2482f04181a3baaaa0ad3d0c Template:Sandbox other 10 24 252 2020-04-03T00:08:09Z wikipedia>Evad37 0 Also match subpage names beginning with "sandbox", per [[Template_talk:Sandbox_other#Template-protected_edit_request_on_28_March_2020|edit request]] wikitext text/x-wiki {{#if:{{#ifeq:{{#invoke:String|sublength|s={{SUBPAGENAME}}|i=0|len=7}}|sandbox|1}}{{#ifeq:{{SUBPAGENAME}}|doc|1}}{{#invoke:String|match|{{PAGENAME}}|/sandbox/styles.css$|plain=false|nomatch=}}|{{{1|}}}|{{{2|}}}}}<!-- --><noinclude>{{documentation}}</noinclude> 91e4ae891d6b791615152c1fbc971414961ba872 Template:Tree chart 10 204 586 2020-04-07T01:44:42Z wikipedia>Trialpears 0 [[Wikipedia:Templates for discussion/Log/2020 March 22#Template:Family tree]] closed as merge ([[WP:XFDC|XFDcloser]]) wikitext text/x-wiki <includeonly>{{#invoke:Tree chart|main}}</includeonly><noinclude>{{documentation}} </noinclude> 4936e8a8e590be91372b7d234aeea78bd418bf0e Template:Tree chart/start 10 208 594 2020-04-07T04:16:11Z wikipedia>Pppery 0 Tfd closed wikitext text/x-wiki <table style="border-spacing: 0px; border-collapse: separate; {{#switch: {{{align|}}} |left = float: left; |right = float: right; |center = margin: 0 auto; |#default = }} {{{style|}}}"><noinclude> {{chart/end}} {{Documentation}} </noinclude> e115d0e78fc595436e4e549d91432415a671fded Template:Tlf 10 114 258 2020-04-13T14:42:57Z wikipedia>Primefac 0 Primefac moved page [[Template:Tlf]] to [[Template:Template link with link off]]: full name to indicate what it does wikitext text/x-wiki #REDIRECT [[Template:Template link with link off]] {{Redirect category shell| {{R from move}} }} 52759e1d3f7c9aa4a03d0b7d4f84f4c6adf53edf Module:Effective protection level 828 84 387 2020-04-25T14:26:46Z mw>Tegel 0 Reverted edits by [[Special:Contribs/2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9|2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9]] ([[User talk:2806:2F0:51E1:9FE9:D4EC:D0C2:C56:2DB9|talk]]) to last version by Pppery Scribunto text/plain local p = {} -- Returns the permission required to perform a given action on a given title. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) local title if type(pagename) == 'table' and pagename.prefixedText then title = pagename elseif pagename then title = mw.title.new(pagename) else title = mw.title.getCurrentTitle() end pagename = title.prefixedText if action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then error( 'First parameter must be one of edit, move, create, upload', 2 ) end if title.namespace == 8 then -- MediaWiki namespace if title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page return 'interfaceadmin' else -- any non-JS/CSS MediaWiki page return 'sysop' end elseif title.namespace == 2 and title.isSubpage then if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page return 'interfaceadmin' elseif title.contentModel == 'json' then -- user JSON page return 'sysop' end end local level = title.protectionLevels[action] and title.protectionLevels[action][1] if level == 'sysop' or level == 'editprotected' then return 'sysop' elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page return 'sysop' elseif action == 'move' then local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move. if blacklistentry and not blacklistentry.params.autoconfirmed then return 'sysop' elseif title.namespace == 6 then return 'sysop' else return 'autoconfirmed' end end local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename) if blacklistentry then if not blacklistentry.params.autoconfirmed then return 'sysop' else return 'autoconfirmed' end elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason return 'autoconfirmed' elseif level then return level elseif action == 'upload' then return 'uploader' else return '*' end end setmetatable(p, { __index = function(t, k) return function(frame) return t._main(k, frame.args[1]) end end }) return p 022c037fc8895cf858d579fcc2b58907ef93a92e 184 2020-09-29T03:38:47Z wikipedia>Jackmcbarn 0 bring in changes from sandbox Scribunto text/plain local p = {} -- Returns the permission required to perform a given action on a given title. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) local title if type(pagename) == 'table' and pagename.prefixedText then title = pagename elseif pagename then title = mw.title.new(pagename) else title = mw.title.getCurrentTitle() end pagename = title.prefixedText if action == 'autoreview' then local level = mw.ext.FlaggedRevs.getStabilitySettings(title) level = level and level.autoreview if level == 'review' then return 'reviewer' elseif level ~= '' then return level else return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review end elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 ) end if title.namespace == 8 then -- MediaWiki namespace if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page return 'interfaceadmin' else -- any non-JS/CSS MediaWiki page return 'sysop' end elseif title.namespace == 2 and title.isSubpage then if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page return 'interfaceadmin' elseif title.contentModel == 'json' then -- user JSON page return 'sysop' end end if action == 'undelete' then return 'sysop' end local level = title.protectionLevels[action] and title.protectionLevels[action][1] if level == 'sysop' or level == 'editprotected' then return 'sysop' elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page return 'sysop' elseif level == 'templateeditor' then return 'templateeditor' elseif action == 'move' then local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move. if blacklistentry and not blacklistentry.params.autoconfirmed then return 'templateeditor' elseif title.namespace == 6 then return 'filemover' elseif level == 'extendedconfirmed' then return 'extendedconfirmed' else return 'autoconfirmed' end end local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename) if blacklistentry then if not blacklistentry.params.autoconfirmed then return 'templateeditor' elseif level == 'extendedconfirmed' then return 'extendedconfirmed' else return 'autoconfirmed' end elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason return 'autoconfirmed' elseif level then return level elseif action == 'upload' then return 'autoconfirmed' elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts return 'user' else return '*' end end setmetatable(p, { __index = function(t, k) return function(frame) return t._main(k, frame.args[1]) end end }) return p 70256a489edf6be9808031b14a7e3ef3e025da97 Template:Sidebar 10 82 178 2020-06-04T02:43:13Z wikipedia>Primefac 0 TFD closed as keep ([[WP:XFDC|XFDcloser]]) wikitext text/x-wiki {{#invoke:Sidebar|sidebar}}<noinclude> {{documentation}}</noinclude> ab2498000a99daf324f656b0badd187b4a3e2b42 Template:Languages/Title 10 421 1281 2020-07-13T14:39:03Z mw>Fierodelveneto 0 wikitext text/x-wiki {{LangSwitch|lang={{{1|}}} |default={{int:tpt-languages-legend{{#if:{{{1|}}}|/{{{1}}} }} }} |aln=Gjuha: |am=ቋምቋ፦ |an=Idioma: |ang=Sprǣc: |ar=:اللغة |arc=ܠܫܢܐ: |arn=Dungun: |arz=:اللغة |avk=Ava: |ay=Aru: |az=Dil: |bat-smg=Kalba: |bcc=زبان: |bcl=Tataramon: |cdo=Ngṳ̄-ngiòng: |ceb=Pinulongan: |ch=Lengguahe: |ckb-arab=زمان: |co=Lingua : |crh-cyrl=Тиль: |crh-latn=Til: |cu=ѩꙁꙑ́къ : |cv=Чĕлхе: |ext=Palra: |fa=زبان: |fo=Mál: |frc=Langue : |fy=Taal: |ga=Teanga: |gag=Dil: |gan-hans=语言: |gan-hant=語言: |gn=Ñe'ẽ: |got=Razda: |grc=Γλῶσσα: |gu=ભાષા: |gv=Çhengey: |hak=Ngî-ngièn: |haw=Kou 'ōlelo: |he=שפה: |hi=भाषा: |hif-latn=Bhasa: |hy=Լեզու. |ie=Lingue: |ilo=Lengguahe: |ja=言語: |ka=ენა: |kaa=Til: |kg=Ndinga: |kiu=Zon: |kk-arab=:ٴتىل |kk-latn=Til: |km=ភាសា៖ |kn=ಭಾಷೆ: |kv=Кыв: |kw=Yeth: |la=Lingua: |li=Taol: |lij=Lengoa: |loz=Zwa Siselect: |lzh=語: |mdf=Кяль: |mg=fiteny: |mhr=Йылме: |ml=ഭാഷ: |mn=Хэл: |mwl=Lhéngua: |my=ဘာသာ: |nah=Tlahtōlli: |nap=Lengua: |nds=Spraak: |nds-nl=Taal: |ne=भाषा: |new=भाषा: |nso=Polelo: |os=Æвзаг: |pa=ਭਾਸ਼ਾ: |pam=Amanu: |pdt=Sproak: |pnb=بولی: |pnt=Γλώσσαν: |prg=Bilā: |ps=ژبه: |qu=Rimay: |sa=भाषा: |sah=Омугун тыла: |sc=Limba: |sdc=Linga: |se=Giella: |sei=Itom: |shi=tutlayt: |si=භාෂාව: |sli=Sproache: |so=Luqada: |sq=Gjuha: |srn=Tongo: |ss=Lúlwîmi: |stq=Sproake: |su=Basa: |szl=Godka: |ta=மொழி: |te=భాష: |tet=Lian: |tg-cyrl=Забон: |th=ภาษา: |ti=ቋንቋ: |tk=Dil: |to=Lea: |tyv=Дыл: |ug-latn=Til: |vec=Łéngua: |vro=Kiil: |wa=Lingaedje: |war=Yinaknan: |wo=Làkk: |wuu=语言: |xal=Келн: |xh=Ulwimi: |xmf=ნინა: |yo=Èdè: |yue=語言: |zea=Taele: |zu=Ulimi: }}<noinclude>{{Documentation}}</noinclude> 8bade1b59d3829a030e04f265e135347310a41c4 Module:String 828 77 162 2020-08-02T15:49:42Z wikipedia>RexxS 0 separate annotations for str.match from those for str._match Scribunto text/plain --[[ This module is intended to provide access to basic string functions. Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace. Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated. Unit tests for this module are available at Module:String/tests. ]] local str = {} --[[ len This function returns the length of the target string. Usage: {{#invoke:String|len|target_string|}} OR {{#invoke:String|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ) local s = new_args['s'] or '' return mw.ustring.len( s ) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:String|sub|target_string|start_index|end_index}} OR {{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The fist index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 local len = mw.ustring.len( s ) -- Convert negatives for range checking if i < 0 then i = len + i + 1 end if j < 0 then j = len + j + 1 end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ) end if j < i then return str._error( 'String subset indices out of order' ) end return mw.ustring.sub( s, i, j ) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function str.sublength( frame ) local i = tonumber( frame.args.i ) or 0 local len = tonumber( frame.args.len ) return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) ) end --[[ _match This function returns a substring from the source string that matches a specified pattern. It is exported for use in other modules Usage: strmatch = require("Module:String")._match sresult = strmatch( s, pattern, start, match, plain, nomatch ) Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This sub-routine is exported for use in other modules function str._match( s, pattern, start, match_index, plain_flag, nomatch ) if s == '' then return str._error( 'Target string is empty' ) end if pattern == '' then return str._error( 'Pattern string is empty' ) end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Requested start is out of range' ) end if match_index == 0 then return str._error( 'Match index is out of range' ) end if plain_flag then pattern = str._escapePattern( pattern ) end local result if match_index == 1 then -- Find first match is simple case result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ) end local iterator = mw.ustring.gmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table = {} local count = 1 for w in iterator do result_table[count] = w count = count + 1 end result = result_table[ count + match_index ] end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ) else return nomatch end else return result end end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} OR {{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This is the entry point for #invoke:String|match function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) local s = new_args['s'] or '' local start = tonumber( new_args['start'] ) or 1 local plain_flag = str._getBoolean( new_args['plain'] or false ) local pattern = new_args['pattern'] or '' local match_index = math.floor( tonumber(new_args['match']) or 1 ) local nomatch = new_args['nomatch'] return str._match( s, pattern, start, match_index, plain_flag, nomatch ) end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:String|pos|target_string|index_value}} OR {{#invoke:String|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ) local target_str = new_args['target'] or '' local pos = tonumber( new_args['pos'] ) or 0 if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'String index out of range' ) end return mw.ustring.sub( target_str, pos, pos ) end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separatetly. ]] function str.str_find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target'} ) local source_str = new_args['source'] or '' local target_str = new_args['target'] or '' if target_str == '' then return 1 end local start = mw.ustring.find( source_str, target_str, 1, true ) if start == nil then start = -1 end return start end --[[ find This function allows one to search for a target string or pattern within another string. Usage: {{#invoke:String|find|source_str|target_string|start_index|plain_flag}} OR {{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}} Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to true If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0. This function should be safe for UTF-8 strings. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['target'] or '' local start_pos = tonumber(new_args['start']) or 1 local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return 0 end plain = str._getBoolean( plain ) local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber( new_args['count'] ) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = str._getBoolean( plain ) if plain then pattern = str._escapePattern( pattern ) replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. end local result if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ) else result = mw.ustring.gsub( source_str, pattern, replace ) end return result end --[[ simple function to pipe string.rep to templates. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end --[[ escapePattern This function escapes special characters from a Lua string pattern. See [1] for details on how patterns work. [1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns Usage: {{#invoke:String|escapePattern|pattern_string}} Parameters pattern_string: The pattern string to escape. ]] function str.escapePattern( frame ) local pattern_str = frame.args[1] if not pattern_str then return str._error( 'No pattern string specified' ) end local result = str._escapePattern( pattern_str ) return result end --[[ count This function counts the number of occurrences of one string in another. ]] function str.count(frame) local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'}) local source = args.source or '' local pattern = args.pattern or '' local plain = str._getBoolean(args.plain or true) if plain then pattern = str._escapePattern(pattern) end local _, count = mw.ustring.gsub(source, pattern, '') return count end --[[ endswith This function determines whether a string ends with another string. ]] function str.endswith(frame) local args = str._getParameters(frame.args, {'source', 'pattern'}) local source = args.source or '' local pattern = args.pattern or '' if pattern == '' then -- All strings end with the empty string. return "yes" end if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then return "yes" else return "" end end --[[ join Join all non empty arguments together; the first argument is the separator. Usage: {{#invoke:String|join|sep|one|two|three}} ]] function str.join(frame) local args = {} local sep for _, v in ipairs( frame.args ) do if sep then if v ~= '' then table.insert(args, v) end else sep = v end end return table.concat( args, sep or '' ) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {} local index = 1 local value for _, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index] index = index + 1 end new_args[arg] = value end return new_args end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'Errors reported by Module String' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return '' end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Category:' .. error_category .. ']]' .. error_str end return error_str end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'No boolean value found' ) end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) end return str 6df794dd52434e0f6a372c9918f5a9dedd15f579 1249 162 2020-08-17T07:56:29Z mw>Amire80 0 remove seemingly unnecessary letter Scribunto text/plain --[[ This module is intended to provide access to basic string functions. Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace. Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated. Unit tests for this module are available at Module:String/tests. ]] local str = {} --[[ len This function returns the length of the target string. Usage: {{#invoke:String|len|target_string|}} OR {{#invoke:String|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ); local s = new_args['s'] or ''; return mw.ustring.len( s ) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:String|sub|target_string|start_index|end_index}} OR {{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The fist index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ); local s = new_args['s'] or ''; local i = tonumber( new_args['i'] ) or 1; local j = tonumber( new_args['j'] ) or -1; local len = mw.ustring.len( s ); -- Convert negatives for range checking if i < 0 then i = len + i + 1; end if j < 0 then j = len + j + 1; end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ); end if j < i then return str._error( 'String subset indices out of order' ); end return mw.ustring.sub( s, i, j ) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function str.sublength( frame ) local i = tonumber( frame.args.i ) or 0 local len = tonumber( frame.args.len ) return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) ) end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch}} OR {{#invoke:String|pos|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * https://www.lua.org/manual/5.1/manual.html#5.4.1 * https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This sub-routine is exported for use in other modules function str._match( s, pattern, start, match_index, plain, nomatch ) if s == '' then return str._error( 'Target string is empty' ); end if pattern == '' then return str._error( 'Pattern string is empty' ); end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Requested start is out of range' ); end if match_index == 0 then return str._error( 'Match index is out of range' ); end if plain_flag then pattern = str._escapePattern( pattern ); end local result if match_index == 1 then -- Find first match is simple case result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ); end local iterator = mw.ustring.gmatch(s, pattern); if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1; if match_index == 0 then result = w; break; end end else -- Reverse search local result_table = {}; local count = 1; for w in iterator do result_table[count] = w; count = count + 1; end result = result_table[ count + match_index ]; end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ); else return nomatch; end else return result; end end -- This is the entry point for #invoke:String|match function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ); local s = new_args['s'] or ''; local start = tonumber( new_args['start'] ) or 1; local plain_flag = str._getBoolean( new_args['plain'] or false ); local pattern = new_args['pattern'] or ''; local match_index = math.floor( tonumber(new_args['match']) or 1 ); local nomatch = new_args['nomatch']; return str._match( s, pattern, start, match_index, plain, nomatch ) end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:String|pos|target_string|index_value}} OR {{#invoke:String|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ); local target_str = new_args['target'] or ''; local pos = tonumber( new_args['pos'] ) or 0; if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'String index out of range' ); end return mw.ustring.sub( target_str, pos, pos ); end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separatetly. ]] function str.str_find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target'} ); local source_str = new_args['source'] or ''; local target_str = new_args['target'] or ''; if target_str == '' then return 1; end local start = mw.ustring.find( source_str, target_str, 1, true ) if start == nil then start = -1 end return start end --[[ find This function allows one to search for a target string or pattern within another string. Usage: {{#invoke:String|find|source_str|target_string|start_index|plain_flag}} OR {{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}} Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to true If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0. This function should be safe for UTF-8 strings. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ); local source_str = new_args['source'] or ''; local pattern = new_args['target'] or ''; local start_pos = tonumber(new_args['start']) or 1; local plain = new_args['plain'] or true; if source_str == '' or pattern == '' then return 0; end plain = str._getBoolean( plain ); local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ); local source_str = new_args['source'] or ''; local pattern = new_args['pattern'] or ''; local replace = new_args['replace'] or ''; local count = tonumber( new_args['count'] ); local plain = new_args['plain'] or true; if source_str == '' or pattern == '' then return source_str; end plain = str._getBoolean( plain ); if plain then pattern = str._escapePattern( pattern ); replace = mw.ustring.gsub( replace, "%%", "%%%%" ); --Only need to escape replacement sequences. end local result; if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ); else result = mw.ustring.gsub( source_str, pattern, replace ); end return result; end --[[ simple function to pipe string.rep to templates. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end --[[ escapePattern This function escapes special characters from a Lua string pattern. See [1] for details on how patterns work. [1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns Usage: {{#invoke:String|escapePattern|pattern_string}} Parameters pattern_string: The pattern string to escape. ]] function str.escapePattern( frame ) local pattern_str = frame.args[1] if not pattern_str then return str._error( 'No pattern string specified' ); end local result = str._escapePattern( pattern_str ) return result end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {}; local index = 1; local value; for i,arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index]; index = index + 1; end new_args[arg] = value; end return new_args; end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame(); local error_category = frame.args.error_category or 'Errors reported by Module String'; local ignore_errors = frame.args.ignore_errors or false; local no_category = frame.args.no_category or false; if str._getBoolean(ignore_errors) then return ''; end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>'; if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Category:' .. error_category .. ']]' .. error_str; end return error_str; end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value; if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower(); if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false; else boolean_value = true; end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str; else error( 'No boolean value found' ); end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); end return str 32c2c0696ac2e148d7e7390f3cd788a6f8e48361 Template:Em 10 147 341 2020-08-09T23:17:35Z wikipedia>Bsherr 0 /* top */as found, replacing [[Template:Tld]] with [[Template:Tlc]] or adding/updating category placement comments, plus general and typo fixes wikitext text/x-wiki <em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude> {{documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> e2fac6fb507a0dd72c4e79d02403049c7d857c8d Template:Yesno 10 23 156 45 2020-08-28T03:15:17Z wikipedia>Xaosflux 0 add additional paramerters, "t", "f" - requested on talk - worked in sandbox /testcases wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |f |false |off |0 = {{{no|<!-- null -->}}} | = {{{blank|{{{no|<!-- null -->}}}}}} |¬ = {{{¬|}}} |yes |y |t |true |on |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }}<noinclude> {{Documentation}} </noinclude> 629c2937bc5cf7cfe13cd2a598582af832782399 Template:Abbr 10 233 690 2020-09-02T09:46:47Z wikipedia>Primefac 0 remove third parameter, as it is causing lint issues (TPER) wikitext text/x-wiki <abbr {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} title="{{#tag:nowiki|{{#invoke:String|replace|{{{2|}}}|"|&quot;}}}}">{{{1|}}}</abbr><noinclude>{{Documentation}} </noinclude> 5fd53aa19ba927ce3eea9092a4fa31f881df0a6e Template:Nihongo 10 231 686 2020-09-17T17:04:00Z wikipedia>Trappist the monk 0 use [[Module:Nihongo]]; wikitext text/x-wiki <includeonly>{{#invoke:Nihongo|nihongo}}</includeonly><noinclude> {{documentation}} <!-- Add categories to the /doc subpage and interwikis to Wikidata. --> </noinclude> d0dcc4933a65afd93128f90aa7ce4ba2c8bd20e7 Template:Lang 10 247 718 2020-10-19T17:49:42Z wikipedia>Gonnym 0 wikitext text/x-wiki <includeonly>{{#invoke:Lang|{{{fn|lang}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> ed35aafbfe8198c5ad80fd861124244d0c7f2742 Module:Documentation/styles.css 828 34 67 2020-10-25T15:49:33Z mw>Pppery 0 Protected "[[Module:Documentation/styles.css]]": Matching protection level with [[Module:Documentation]] ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) sanitized-css text/css .ts-doc-sandbox .mbox-image { padding:.75em 0 .75em .75em; } .ts-doc-doc { clear: both; background-color: #eaf3ff; border: 1px solid #a3caff; margin-top: 1em; border-top-left-radius: 2px; border-top-right-radius: 2px; } .ts-doc-header { background-color: #c2dcff; padding: .642857em 1em .5em; border-top-left-radius: 2px; border-top-right-radius: 2px; } .ts-doc-header .ts-tlinks-tlinks { line-height: 24px; margin-left: 0; } .ts-doc-header .ts-tlinks-tlinks a.external { color: #0645ad; } .ts-doc-header .ts-tlinks-tlinks a.external:visited { color: #0b0080; } .ts-doc-header .ts-tlinks-tlinks a.external:active { color: #faa700; } .ts-doc-content { padding: .214286em 1em; } .ts-doc-content:after { content: ''; clear: both; display: block; } .ts-doc-heading { display: inline-block; padding-left: 30px; background: center left/24px 24px no-repeat; /* @noflip */ background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fb/OOjs_UI_icon_puzzle-ltr.svg); height: 24px; line-height: 24px; font-size: 13px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; } .ts-doc-content > *:first-child, .ts-doc-footer > *:first-child { margin-top: .5em; } .ts-doc-content > *:last-child, .ts-doc-footer > *:last-child { margin-bottom: .5em; } .ts-doc-footer { background-color: #eaf3ff; border: 1px solid #a3caff; padding: .214286em 1em; margin-top: .214286em; font-style: italic; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } @media all and (min-width: 720px) { .ts-doc-header .ts-tlinks-tlinks { float: right; } } 71b09af67524324bf70d203a0a724bc74ec6c82e 244 67 2020-11-19T20:21:58Z wikipedia>Izno 0 Changed protection level for "[[Module:Documentation/styles.css]]": actually match module ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) sanitized-css text/css /* {{pp|small=yes}} */ .documentation, .documentation-metadata { border: 1px solid #a2a9b1; background-color: #ecfcf4; clear: both; } .documentation { margin: 1em 0 0 0; padding: 1em; } .documentation-metadata { margin: 0.2em 0; /* same margin left-right as .documentation */ font-style: italic; padding: 0.4em 1em; /* same padding left-right as .documentation */ } .documentation-startbox { padding-bottom: 3px; border-bottom: 1px solid #aaa; margin-bottom: 1ex; } .documentation-heading { font-weight: bold; font-size: 125%; } .documentation-clear { /* Don't want things to stick out where they shouldn't. */ clear: both; } .documentation-toolbar { font-style: normal; font-size: 85%; } ce0e629c92e3d825ab9fd927fe6cc37d9117b6cb Module:For 828 107 230 2020-11-02T22:29:56Z wikipedia>Andrybak 0 don't add talk pages and pages in the user namespace to [[:Category:Hatnote templates with errors]] – this is similar to [[Special:Diff/953627233/986768317|Module:Other uses of]] and [[Special:Diff/967664662|Module:Hatnote]] Scribunto text/plain local mArguments --initialize lazily local mHatlist = require('Module:Hatnote list') local mHatnote = require('Module:Hatnote') local yesNo = require('Module:Yesno') local p = {} --Implements {{For}} from the frame --uses capitalized "For" to avoid collision with Lua reserved word "for" function p.For (frame) mArguments = require('Module:Arguments') return p._For(mArguments.getArgs(frame)) end --Implements {{For}} but takes a manual arguments table function p._For (args) local use = args[1] if (not use) then return mHatnote.makeWikitextError( 'no context parameter provided. Use {{other uses}} for "other uses" hatnotes.', 'Template:For#Errors', args.category ) end local pages = {} function two (a, b) return a, b, 1 end --lets us run ipairs from 2 for k, v in two(ipairs(args)) do table.insert(pages, v) end local title = mw.title.getCurrentTitle() local skipCat = title.isTalkPage or title.namespace == 2 --don't categorise talk pages and userspace local oddCat = skipCat and '' or '[[Category:Hatnote templates using unusual parameters]]' local category = yesNo(args.category) return mHatnote._hatnote( mHatlist.forSeeTableToString({{use = use, pages = pages}}), {selfref = args.selfref} ) .. ( (use == 'other uses') and ((category == true) or (category == nil)) and oddCat or '' ) end return p 2faf1bd8c657f3425af829cbde9733a936d8d4f4 Template:Nmbox/styles.css 10 418 1271 2020-11-13T11:35:09Z mw>Shirayuki 0 +padding sanitized-css text/css .nmbox { clear: both; background: #f8f9fa; border: 1px solid #AAA; box-sizing: border-box; margin: 2px 0; padding: 0; } .nmbox * { box-sizing: border-box; } .nmbox-header { background: #eaecf0; padding: 4px 0.5em; font-weight: bold; text-align: center; white-space: nowrap } .nmbox .mbox-image { display: inline-block; padding-right: 1em; } .nmbox-text { border-top: 1px solid #AAA; width: 100%; padding: 4px 0.5em; } @media screen and (min-width: 768px) { .nmbox-header { display: table-cell; border-right: 1px solid #AAA; width: 1%; } .nmbox-text { border-top: none; display: table-cell; } } 167c42527fe0b23e717da7cc834c96d0c4f9d1cc Template:Tlxs 10 154 355 2020-11-20T18:15:40Z wikipedia>Primefac 0 Primefac moved page [[Template:Tlxs]] to [[Template:Template link expanded with subst]]: make the name more obvious wikitext text/x-wiki #REDIRECT [[Template:Template link expanded with subst]] {{Redirect category shell| {{R from move}} }} 74e095f26cae0cd68518f2f66d74e948a7861c79 Template:Tlg 10 187 535 2020-11-20T18:19:26Z wikipedia>Primefac 0 Primefac moved page [[Template:Tlg]] to [[Template:Template link general]]: clearer name wikitext text/x-wiki #REDIRECT [[Template:Template link general]] {{Redirect category shell| {{R from move}} }} 707ce913a3ffa8193c9377c3ded7db7b72407500 Template:Tld 10 260 744 2020-11-20T18:52:18Z wikipedia>Primefac 0 avoid redir wikitext text/x-wiki #REDIRECT [[Template:Template link code]] be5d6275ea41d83224503e05901f3405c82141f7 Template:Tlx 10 35 329 2020-11-20T18:53:35Z wikipedia>Primefac 0 Primefac moved page [[Template:Tlx]] to [[Template:Template link expanded]] over redirect: expand name, make it more obvious wikitext text/x-wiki #REDIRECT [[Template:Template link expanded]] {{Redirect category shell| {{R from move}} }} 1fec988ceb46cb324af228aac45d7cd25fcc9008 Template:Template link with parameters 10 189 539 2020-11-21T12:04:32Z wikipedia>Primefac 0 wikitext text/x-wiki <includeonly>{{#Invoke:Template link general|main|nowrap=yes}}</includeonly><noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlp}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 8fe73a6eea633360a927820d10469b7292bfc1c2 Template:Template link expanded 10 142 331 2020-11-21T12:04:41Z wikipedia>Primefac 0 update wikitext text/x-wiki {{#Invoke:Template link general|main|code=on}}<noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlx}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 6c99696fee02f1da368ed20d2504e19bc15b1c13 Template:Template link with link off 10 113 256 2020-11-21T12:06:17Z wikipedia>Primefac 0 update wikitext text/x-wiki <includeonly>{{#Invoke:Template link general|main|nowrap=yes|nolink=yes}}</includeonly><noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlf}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> b099fea5d1f36b0b4b9cb253ad3a9f4e095f6851 Template:Template link code 10 259 742 2020-11-21T12:06:22Z wikipedia>Primefac 0 update wikitext text/x-wiki <includeonly>{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}</includeonly><noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlc}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 044f00ca1bfc10cb967c32e893043ccc6f739764 Template:Template link expanded with subst 10 155 357 2020-11-21T12:06:51Z wikipedia>Primefac 0 update wikitext text/x-wiki {{#Invoke:Template link general|main|code=on|subst=on}}<noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlxs}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 9b2ef0a8c882c336902f1d61dcff3658528c2210 Template:Graph, chart and plot templates 10 214 606 2020-12-04T23:02:00Z wikipedia>Funandtrvl 0 fix code wikitext text/x-wiki {{Navbox | name = Graph, chart and plot templates |title=[[:Category:Graph, chart and plot templates|Graph, chart and plot templates]] |state = {{{state<includeonly>|expanded</includeonly>}}} |bodyclass = hlist |group5 = Many types |list5 = [[Template:Graph:Chart]], [[Module:Chart]] |group10 = [[mw:Extension:Graph|Graph Extension]] |list10 = [[Template:Graph:Chart]], [[Template:Graph:Lines]], [[Template:Graph:Stacked]], [[Template:Graph:Street map with marks]] |group20 = Bar |list20 = [[Template:Bar chart]], [[Template:Bar box]] |group30 = Line |list30 = [[Template:Graph:Lines]] |group40 = [[Scatter plot]] |list40 = [[Template:Dot chart]] |group50 = [[Pie chart]] |list50 = [[Template:Pie chart]] |group60 = Tree |list60 = * [[Template:Tree chart]] * [[Template:Ahnentafel]] |group70 = Stacked |list70 = [[Template:Stacked bar]] |group80 = [[Cartogram]] |list80 = [[Template:Graph:Map]], [[Template:Global Heat Maps by Year]] |group90 = Color legends |list90 = [[Template:Legend]], [[Template:Legend-line]], [[Template:BrewerColorLegends]] }}{{Template other |<includeonly>{{sandbox other||[[Category:Graph, chart and plot templates]]}}</includeonly>}}<noinclude>{{documentation|content= {{collapsible option|default=expanded}} [[Category:Graph, chart and plot templates| ]] }}</noinclude> 9669c735c207d7384b95b7e4b32c85cffcc929f2 Template:COinS safe 10 262 748 2020-12-10T09:01:22Z wikipedia>Andrybak 0 [[:File:Stop hand nuvola.svg]] is licensed under "Creative Commons Attribution-ShareAlike 2.5", link is required for attribution — Undid revision 987128260 by [[Special:Contributions/JsfasdF252|JsfasdF252]] ([[User talk:JsfasdF252|talk]]) wikitext text/x-wiki {{notice |image={{#ifeq: {{{1|}}}|n|Stop hand nuvola.svg}} |{{#ifeq: {{{1|}}}|n |This template should not be used in citation templates such as [[Help:Citation Style 1|Citation Style 1]] and [[Help:Citation Style 2|Citation Style 2]], because it includes markup that will pollute the [[COinS]] metadata they produce; see [[Wikipedia:COinS]]. {{{addtext|}}}{{Sandbox other||[[Category:Templates not safe for use in citation templates]]}} |This template is safe for use in citation templates that produce [[COinS]] metadata; see [[Wikipedia:COinS]]. If HTML or other markup is added, then the template must be reevaluated. {{{addtext|}}} }} }}<noinclude> {{Documentation}} <!-- Please add categories to the /doc subpage, and interwikis at Wikidata (see Wikipedia:Wikidata) --> </noinclude> 47abee673d74440d28e801111bf6ee765cd998df Template:Tl 10 67 136 2021-02-12T22:03:00Z wikipedia>Anthony Appleyard 0 Anthony Appleyard moved page [[Template:Tl]] to [[Template:Template link]]: [[Special:Permalink/1006428669|Requested]] by Buidhe at [[WP:RM/TR]]: RM closed as move wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Redirect category shell| {{R from move}} }} d6593bb3b4a866249f55d0f34b047a71fe1f1529 Template:Template shortcut 10 160 367 2021-02-16T17:54:32Z wikipedia>Nardog 0 TfM closed as convert wikitext text/x-wiki <includeonly>{{#invoke:Shortcut|main|template=yes}}</includeonly><noinclude>{{Documentation}}</noinclude> bfb2889c4c0ec36294b7b667f5e03350d2df680e Module:Shortcut/config 828 157 361 2021-02-16T18:43:45Z wikipedia>Nardog 0 Scribunto text/plain -- This module holds configuration data for [[Module:Shortcut]]. return { -- The heading at the top of the shortcut box. It accepts the following parameter: -- $1 - the total number of shortcuts. (required) ['shortcut-heading'] = '[[Wikipedia:Shortcut|{{PLURAL:$1|Shortcut|Shortcuts}}]]', -- The heading when |redirect=yes is given. It accepts the following parameter: -- $1 - the total number of shortcuts. (required) ['redirect-heading'] = '[[Wikipedia:Redirect|{{PLURAL:$1|Redirect|Redirects}}]]', -- The error message to display when a shortcut is invalid (is not a string, or -- is the blank string). It accepts the following parameter: -- $1 - the number of the shortcut in the argument list. (required) ['invalid-shortcut-error'] = 'shortcut #$1 was invalid (shortcuts must be ' .. 'strings of at least one character in length)', -- The error message to display when no shortcuts or other displayable content -- were specified. (required) ['no-content-error'] = 'Error: no shortcuts were specified and the ' .. mw.text.nowiki('|msg=') .. ' parameter was not set.', -- A category to add when the no-content-error message is displayed. (optional) ['no-content-error-category'] = 'Shortcut templates with missing parameters', } f9d1d94844d5953753eb19e30a3ce389eda3d319 Template:Breadcrumb 10 278 791 2021-02-20T12:36:45Z wikipedia>Matt Fitzpatrick 0 added accessibility attributes, announce this as "breadcrumb navigation region" wikitext text/x-wiki <div role="navigation" aria-label="Breadcrumb" id="contentSub" class="plainlinks nourlexpansion" style="position:relative;{{#switch:{{{28px}}}|yes|yes=bottom:28px;}}" {{#switch:{{{align}}}|right|right=align="right"}}{{#switch:{{{right}}}|yes|yes=align="right"}}><span class="subpages">{{{1<noinclude>|&lt; [[Breadcrumb (navigation)|Breadcrumb]]</noinclude>}}}{{ #if:{{{2|<noinclude>2</noinclude>}}}|&#32;&#124; {{{2<noinclude>|2</noinclude>}}}}}{{ #if:{{{3|<noinclude>3</noinclude>}}}|&#32;&#124; {{{3<noinclude>|3</noinclude>}}}}}{{ #if:{{{4|<noinclude>4</noinclude>}}}|&#32;&#124; {{{4<noinclude>|4</noinclude>}}}}}{{ #if:{{{5|<noinclude>5</noinclude>}}}|&#32;&#124; {{{5<noinclude>|5</noinclude>}}}}}</span></div><noinclude> {{documentation|content= There is also an optional parameter named <nowiki>{{{align}}}</nowiki>, which allows users to align their breadcrumb at the right side of the page. Use <code><nowiki>|align=right</nowiki></code> to do so. If you are using a back and forth system using two breadcrumbs on a single page, please also add the optional <code><nowiki>|28px=yes</nowiki></code> parameter to the breadcrumb at the right side. [[Category:Wikipedia formatting and function templates]] }}</noinclude> e5e41ee10cee6ebf0e4bb1d4310051f1989deb87 Template:Template link general 10 186 533 2021-02-20T18:40:07Z wikipedia>Pppery 0 Make substable per edit request wikitext text/x-wiki {{{{{|safesubst:}}}#Invoke:Template link general|main}}<noinclude> {{Documentation}} </noinclude> 9871d2f490eaedd832a0ae8016adbf807ddf7b71 Template:Template link 10 68 138 2021-03-25T19:03:22Z wikipedia>Izno 0 [[Wikipedia:Templates for discussion/Log/2021 March 18#Template:Tlu]] closed as keep ([[WP:XFDC#4.0.11|XFDcloser]]) wikitext text/x-wiki &#123;&#123;[[Template:{{{1}}}|{{{1}}}]]&#125;&#125;<noinclude>{{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> eabbec62efe3044a98ebb3ce9e7d4d43c222351d Template:Tree chart/end 10 207 592 2021-04-02T21:11:35Z wikipedia>Jonesey95 0 Fix [[Special:LintErrors|Linter]] errors wikitext text/x-wiki <noinclude><table></noinclude></table><noinclude>{{Documentation|Template:Chart/end/doc}}</noinclude> 15c4ecebd8444b7398759d8fbcb9ac702f8ce07f Template:Languages/Lang 10 425 1289 2021-04-03T07:40:12Z mw>Baris6161TURK 0 Plz work wikitext text/x-wiki {{#ifexist: {{#if:{{{2|}}}|{{{2}}}|{{translatable}}}}/{{{1|}}} |&nbsp;• <bdi lang="{{{1|}}}">{{#if:{{{2|}}} |<span class="plainlinks">[{{fullurl:{{{2|}}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span> |<span class="plainlinks">[{{fullurl:{{translatable}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span> }}</bdi> }}<noinclude> {{Documentation}} </noinclude> 7aabf502401e5b3500551280a475fafa5adc42bc Template:Dir 10 406 1245 2021-04-04T04:39:11Z mw>Shirayuki 0 properly test rtl/ltr parameters when they are effectively set per [[translatewiki:Template:Dir]] wikitext text/x-wiki {{#switch:{{lc:{{#if:{{{lang|}}}|{{{lang|}}}|{{#if:{{{1|}}}|{{{1|}}}|{{int:lang}}}}}}}} |aeb|aeb-arab|aic|ar|arc|arq|ary|arz|azb|bcc|bgn|bqi|bqp|ckb|ckb-arab|dv|en-rtl|fa|fa-af|glk|ha-arab|haz|he|khw|kk-arab|kk-cn|ks|ks-arab|ku-arab|lki|lrc|luz|mzn|nqo|ota|phn|pnb|prd|prs|ps|sd|sdh|skr|skr-arab|tg-arab|tly|ug|ug-arab|ur|uz-arab|xpu|ydd|yi ={{#ifeq:{{{rtl|}}}|{{{rtl|-}}}|{{{rtl|}}}|{{#ifeq:{{{2|}}}|{{{2|-}}}|{{{2|}}}|rtl}}}} |#default ={{#ifeq:{{{ltr|}}}|{{{ltr|-}}}|{{{ltr|}}}|{{#ifeq:{{{3|}}}|{{{3|-}}}|{{{3|}}}|ltr}}}} }}<noinclude>{{documentation}}</noinclude> 2ea56bd56901a92d8a5cb44b0835e8534d5e0807 Template:Lua sidebar/styles.css 10 130 292 2021-04-24T04:27:37Z wikipedia>Izno 0 max-width sanitized-css text/css .lua-sidebar { width: auto; max-width: 22em; } 9984d36eb49fae70dd00527c993784d775409a6b Template:Plainlist 10 8 15 2021-05-13T02:46:07Z mw>Izno 0 ok, guess I have to do it like that wikitext text/x-wiki <templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}">{{#if:{{{1|}}}| {{{1}}} </div>}}<noinclude></div> {{documentation}} </noinclude> 8ca89b36606f7babc854ca4f296b3cea3e358a07 Template:Endplainlist 10 112 248 2021-05-14T07:01:30Z wikipedia>WOSlinker 0 fix lint wikitext text/x-wiki <includeonly></div></includeonly><noinclude> {{documentation|Template:Plainlist/doc}} </noinclude> d545c41582328dd4f197e2b1848c8ad7392b92e0 Template:(! 10 426 1291 2021-06-11T03:20:20Z mw>ExE Boss 0 /* template-documentation */ Transclude documentation subpage wikitext text/x-wiki <onlyinclude><includeonly>{|</includeonly></onlyinclude><nowiki>{|</nowiki> {{Documentation}} 13b9672984a140a00c683872647b3b2f8f29c381 Template:Category link with count 10 124 280 2021-06-11T18:13:44Z wikipedia>GKFX 0 Support wider range of (valid) input format wikitext text/x-wiki [[:Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|<!-- -->{{#if:{{{name|}}}|{{{name}}}|Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}}}<!-- -->]]&nbsp;({{PAGESINCATEGORY:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|{{{2|all}}}}})<noinclude> {{Documentation}} </noinclude> f93f1540b8c157703bd6d24ae35c35bef745981d Template:Mbox/TemplateData 10 446 1341 2021-06-23T14:50:22Z mw>ExE Boss 0 Add `editlinks` and `docpage` parameters to {{[[Template:TemplateData header|TemplateData header]]}} wikitext text/x-wiki <noinclude>{{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> </noinclude>{{TemplateData header|editlinks=1|docpage=Mbox/TemplateData}} <templatedata> { "description": "This is the specialized version of the {{mbox}} or “multi namespace message box” meta-template.", "format": "block", "params": { "type": { "label": "Type", "suggestedvalues": [ "speedy", "delete", "content", "style", "notice", "move", "protection" ], "type": "string", "default": "notice", "suggested": true }, "image": { "label": "Image (left)", "suggestedvalues": [ "none" ], "default": "Depends on the “type” parameter.", "suggested": true, "type": "content" }, "imageright": { "label": "Image (right)", "type": "content" }, "style": { "label": "CSS Style", "type": "string" }, "textstyle": { "label": "Text CSS Style", "type": "string" }, "text": { "label": "Text", "suggested": true, "type": "content" }, "small": { "label": "Small?", "suggestedvalues": [ "{{{small|}}}", "left", "yes", "1" ], "default": "0", "type": "boolean" }, "smallimage": { "label": "Small Image (left)", "suggestedvalues": [ "none" ], "default": "{{{image}}}", "type": "content" }, "smallimageright": { "label": "Small Image (right)", "suggestedvalues": [ "none" ], "default": "{{{imageright}}}", "type": "content" }, "smalltext": { "label": "Small Text", "default": "{{{text}}}", "type": "content" } } } </templatedata><noinclude> <!-- Categories below this line; interwikis at Wikidata --> [[Category:TemplateData documentation{{#translation:}}]] </noinclude> 9df258d03498993e318125a2a2c84537a95b0653 Template:Mbox templates 10 447 1343 2021-06-23T18:33:45Z mw>ExE Boss 0 Use {{[[Template:Tll|Template link localized]]}} wikitext text/x-wiki <languages/> <onlyinclude>{{nmbox | image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]] | header = {{ll|Template:Mbox|2=<translate><!--T:1--> Message box templates</translate>}} | text = {{flatlist|1= * {{tll|ambox}} * {{tll|cmbox}} * {{tll|fmbox}} * {{tll|imbox}} * {{tll|nmbox}} * {{tll|ombox}} * {{tll|tmbox}} }} }}</onlyinclude> [[Category:Navigation templates{{#translation:}}]] 9dc6ee90892df1c583767586088a9a448e0a441c Template:Mbox templates/en 10 448 1345 2021-06-23T21:59:50Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <languages/> <onlyinclude>{{nmbox | image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]] | header = {{ll|Template:Mbox|2=Message box templates}} | text = {{flatlist|1= * {{tll|ambox}} * {{tll|cmbox}} * {{tll|fmbox}} * {{tll|imbox}} * {{tll|nmbox}} * {{tll|ombox}} * {{tll|tmbox}} }} }}</onlyinclude> [[Category:Navigation templates{{#translation:}}]] d09263a3b65012961144152a83c6a76b403d4e21 Module:Lua banner/config 828 165 381 2021-06-26T17:30:02Z mw>ExE Boss 0 Set `wish_category` to [[:Category:Lua-candidates|Lua-candidates]] Scribunto text/plain local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always added if there is an error). -- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have -- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules, -- so they *will* have categories. All rules should be in the -- ['<subpage name>'] = true, -- format. cfg['subpage_blacklist'] = { ['doc'] = true, ['sandbox'] = true, ['sandbox2'] = true, ['testcases'] = true, } -- Allow wishes: whether wishes for conversion to Lua are allowed. -- If true, calls with zero parameters are valid, and considered to be wishes: -- The box’s text is “This template should use Lua”, and cfg['wish_category'] is -- added. If false, such calls are invalid, an error message appears, and -- cfg['error_category'] is added. cfg['allow_wishes'] = false -- Default category: this category is added if the module call contains errors -- (e.g. no module listed). A category name without namespace, or nil -- to disable categorization (not recommended). cfg['error_category'] = 'Lua templates with errors' -- Wish category: this category is added if no module is listed, and wishes are -- allowed. (Not used if wishes are not allowed.) A category name without -- namespace, or nil to disable categorization. cfg['wish_category'] = 'Lua-candidates' -- Default category: this category is added if none of the below module_categories -- matches the first module listed. A category name without namespace, or nil -- to disable categorization. cfg['default_category'] = 'Lua-based templates' -- Module categories: one of these categories is added if the first listed module -- is the listed module (e.g. {{Lua|Module:String}} adds -- [[Category:Lua String-based templates]].) Format: -- ['<module name>'] = '<category name>' -- where neither <module name> nor <category name> contains namespace. An empty -- table (i.e. no module-based categorization) will suffice on smaller wikis. cfg['module_categories'] = { ['String'] = 'Lua String-based templates', } return cfg -- Don’t touch this line. 960aa5bb0f008cf7e3ef37963e1dbc797c2ffdd5 Module:Lua banner 828 121 379 2021-06-26T17:46:56Z mw>ExE Boss 0 Fix `wish` parameter Scribunto text/plain -- This module implements the {{lua}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local TNT = require('Module:TNT') local p = {} local function format(msg) return TNT.format('I18n/Lua banner', msg) end local function getConfig() return mw.loadData('Module:Lua banner/config') end function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args, cfg) local modules = mTableTools.compressSparseArray(args) local box = p.renderBox(modules, cfg, args) local trackingCategories = p.renderTrackingCategories(args, modules, nil, cfg) return box .. trackingCategories end function p.renderBox(modules, cfg, args) local boxArgs = {} if #modules < 1 then cfg = cfg or getConfig() if cfg['allow_wishes'] or yesno(args and args.wish) then boxArgs.text = format('wishtext') else boxArgs.text = string.format('<strong class="error">%s</strong>', format('error_emptylist')) end else local moduleLinks = {} for i, module in ipairs(modules) do moduleLinks[i] = string.format('[[:%s]]', module) end local moduleList = mList.makeList('bulleted', moduleLinks) boxArgs.text = format('header') .. '\n' .. moduleList end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = string.format( '[[File:Lua-logo-nolabel.svg|30px|alt=%s|link=%s]]', format('logo_alt'), format('logo_link') ) return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, modules, titleObj, cfg) if yesno(args.nocat) then return '' end cfg = cfg or getConfig() local cats = {} -- Error category if #modules < 1 and not (cfg['allow_wishes'] or yesno(args.wish)) and cfg['error_category'] then cats[#cats + 1] = cfg['error_category'] end -- Lua templates category titleObj = titleObj or mw.title.getCurrentTitle() if titleObj.namespace == 10 and not cfg['subpage_blacklist'][titleObj.subpageText] then local category = args.category if not category then local pagename = modules[1] and mw.title.new(modules[1]) category = pagename and cfg['module_categories'][pagename.text] if not category then if (cfg['allow_wishes'] or yesno(args.wish)) and #modules < 1 then category = cfg['wish_category'] else category = cfg['default_category'] end end end if category then cats[#cats + 1] = category end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p 4b55b48bd92caeb84decde5f14c77b68ae09653e Template:Navbox 10 66 130 2021-06-26T18:05:09Z wikipedia>Trialpears 0 Remove TfD notice as it wouldn't involve any changes to this template. wikitext text/x-wiki <includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude> {{Documentation}} </noinclude> fe9b964401f895918ee4fe078678f1722a3c41ec Template:GetFallback 10 424 1287 2021-06-28T11:24:11Z mw>Shirayuki 0 Undo revision 4671593 by [[Special:Contributions/Shirayuki|Shirayuki]] ([[User talk:Shirayuki|talk]]) wikitext text/x-wiki {{#switch: {{Uselang|lang={{{1|}}}}} | arz = ar | be-x-old = be-tarask <!-- same language; be-x-old is used on be-x-old.wikipedia but be-tarask is the preferred code --> | be-tarask = be-x-old | crh-cyrl | crh-latn = crh | als | bar | de-formal | de-at | de-ch | frr | ksh = de | en-gb = en | ckb | mzn | glk = fa | mg | br | co | frp | ht | ty | wa = fr | hif-deva | hif-latn = hif | ike-cans | ike-latn = ike | vec = it | kk-arab | kk-cyrl | kk-latn | kk-cn | kk-kz | kk-tr = kk | ku-latn | ku-arab = ku | nds-nl | pdt = nds | nds = nds-nl | af | fy | li | nl-informal | vls | zea = nl | szl | csb = pl | pt-br = pt | ruq-cyrl | ruq-grek | ruq-latn = ruq | sr-ec | sr-el = sr | tg-cyrl | tg-latn = tg | tt-cyrl | tt-latn = tt | gan | gan-hans | ii | wuu | za | zh | zh-cn | zh-my | zh-sg = zh-hans | ami | cdo | gan-hant | hak | lzh | nan | pwn | szy | tay | trv | zh-classical | zh-hk | zh-min-nan | zh-mo | zh-tw = zh-hant | #default = {{#if: {{{default|}}} | {{{default|}}} | en }} }}<noinclude> {{documentation}} </noinclude> 7deecc99a03a7fd2bab8ac12e18aa7a782979d2f Template:Nowrap/styles.css 10 411 1257 2021-06-29T01:46:27Z mw>ExE Boss 0 Copied from [[c:Template:Nowrap/styles.css]] sanitized-css text/css .nowrap, .nowrap a:before, .nowrap .selflink:before { white-space: nowrap; } becbf59e1bc0e28944a852c01b3f8473995d87b8 Template:Module other 10 167 385 2021-06-29T15:22:28Z mw>Hasley 0 Reverted edits by [[Special:Contribs/2401:4900:3996:6A4E:2CEB:DA57:3646:62A7|2401:4900:3996:6A4E:2CEB:DA57:3646:62A7]] ([[User talk:2401:4900:3996:6A4E:2CEB:DA57:3646:62A7|talk]]) to last version by CptViraj wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Module}} | module | other }} }} | module = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 5a2444103b3cffc028f4dc0de2e8a278f87c7129 Template:Uses TemplateStyles 10 17 33 2021-07-02T19:47:07Z mw>Tacsipacsi 0 Undo revision 4680578 by [[Special:Contributions/ExE Boss|ExE Boss]] ([[User talk:ExE Boss|talk]]): neither this is the [[Module:Uses TemplateStyles/config|local configuration]]; furthermore, recreating the Lua logic in wikitext is a plain waste of efforts (not to mention that it’s not even correct: {{#if:}} simply tests emptiness, so the “and” in the middle ensures that it will always be truthy, no matter what the parameters are) wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Uses TemplateStyles|main}}</includeonly></onlyinclude> {{Uses TemplateStyles|Template:Uses TemplateStyles/example.css|nocat=true}} {{documentation}} 91689f58ed39c0b53e3fadf3edb76166ba33a964 Module:Uses TemplateStyles/config 828 32 63 2021-07-03T06:37:58Z mw>ExE Boss 0 Use {{[[mw:Special:MyLanguage/Help:Extension:Translate/Page translation administration#.23translation|#translation]]:}} for [[:Category:Templates using TemplateStyles]] (I didn’t think it would work here) Scribunto text/plain local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always added if there is an error). -- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have -- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules, -- so they *will* have categories. All rules should be in the -- ['<subpage name>'] = true, -- format. cfg['subpage_blacklist'] = { ['doc'] = true, ['sandbox'] = true, ['sandbox2'] = true, ['testcases'] = true, } -- Sandbox title: if the stylesheet’s title is <template>/<stylesheet>.css, the -- stylesheet’s sandbox is expected to be at <template>/<sandbox_title>/<stylesheet>.css -- Set to nil to disable sandbox links. cfg['sandbox_title'] = 'sandbox' -- Error category: this category is added if the module call contains errors -- (e.g. no stylesheet listed). A category name without namespace, or nil -- to disable categorization (not recommended). cfg['error_category'] = nil -- Default category: this category is added if no custom category is specified -- in module/template call. A category name without namespace, or nil -- to disable categorization. cfg['default_category'] = 'Templates using TemplateStyles' .. mw.getCurrentFrame():callParserFunction("#translation:") -- Protection conflict category: this category is added if the protection level -- of any stylesheet differs from the one of the template. A category name -- without namespace, or nil to disable categorization (not recommended). cfg['protection_conflict_category'] = nil -- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil -- to disable padlock check. cfg['padlock_pattern'] = nil -- Missing padlock category: this category is added if a protected stylesheet -- doesn’t contain any padlock template (specified by the above Lua pattern). -- A category name without namespace (no nil allowed) if the pattern is not nil, -- unused (and thus may be nil) otherwise. cfg['missing_padlock_category'] = nil return cfg -- Don’t touch this line. 2e6b3c52ca2ac4b6a454a6d572121c4bf6e16ea1 Template:Lua 10 122 375 276 2021-07-04T05:28:53Z mw>ExE Boss 0 Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]> wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Lua banner|main}}</includeonly></onlyinclude> {{Lua|Module:Lua banner}} {{Documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> 4642b0a145984533bddd3a6f0293c56ce201b88d Template:Unordered list 10 428 1295 2021-07-04T11:12:09Z mw>ExE Boss 0 ExE Boss moved page [[Template:Bulleted list]] to [[Template:Unordered list]]: Match the resulting <[[devmo:Web/HTML/Element/ul|ul]]> element wikitext text/x-wiki <onlyinclude>{{<includeonly>safesubst:</includeonly>#invoke:List|bulleted}}</onlyinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> bb14fb759a0fb4040a621405e0c2616019ac9a62 Template:Flatlist/styles.css 10 443 1335 2021-07-05T20:28:28Z mw>ExE Boss 0 [[mw:Special:Diff/999662/4662823|15 revisions]] imported from [[mw:Snippets/Horizontal lists]] sanitized-css text/css /** * Style for horizontal lists (separator following item). * @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists * @revision 9 (2016-08-10) * @author [[User:Edokter]] */ .hlist dl, .hlist ol, .hlist ul { margin: 0; padding: 0; } /* Display list items inline */ .hlist dd, .hlist dt, .hlist li { /* don't trust the note that says margin doesn't work with inline * removing margin: 0 makes dds have margins again */ margin: 0; display: inline; } /* Display nested lists inline */ /* We remove .inline since it's not used here. .hlist.inline, .hlist.inline dl, .hlist.inline ol, .hlist.inline ul, */ .hlist dl dl, .hlist dl ol, .hlist dl ul, .hlist ol dl, .hlist ol ol, .hlist ol ul, .hlist ul dl, .hlist ul ol, .hlist ul ul { display: inline; } /* Hide empty list items */ .hlist .mw-empty-li, .hlist .mw-empty-elt { display: none; } /* Generate interpuncts */ .hlist dt:after { content: ": "; } .hlist dd:after, .hlist li:after { content: " · "; font-weight: bold; } .hlist dd:last-child:after, .hlist dt:last-child:after, .hlist li:last-child:after { content: none; } /* Add parentheses around nested lists */ .hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before, .hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before, .hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before { content: " ("; font-weight: normal; } .hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after, .hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after, .hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after { content: ")"; font-weight: normal; } /* Put ordinals in front of ordered list items */ .hlist ol { counter-reset: listitem; } .hlist ol > li { counter-increment: listitem; } .hlist ol > li:before { content: " " counter(listitem) "\a0"; } .hlist dd ol > li:first-child:before, .hlist dt ol > li:first-child:before, .hlist li ol > li:first-child:before { content: " (" counter(listitem) "\a0"; } 9e75e584c328c44948ca9aae5c1cb4fa3c76a622 Template:Navbar/en 10 440 1323 2021-07-05T20:53:16Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages/> </noinclude><templatestyles src="Module:Navbar/styles.css"/><span class="noprint plainlinks navbar" style="{{{style|}}}"><small><!-- -->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else: --><span style="{{{fontstyle|}}}">{{#if:{{{text|}}}|{{{text}}}|This box:}} </span>}}<!-- -->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">&#91;</span>}}<!-- --><span style="white-space:nowrap;word-spacing:-.12em;"><!-- -->[[{{transclude|{{{1}}}}}|<span style="{{{fontstyle|}}}" title="View this template"><!-- -->{{#if:{{{mini|}}}|v|view}}</span>]]<!-- --><span style="{{{fontstyle|}}}">&#32;<b>&middot;</b>&#32;</span><!-- -->[{{fullurl:{{<noinclude><nowiki/></noinclude>TALKPAGENAME:{{transclude|{{{1}}}}}}}}} <span style="{{{fontstyle|}}}" title="Discuss this template"><!-- -->{{#if:{{{mini|}}}|d|talk}}</span>]<!-- -->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else: --><span style="{{{fontstyle|}}}">&#32;<b>&middot;</b>&#32;</span><!-- -->[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} <span style="{{{fontstyle|}}}" title="Edit this template"><!-- -->{{#if:{{{mini|}}}|e|edit}}</span>]}}<!-- --></span><!-- -->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">&#93;</span>}}<!-- --></small></span><noinclude> {{Documentation|content= {{Uses TemplateStyles|Module:Navbar/styles.css}} == Usage == === General === When one of the following examples is placed inside a given [[Special:MyLanguage/Help:Templates|template]], it adds navbar navigational functionality: : {{tlx|Navbar|Navbar|mini{{=}}1}} : {{tlx|Navbar|Navbar|plain{{=}}1}} : {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}} The <code><nowiki>{{subst:PAGENAME}}</nowiki></code> will be substituted with the template's name when parsed by the servers. For example, {{tlx|Navbar|navbar/doc}} gives: {{Navbar|navbar/doc}} === Font-size === Font-size is <code>88%</code> when used in a navbar, and <code>100%</code> when nested in a navbox. In the navbar, the weight is "<code>normal</code>"; when nested in navbox, it takes on the outer setting. The middot is bold. == Examples == === Required parameters === * {{tlx|Navbar|''template name''}} — the template name is required. === Optional parameters === {{(}}{{!}} class="wikitable" ! Options ! Parameters ! Produces... {{!}}- {{!}} Basic {{!}} {{tlx|Navbar|2=''template name''}} {{!}} {{navbar|navbar/doc}} {{!}}- {{!}} Different text {{!}} {{tlx|Navbar|2=''template name''|3=text{{=}}This template:}} {{!}} {{navbar|navbar/doc|text=This template:}} {{!}}- {{!}} Without "This box:" text {{!}} {{tlx|Navbar|2=''template name''|3=plain{{=}}1}} {{!}} {{navbar|navbar/doc|plain=1}} {{!}}- {{!}} Short version {{!}} {{tlx|Navbar|2=''template name''|3=mini{{=}}1}} {{!}} {{navbar|navbar/doc|mini=1}} {{!}}- {{!}} With a color option {{!}} {{tlx|Navbar|2=''template name''|3=fontstyle{{=}}color:green}} {{!}} {{navbar|navbar/doc|fontstyle=color:green}} {{!}}- {{!}} With brackets {{!}} {{tlx|Navbar|2=''template name''|3=brackets{{=}}1}} {{!}} {{navbar|navbar/doc|brackets=1}} {{!}}- {{!}} Custom namespace {{!}} {{tlx|Navbar|2=''namespaced template name''|3=plain{{=}}1|4=brackets{{=}}1}} {{!}} {{navbar|User:Example|plain=1|brackets=1}} {{!}}{{)}} == TemplateData == {{Navbar/doc}} == Notes == Navbar is contained within a {{tag|div}} in order to accommodate a horizontal unnumbered list. This means it cannot be placed inside a {{tag|span}} or other inline element, because Tidy will 'fix' situations where it finds block elements inside inline elements. <!--- PLEASE ADD METADATA TO THE <includeonly> SECTION HERE ---> <includeonly> [[Category:Formatting templates{{#translation:}}]] </includeonly> }} </noinclude> 3f53ea49b7933ec59655f626eef09d907f4d3f53 Module:Navbar/styles.css 828 93 1325 2021-07-06T14:11:18Z mw>ExE Boss 0 /* top */ Add {{[[Template:Shared Template Warning|Shared Template Warning]]}} sanitized-css text/css /** {{Shared Template Warning}} * This TemplateStyles page is separately used for [[Template:Navbar]] * because of course there are two versions of the same template. * Be careful when adjusting styles accordingly. */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .navbar li { word-spacing: -0.125em; } /* Navbar styling when nested in navbox */ .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; width: 6em; } daa254bc716c42f79e6be78a9d0a82bdbe57f9f2 Module:Template translation 828 10 19 2021-07-07T14:24:01Z mw>Shirayuki 0 add exceptions for [[Help:Subpages/subpage]] and friends Scribunto text/plain local this = {} function this.checkLanguage(subpage, default) --[[Check first if there's an any invalid character that would cause the mw.language.isKnownLanguageTag function() to throw an exception: - all ASCII controls in [\000-\031\127], - double quote ("), sharp sign (#), ampersand (&), apostrophe ('), - slash (/), colon (:), semicolon (;), lower than (<), greater than (>), - brackets and braces ([, ], {, }), pipe (|), backslash (\\) All other characters are accepted, including space and all non-ASCII characters (including \192, which is invalid in UTF-8). --]] if mw.language.isValidCode(subpage) and mw.language.isKnownLanguageTag(subpage) --[[However "SupportedLanguages" are too restrictive, as they discard many valid BCP47 script variants (only because MediaWiki still does not define automatic transliterators for them, e.g. "en-dsrt" or "fr-brai" for French transliteration in Braille), and country variants, (useful in localized data, even if they are no longer used for translations, such as zh-cn, also useful for legacy codes). We want to avoid matching subpagenames containing any uppercase letter, (even if they are considered valid in BCP 47, in which they are case-insensitive; they are not "SupportedLanguages" for MediaWiki, so they are not "KnownLanguageTags" for MediaWiki). To be more restrictive, we exclude any character * that is not ASCII and not a lowercase letter, minus-hyphen, or digit, or does not start by a letter or does not finish by a letter or digit; * or that has more than 8 characters between hyphens; * or that has two hyphens; * or with specific uses in template subpages and unusable as languages. --]] or string.find(subpage, "^[%l][%-%d%l]*[%d%l]$") ~= nil and string.find(subpage, "[%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l]") == nil and string.find(subpage, "%-%-") == nil and subpage ~= "doc" and subpage ~= "layout" and subpage ~= "sandbox" and subpage ~= "testcases" and subpage ~= "init" and subpage ~= "preload" and subpage ~= "subpage" and subpage ~= "subpage2" and subpage ~= "sub-subpage" and subpage ~= "sub-sub-subpage" and subpage ~= "sub-sub-sub-subpage" then return subpage end -- Otherwise there's currently no known language subpage return default end --[[Get the last subpage of an arbitrary page if it is a translation. To be used from templates. ]] function this.getLanguageSubpage(frame) local title = frame and frame.args[1] if not title or title == '' then title = mw.title.getCurrentTitle() end return this._getLanguageSubpage(title) end --[[Get the last subpage of an arbitrary page if it is a translation. To be used from Lua. ]] function this._getLanguageSubpage(title) if type(title) == 'string' then title = mw.title.new(title) end if not title then -- invalid title return mw.language.getContentLanguage():getCode() end --[[This code does not work in all namespaces where the Translate tool works. -- It works in the main namespace on Meta because it allows subpages there -- It would not work in the main namespace of English Wikipedia (but the -- articles are monolignual on that wiki). -- On Meta-Wiki the main space uses subpages and its pages are translated. -- The Translate tool allows translatng pages in all namespaces, even if -- the namespace officially does not have subpages. -- On Meta-Wiki the Category namespace still does not have subpages enabled, -- even if they would be very useful for categorizing templates, that DO have -- subpages (for documentatio and tstboxes pages). This is a misconfiguration -- bug of Meta-Wiki. The work-around is to split the full title and then -- get the last titlepart. local subpage = title.subpageText --]] local titleparts = mw.text.split(title.fullText, '/') local subpage = titleparts[#titleparts] return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) end --[[Get the last subpage of the current page if it is a translation. ]] function this.getCurrentLanguageSubpage() return this._getLanguageSubpage(mw.title.getCurrentTitle()) end --[[Get the first part of the language code of the subpage, before the '-'. ]] function this.getMainLanguageSubpage() parts = mw.text.split( this.getCurrentLanguageSubpage(), '-' ) return parts[1] end --[[Get the last subpage of the current frame if it is a translation. Not used locally. ]] function this.getFrameLanguageSubpage(frame) return this._getLanguageSubpage(frame:getParent():getTitle()) end --[[Get the language of the current page. Not used locally. ]] function this.getLanguage() local subpage = mw.title.getCurrentTitle().subpageText return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) end --[[Get the language of the current frame. Not used locally. ]] function this.getFrameLanguage(frame) local titleparts = mw.text.split(frame:getParent():getTitle(), '/') local subpage = titleparts[#titleparts] return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) end function this.title(namespace, basepagename, subpage) local message, title local pagename = basepagename if (subpage or '') ~= '' then pagename = pagename .. '/' .. subpage end local valid, title = xpcall(function() return mw.title.new(pagename, namespace) -- costly end, function(msg) -- catch undocumented exception (!?) -- thrown when namespace does not exist. The doc still -- says it should return a title, even in that case... message = msg end) if valid and title ~= nil and (title.id or 0) ~= 0 then return title end return { -- "pseudo" mw.title object with id = nil in case of error prefixedText = pagename, -- the only property we need below message = message -- only for debugging } end --[[If on a translation subpage (like Foobar/de), this function returns a given template in the same language, if the translation is available. Otherwise, the template is returned in its default language, without modification. This is aimed at replacing the current implementation of Template:TNTN. This version does not expand the returned template name: this solves the problem of self-recursion in TNT when translatable templates need themselves to transclude other translable templates (such as Tnavbar). ]] function this.getTranslatedTemplate(frame, withStatus) local args = frame.args local pagename = args['template'] --[[Check whether the pagename is actually in the Template namespace, or if we're transcluding a main-namespace page. (added for backward compatibility of Template:TNT) ]] local title local namespace = args['tntns'] or '' if (namespace ~= '') -- Checks for tntns parameter for custom ns. then title = this.title(namespace, pagename) -- Costly else -- Supposes that set page is in ns10. namespace = 'Template' title = this.title(namespace, pagename) -- Costly if title.id == nil then -- not found in the Template namespace, assume the main namespace (for backward compatibility) namespace = '' title = this.title(namespace, pagename) -- Costly end end -- Get the last subpage and check if it matches a known language code. local subpage = args['uselang'] or '' if (subpage == '') then subpage = this.getCurrentLanguageSubpage() end if (subpage == '') then -- Check if a translation of the pagename exists in English local newtitle = this.title(namespace, pagename, 'en') -- Costly -- Use the translation when it exists if newtitle.id ~= nil then title = newtitle end else -- Check if a translation of the pagename exists in that language local newtitle = this.title(namespace, pagename, subpage) -- Costly if newtitle.id == nil then -- Check if a translation of the pagename exists in English newtitle = this.title(namespace, pagename, 'en') -- Costly end -- Use the translation when it exists if newtitle.id ~= nil then title = newtitle end end -- At this point the title should exist if withStatus then -- status returned to Lua function below return title.prefixedText, title.id ~= nil else -- returned directly to MediaWiki return title.prefixedText end end --[[If on a translation subpage (like Foobar/de), this function renders a given template in the same language, if the translation is available. Otherwise, the template is rendered in its default language, without modification. This is aimed at replacing the current implementation of Template:TNT. Note that translatable templates cannot transclude themselves other translatable templates, as it will recurse on TNT. Use TNTN instead to return only the effective template name to expand externally, with template parameters also provided externally. ]] function this.renderTranslatedTemplate(frame) local title, found = this.getTranslatedTemplate(frame, true) -- At this point the title should exist prior to performing the expansion -- of the template, otherwise render a red link to the missing page -- (resolved in its assumed namespace). If we don't tet this here, a -- script error would be thrown. Returning a red link is consistant with -- MediaWiki behavior when attempting to transclude inexistant templates. if not found then return '[[' .. title .. ']]' end -- Copy args pseudo-table to a proper table so we can feed it to expandTemplate. -- Then render the pagename. local args = frame.args local pargs = (frame:getParent() or {}).args local arguments = {} if (args['noshift'] or '') == '' then for k, v in pairs(pargs) do -- numbered args >= 1 need to be shifted local n = tonumber(k) or 0 if (n > 0) then if (n >= 2) then arguments[n - 1] = v end else arguments[k] = v end end else -- special case where TNT is used as autotranslate -- (don't shift again what is shifted in the invokation) for k, v in pairs(pargs) do arguments[k] = v end end arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded arguments['tntns'] = nil -- discard the specified namespace override arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame return frame:expandTemplate{title = ':' .. title, args = arguments} end --[[A helper for mocking TNT in Special:TemplateSandbox. TNT breaks TemplateSandbox; mocking it with this method means templates won't be localized but at least TemplateSandbox substitutions will work properly. Won't work with complex uses. ]] function this.mockTNT(frame) local pargs = (frame:getParent() or {}).args local arguments = {} for k, v in pairs(pargs) do -- numbered args >= 1 need to be shifted local n = tonumber(k) or 0 if (n > 0) then if (n >= 2) then arguments[n - 1] = v end else arguments[k] = v end end if not pargs[1] then return '' end return frame:expandTemplate{title = 'Template:' .. pargs[1], args = arguments} end return this d8b891aad5c405bb237bd0a79d564ccb6b8e946b Template:Str right 10 414 1263 2021-07-07T17:21:27Z mw>ExE Boss 0 Copied from [[c:Template:Str right]] wikitext text/x-wiki <includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0 |{{{1}}} |{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | | {{{{{|safesubst:}}}#invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }} }}</includeonly><noinclude> {{Documentation}} </noinclude> 1a455b5358c1f1bac690d40d8310e098b907075a Template:Para 10 108 1327 2021-07-07T23:17:46Z mw>ExE Boss 0 Use [[mw:Special:MyLanguage/Help:TemplateStyles|TemplateStyles]] ([[Template:Mono/styles.css]] and [[Template:Nowrap/styles.css]]) wikitext text/x-wiki <onlyinclude><!-- -->{{{{{|safesubst:}}}#if:{{{plain|}}}|<templatestyles src="Template:Mono/styles.css"/>}}<!-- -->{{{{{|safesubst:}}}#if:{{yesno|{{{nowrap|1}}}}}|<templatestyles src="Template:Nowrap/styles.css"/>}}<!-- --><{{{{{|safesubst:}}}#if:{{{plain|}}}<!-- -->|span class="monospaced {{{{{|safesubst:}}}#if:{{{{{|safesubst:}}}yesno|{{{nowrap|1}}}}}|nowrap}}"<!-- -->|code {{{{{|safesubst:}}}#if:{{{{{|safesubst:}}}yesno|{{{nowrap|1}}}}}|class="nowrap"}}<!-- -->}}>&#124;<!-- -->{{{{{|safesubst:}}}#if:{{{1|<noinclude>1</noinclude>}}}<!-- -->|{{{1}}}&#61;<!-- -->}}{{{2|}}}<!-- --></{{{{{|safesubst:}}}#if:{{{plain|}}}|span|code}}><!-- --></onlyinclude> {{Documentation}} <!--Categories and interwikis go near the bottom of the /doc subpage.--> d8b23afbb00b5d5ac00ed7cf1135edfb6c75fe39 Template:Plainlist/styles.css 10 39 77 2021-07-11T13:19:09Z mw>ExE Boss 0 Add leading comment sanitized-css text/css /** * Unbulleted lists */ .plainlist ul { line-height: inherit; list-style: none none; margin: 0; } .plainlist ul li { margin-bottom: 0; } 7243fd4329145928d2b4b02fc42513ab65934318 Template:\sandbox 10 449 1347 2021-07-12T08:07:22Z mw>ExE Boss 0 Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]> wikitext text/x-wiki <onlyinclude>{{#ifeq:{{SUBPAGENAME}}|sandbox|/sandbox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> b84c7b18d05a12c4da67f5f1a5e12c4371eea588 Module:Hatnote/styles.css 828 88 192 2021-07-12T19:22:27Z wikipedia>Izno 0 per my talk page sanitized-css text/css /* {{pp|small=y}} */ .hatnote { font-style: italic; } /* Limit structure CSS to divs because of [[Module:Hatnote inline]] */ div.hatnote { /* @noflip */ padding-left: 1.6em; margin-bottom: 0.5em; } .hatnote i { font-style: normal; } /* The templatestyles element inserts a link element before hatnotes. * TODO: Remove link if/when WMF resolves T200206 */ .hatnote + link + .hatnote { margin-top: -0.5em; } 44680ffd6e888866df2cdfa0341af9c7b97da94c Module:Message box/cmbox.css 828 444 1337 2021-07-15T19:08:22Z mw>ExE Boss 0 [[mw:MediaWiki talk:Gadget-site.css#Last to TemplateStyles: mbox and MediaWiki:Gadget-enwp-boxes.css|MediaWiki talk:Gadget-site.css § Last to TemplateStyles: mbox and MediaWiki:Gadget-enwp-boxes.css]] sanitized-css text/css /** * {{cmbox}} (category message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.cmbox { margin: 3px 10%; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" blue */ background-color: #dfe8ff; box-sizing: border-box; } /* An empty narrow cell */ .cmbox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .cmbox th.mbox-text, .cmbox td.mbox-text { border: none; /* 0.9em left/right */ padding: 0.25em 0.9em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .cmbox td.mbox-image { /* 0.9em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.9em; } /* The right image cell */ .cmbox td.mbox-imageright { /* 0px left, 0.9em right */ /* @noflip */ padding: 2px 0.9em 2px 0; } table.cmbox-notice { /* Blue */ background-color: #d8e8ff; } table.cmbox-speedy { margin-top: 4px; margin-bottom: 4px; /* Red */ border: 4px solid #b32424; } table.cmbox-delete, table.cmbox-speedy { /* Pink */ background-color: #ffdbdb; } table.cmbox-content { /* Orange */ background-color: #ffe7ce; } table.cmbox-style { /* Yellow */ background-color: #fff9db; } table.cmbox-move { /* Purple */ background-color: #e4d8ff; } table.cmbox-protection { /* Gray-gold */ background-color: #efefe1; } 4a01a155911e7f7e0e61ad9eecbe3d762883b93b Module:Message box/ombox.css 828 33 65 2021-07-15T19:28:43Z mw>ExE Boss 0 Fix {{[[Template:Ombox|Ombox]]|small=1}} styles comment sanitized-css text/css /** * {{ombox}} (other pages message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.ombox { margin: 4px 10%; border-collapse: collapse; /* Default "notice" gray */ border: 1px solid #a2a9b1; background-color: #f8f9fa; box-sizing: border-box; } /* An empty narrow cell */ .ombox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .ombox th.mbox-text, .ombox td.mbox-text { border: none; /* 0.9em left/right */ padding: 0.25em 0.9em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .ombox td.mbox-image { border: none; text-align: center; /* 0.9em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.9em; } /* The right image cell */ .ombox td.mbox-imageright { border: none; text-align: center; /* 0px left, 0.9em right */ /* @noflip */ padding: 2px 0.9em 2px 0; } table.ombox-notice { /* Gray */ border-color: #a2a9b1; } table.ombox-speedy { /* Pink */ background-color: #fee7e6; } table.ombox-speedy, table.ombox-delete { /* Red */ border-color: #b32424; border-width: 2px; } table.ombox-content { /* Orange */ border-color: #f28500; } table.ombox-style { /* Yellow */ border-color: #fc3; } table.ombox-move { /* Purple */ border-color: #9932cc; } table.ombox-protection { /* Gray-gold */ border-color: #a2a9b1; border-width: 2px; } /** * {{ombox|small=1}} styles * * These ".mbox-small" classes must be placed after all other * ".ombox" classes. "html body.mediawiki .ombox" * is so they apply only to other page message boxes. * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ /* For the "small=yes" option. */ html body.mediawiki .ombox.mbox-small { clear: right; float: right; margin: 4px 0 4px 1em; box-sizing: border-box; width: 238px; font-size: 88%; line-height: 1.25em; } e2c21da9b2e5ea3a68e2f5a7432cbfd3cfce80a8 Template:Transclude 10 439 1319 2021-07-17T12:18:06Z mw>Mainframe98 0 Reverted edits by [[Special:Contribs/184.22.196.79|184.22.196.79]] ([[User talk:184.22.196.79|talk]]) to last version by ExE Boss wikitext text/x-wiki <onlyinclude>{{#switch: {{NAMESPACE: {{{1}}} }} |#default = {{FULLPAGENAME: {{{1}}} }} <!-- leading namespace prefix, eg "Template:Foo" --> |{{ns:0}} = {{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }} | Template:{{{1}}} <!-- no leading colon, eg "Foo" --> | {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article --> }} }}</onlyinclude> {{Documentation}} 4865c652e363aa2057dba3e36aaffcdd76885a4e Template:For 10 104 224 2021-07-17T12:58:12Z wikipedia>Plastikspork 0 [[Wikipedia:Templates for discussion/Log/2021 July 8#Template:For]] closed as do not merge ([[WP:XFDC#4.0.12|XFDcloser]]) wikitext text/x-wiki <includeonly>{{#invoke:For|For}}</includeonly><noinclude> {{Documentation}} </noinclude> 3f70c0fa7cd736071e7c6e7dcd90ff3704df26bb Module:Separated entries 828 432 1305 2021-07-18T07:07:33Z mw>ExE Boss 0 Copied from [[w:Module:Separated entries]] Scribunto text/plain -- This module takes positional parameters as input and concatenates them with -- an optional separator. The final separator (the "conjunction") can be -- specified independently, enabling natural-language lists like -- "foo, bar, baz and qux". The starting parameter can also be specified. local compressSparseArray = require('Module:TableTools').compressSparseArray local p = {} function p._main(args) local separator = args.separator -- Decode (convert to Unicode) HTML escape sequences, such as "&#32;" for space. and mw.text.decode(args.separator) or '' local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator -- Discard values before the starting parameter. local start = tonumber(args.start) if start then for i = 1, start - 1 do args[i] = nil end end -- Discard named parameters. local values = compressSparseArray(args) return mw.text.listToText(values, separator, conjunction) end local function makeInvokeFunction(separator, conjunction, first) return function (frame) local args = require('Module:Arguments').getArgs(frame) args.separator = separator or args.separator args.conjunction = conjunction or args.conjunction args.first = first or args.first return p._main(args) end end p.main = makeInvokeFunction() p.br = makeInvokeFunction('<br />') p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain()) return p e80231ff3de01afd7f62a94e0a34dc1e67504085 Template:Separated entries 10 433 1307 2021-07-18T07:11:08Z mw>ExE Boss 0 Based on [[w:Template:Separated entries]] wikitext text/x-wiki <onlyinclude>{{{{{|safesubst:}}}#invoke:Separated entries|main}}</onlyinclude> {{Documentation}} f242d7f2dfe32f26a4a0618a9b30a22925a9f79a Module:List 828 30 59 2021-07-18T08:36:59Z mw>ExE Boss 0 Only use main <div> tag when necessary Scribunto text/plain -- This module outputs different kinds of lists. At the moment, bulleted, -- unbulleted, horizontal, ordered, and horizontal ordered lists are supported. local libUtil = require('libraryUtil') local checkType = libUtil.checkType local mTableTools = require('Module:TableTools') local p = {} local listTypes = { ['bulleted'] = true, ['unbulleted'] = true, ['horizontal'] = true, ['ordered'] = true, ['horizontal_ordered'] = true } function p.makeListData(listType, args) -- Constructs a data table to be passed to p.renderList. local data = {} -- Classes data.classes = {} data.templatestyles = '' if listType == 'horizontal' or listType == 'horizontal_ordered' then table.insert(data.classes, 'hlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Flatlist/styles.css' } } elseif listType == 'unbulleted' then table.insert(data.classes, 'plainlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plainlist/styles.css' } } end table.insert(data.classes, args.class) -- Main div style data.style = args.style -- Indent for horizontal lists if listType == 'horizontal' or listType == 'horizontal_ordered' then local indent = tonumber(args.indent) indent = indent and indent * 1.6 or 0 if indent > 0 then data.marginLeft = indent .. 'em' end end -- List style types for ordered lists -- This could be "1, 2, 3", "a, b, c", or a number of others. The list style -- type is either set by the "type" attribute or the "list-style-type" CSS -- property. if listType == 'ordered' or listType == 'horizontal_ordered' then data.listStyleType = args.list_style_type or args['list-style-type'] data.type = args['type'] -- Detect invalid type attributes and attempt to convert them to -- list-style-type CSS properties. if data.type and not data.listStyleType and not tostring(data.type):find('^%s*[1AaIi]%s*$') then data.listStyleType = data.type data.type = nil end end -- List tag type if listType == 'ordered' or listType == 'horizontal_ordered' then data.listTag = 'ol' else data.listTag = 'ul' end -- Start number for ordered lists data.start = args.start if listType == 'horizontal_ordered' then -- Apply fix to get start numbers working with horizontal ordered lists. local startNum = tonumber(data.start) if startNum then data.counterReset = 'listitem ' .. tostring(startNum - 1) end end -- List style -- ul_style and ol_style are included for backwards compatibility. No -- distinction is made for ordered or unordered lists. data.listStyle = args.list_style -- List items -- li_style is included for backwards compatibility. item_style was included -- to be easier to understand for non-coders. data.itemStyle = args.item_style or args.li_style data.items = {} for i, num in ipairs(mTableTools.numKeys(args)) do local item = {} item.content = args[num] item.style = args['item' .. tostring(num) .. '_style'] or args['item_style' .. tostring(num)] item.value = args['item' .. tostring(num) .. '_value'] or args['item_value' .. tostring(num)] table.insert(data.items, item) end return data end function p.renderList(data) -- Renders the list HTML. -- Return the blank string if there are no list items. if type(data.items) ~= 'table' or #data.items < 1 then return '' end -- Render the main div tag. local root = mw.html.create(( #data.classes > 0 or data.marginLeft or data.style ) and 'div' or nil) for i, class in ipairs(data.classes or {}) do root:addClass(class) end root:css{['margin-left'] = data.marginLeft} if data.style then root:cssText(data.style) end -- Render the list tag. local list = root:tag(data.listTag or 'ul') list :attr{start = data.start, type = data.type} :css{ ['counter-reset'] = data.counterReset, ['list-style-type'] = data.listStyleType } if data.listStyle then list:cssText(data.listStyle) end -- Render the list items for i, t in ipairs(data.items or {}) do local item = list:tag('li') if data.itemStyle then item:cssText(data.itemStyle) end if t.style then item:cssText(t.style) end item :attr{value = t.value} :wikitext(t.content) end return data.templatestyles .. tostring(root) end function p.makeList(listType, args) if not listType or not listTypes[listType] then error(string.format( "bad argument #1 to 'makeList' ('%s' is not a valid list type)", tostring(listType) ), 2) end checkType('makeList', 2, args, 'table') local data = p.makeListData(listType, args) return p.renderList(data) end for listType in pairs(listTypes) do p[listType] = function (frame) local mArguments = require('Module:Arguments') local origArgs = mArguments.getArgs(frame) -- Copy all the arguments to a new table, for faster indexing. local args = {} for k, v in pairs(origArgs) do args[k] = v end return p.makeList(listType, args) end end return p d701c0798e541793aa5ed1e9af50fc3b20548907 Template:Thin space 10 235 694 2021-07-22T18:00:13Z wikipedia>MusikBot II 0 Protected "[[Template:Thin space]]": [[Wikipedia:High-risk templates|High-risk template or module]] ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) wikitext text/x-wiki <span style="white-space: nowrap;">{{#if:{{{1|}}}|{{#if:{{{2|}}}||&thinsp;}}}}{{{1|}}}&thinsp;<!-- -->{{#if:{{{2|}}}|{{{2}}}}}{{#if:{{{3|}}}|&thinsp;{{{3}}}}}<!-- -->{{#if:{{{4|}}}|&thinsp;{{{4}}}}}{{#if:{{{5|}}}|&thinsp;{{{5}}}}}<!-- -->{{#if:{{{6|}}}|&thinsp;{{{6}}}}}{{#if:{{{7|}}}|&thinsp;{{{7}}}}}<!-- -->{{#if:{{{8|}}}|&thinsp;{{{8}}}}}{{#if:{{{9|}}}|&thinsp;{{{9}}}}}<!-- -->{{#if:{{{10|}}}|&thinsp;{{{10}}}}}</span><noinclude> {{Documentation}} <!-- Please add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 5f135f79d223a744b75485254555580623480420 Template:Mono/styles.css 10 36 71 2021-07-25T14:33:38Z mw>ExE Boss 0 Linkify “[[Template:Mono]]” sanitized-css text/css /* Styling for [[Template:Mono]] */ .monospaced { /* Keep it like this: "monospace, monospace". Those are the rules from [[w:WP:MONO]]. */ font-family: monospace, monospace; } 170e200cb4116c2055eb21c4e733217152b5a5fa Template:Module rating/en 10 431 1303 2021-08-06T11:11:35Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages /> </noinclude><includeonly>{{Module other|{{ombox | type = notice | image = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = [[File:OOjs UI icon text-style.svg|40x40px|link=]] | alpha | a = [[File:OOjs UI icon bold-a.svg|40x40px|link=]] | beta | b = [[File:OOjs UI icon bold-b.svg|40x40px|link=]] | release | r | general | g = [[File:OOjs UI icon check-constructive.svg|40x40px|link=]] | protected | protect | p = [[File:{{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|Cascade-protection-shackle.svg|{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop|Full-protection-shackle-red.svg|Semi-protection-shackle-no-text.svg}}}}|40x40px|link=]] | semiprotected | semiprotect | semi = [[File:Semi-protection-shackle.svg|40x40px|link=]] | #default = [[File:OOjs UI icon alert-destructive.svg|40x40px|link=]] }} | style = | textstyle = | text = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = This module is rated as [[Special:MyLanguage/Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }} }} | alpha | a = This module is rated as [[Special:MyLanguage/Category:Modules in alpha|alpha]]. It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }} }} | beta | b = This module is rated as [[Special:MyLanguage/Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }} }} | release | r | general | g = This module is rated as [[Special:MyLanguage/Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[w:WP:TESTCASES|sandbox testing]] rather than repeated trial-and-error editing.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }} }} | protected | protect | p = This module is [[Special:MyLanguage/Category:Modules subject to page protection|subject to {{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|cascading|page}} protection]]. It is a highly visible module in use by a very large number of pages. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Special:MyLanguage/Project:Protected page|protected]] from editing.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | #default = {{error|1=Module rating is invalid or not specified.}} }} }}|{{error|1=Error: {{tl|Module rating}} must be placed in the Module namespace.}}|demospace={{{demospace|<noinclude>module</noinclude>}}}}}</includeonly><noinclude> {{documentation|content= This template is used to rate [[Lua/Overview|Lua modules]] by quality. It is placed at the top of the module's /doc subpage. It produces a message informing users about the rating system, and it also places the module into a tracking category. == Usage == Basic usage: {{pre|{{tlx|module rating|''rating''}}}} Without categories: {{pre|{{tlx|module rating|''rating''|3=nocat=true}}}} If {{tlx|Module rating}} is used outside the Module namespace, an error message is shown: {{module rating}} == Ratings == The rating should be placed in the first positional parameter. There are five different ratings: '''pre-alpha'''{{int|comma-separator}}'''alpha'''{{int|comma-separator}}'''beta'''{{int|comma-separator}}'''release'''{{int|and}}{{int|word-separator}}'''protected'''. There are also short alias codes for each of the ratings. {{(!}} class="wikitable" ! Rating ! Aliases ! Result {{!}}- {{!}} <code>pre-alpha</code> {{!}} <code>prealpha</code><br/><code>pa</code> {{!}} {{module rating|pre-alpha|nocat=true|demospace=Module}} {{!}}- {{!}} <code>alpha</code> {{!}} <code>a</code> {{!}} {{module rating|alpha|nocat=true|demospace=module}} {{!}}- {{!}} <code>beta</code> {{!}} <code>b</code> {{!}} {{module rating|beta|nocat=true|demospace=module}} {{!}}- {{!}} <code>release</code> {{!}} <code>r</code><br/><code>general</code><br/><code>g</code> {{!}} {{module rating|release|nocat=true|demospace=module}} {{!}}- {{!}} <code>protected</code> {{!}} <code>protect</code><br/><code>p</code> {{!}} {{module rating|protected|nocat=true|demospace=module}} {{!}}- {{!}} ''Anything else or if missing'' {{!}} {{!}} {{module rating|prdaskidkated|nocat=true|demospace=module}} {{!}}- {{!)}} == TemplateData == {{Module rating/doc}} == Categories == The template will put modules in one of the following categories, according to the rating specified: * {{ll|Category:Modules in pre-alpha development}} * {{ll|Category:Modules in alpha}} * {{ll|Category:Modules in beta}} * {{ll|Category:Modules for general use}} * {{ll|Category:Modules subject to page protection}} These categories are suppressed on pages ending with /doc. To suppress categories on all pages, you can use the code {{para|nocat|true}}. == See also == * {{tl|module-rating categories}} * [[Lua]] * {{tl|Lua}} }} </noinclude> be9721892adcac867736e318ab01f848049afb88 Template:Tmpl 10 415 1265 2021-08-08T13:43:06Z mw>ExE Boss 0 /* template-documentation */ Use {{[[mw:Special:MyLanguage/Help:Substitution|subst]]:[[Template:InitDoc|InitDoc]]}} wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> c29b0448e5b4220ef09fba833ddabdebb7b41ceb Template:Used in system 10 429 1297 2021-08-21T04:47:31Z mw>Shirayuki 0 use [[Template:tmpl]] wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#switch:<translate></translate> | = {{ombox | type = content | text = '''<translate><!--T:1--> This <tvar|1>{{lcfirst:{{NAMESPACE}}}}</> is used {{<tvar|2>#if:{{{1|}}}|{{{1}}}</>|in system messages}}.</translate>'''<br/> <translate><!--T:2--> Changes to it can cause immediate changes to the MediaWiki user interface.</translate> <!-- -->{{tmpl|0=<translate><!--T:3--> To avoid large-scale disruption, any changes should first be tested in this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>'s [[<tvar|2>$1/sandbox</>|/sandbox]] or [[<tvar|3>$1/testcases</>|/testcases]] subpage, or in your own [[<tvar|4>Special:MyLanguage/Help:Subpages</>|user space]].</translate> |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}} | #default = {{SUBJECTPAGENAME}} }}<!--#switch--> }}<!--tmpl--><!-- --><translate><!--T:4--> The tested changes can then be added in one single edit to this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>.</translate> <!-- -->{{tmpl|0=<translate><!--T:5--> Please discuss any changes {{<tvar|1>#if:{{{2|}}}</>|at <tvar|2>[[{{{2}}}]]</>|on the [[<tvar|3>$1</>|talk page]]}} before implementing them.</translate> |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}} | #default = {{TALKPAGENAME}} }}<!--#switch--> }}<!--tmpl--> }} | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{documentation}} </noinclude> 9473a2f94595eec596f5d10d2e45e7711cff83cb Template:Used in system/en 10 430 1299 2021-08-21T04:49:09Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#switch: | = {{ombox | type = content | text = '''This {{lcfirst:{{NAMESPACE}}}} is used {{#if:{{{1|}}}|{{{1}}}|in system messages}}.'''<br/> Changes to it can cause immediate changes to the MediaWiki user interface. <!-- -->{{tmpl|0=To avoid large-scale disruption, any changes should first be tested in this {{lcfirst:{{NAMESPACE}}}}'s [[$1/sandbox|/sandbox]] or [[$1/testcases|/testcases]] subpage, or in your own [[Special:MyLanguage/Help:Subpages|user space]]. |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}} | #default = {{SUBJECTPAGENAME}} }}<!--#switch--> }}<!--tmpl--><!-- -->The tested changes can then be added in one single edit to this {{lcfirst:{{NAMESPACE}}}}. <!-- -->{{tmpl|0=Please discuss any changes {{#if:{{{2|}}}|at [[{{{2}}}]]|on the [[$1|talk page]]}} before implementing them. |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}} | #default = {{TALKPAGENAME}} }}<!--#switch--> }}<!--tmpl--> }} | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{documentation}} </noinclude> 10ae6df0c95ce682437a36e6cb3c517e21d200d0 Template:Template parameter usage 10 118 268 2021-08-21T18:02:56Z wikipedia>SUM1 0 Added missing "lc" parameters; added optional "based" parameter to add text "based on this[/its] TemplateData" at end of template wikitext text/x-wiki {{#switch:{{{label|}}} |=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|C|c}}lick here] to see a monthly parameter usage report for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}. |None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}} |for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}. |#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}} }}<noinclude> {{documentation}} </noinclude> b9cdd1b2e409313904f041c38562a3d6221cc017 Template:Documentation subpage/en 10 19 37 2021-08-22T09:04:11Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages/> </noinclude>{{#switch: | = <includeonly><!-- -->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]] | text = '''This is a [[w:Wikipedia:Template documentation|documentation]] [[Special:MyLanguage/Help:Subpages|subpage]] for {{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}.'''<br /><!-- -->{{#if:{{{text2|}}}{{{text1|}}} |It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{{text2|{{{text1}}}}}}. |It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{SUBJECTSPACE}} page. }} }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- -->{{#if:{{{inhibit|}}} |<!--(don't categorize)--> | <includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} | Template | Project = Template | Module = Module | User = User | #default = MediaWiki }} documentation pages{{#translation:}}]] | [[Category:Documentation subpages without corresponding pages{{#translation:}}]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{Documentation|content= == Usage == Use this template on Template Documentation subpage (/doc). == See also == *{{tl|Documentation}} *{{tl|tl}} }} </noinclude> 7ed5cbfd5118b37933b2c38487c1ab00f969bf46 Template:Int 10 407 1247 2021-08-25T22:06:06Z mw>ExE Boss 0 Add parameter `missing` wikitext text/x-wiki <onlyinclude>{{#invoke:Int|renderIntMessage|{{{1}}}|missing={{{missing|}}}|lang={{{lang|}}}}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 33458d205943740a9f820054cc2950d639a84aa6 Template:TemplateData header 10 21 266 2021-08-29T21:32:29Z wikipedia>SUM1 0 Added "based" parameter to other transclusion wikitext text/x-wiki <div class="templatedata-header">{{#if:{{{noheader|}}}|<!-- noheader: -->{{Template parameter usage|based=y}}|<!-- +header: -->This is the {{#if:{{{nolink|}}}|<!-- +header, nolink TD -->TemplateData|<!-- +header, +link [[TD]]; DEFAULT: -->[[Wikipedia:TemplateData|TemplateData]]}}<!-- e.o. #if:nolink; DEFAULT: --> for this template used by [[mw:Extension:TemplateWizard|TemplateWizard]], [[Wikipedia:VisualEditor|VisualEditor]] and other tools. {{Template parameter usage|based=y}}<!-- e.o. #if:noheader -->}} '''TemplateData for {{{1|{{BASEPAGENAME}}}}}''' </div><includeonly><!-- check parameters -->{{#invoke:Check for unknown parameters|check |unknown={{template other|1=[[Category:Pages using TemplateData header with unknown parameters|_VALUE_]]}} |template=Template:TemplateData header |1 |nolink |noheader |preview=<div class="error" style="font-weight:normal">Unknown parameter '_VALUE_' in [[Template:TemplateData header]].</div> }}<!-- -->{{template other|{{sandbox other|| [[Category:Templates using TemplateData]] }}}}</includeonly><!-- --><noinclude>{{Documentation}}</noinclude> ddfbb4ae793846b96d4c06330417fa6ed4da2adc Template:Ambox 10 437 1315 2021-09-01T23:24:23Z mw>ExE Boss 0 Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]> and add comment about categories wikitext text/x-wiki <onlyinclude>{{#invoke:Message box|ambox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> c1c08bfba73362a15b45ed57cd7458ff9fbc5413 Template:Cmbox 10 438 1317 2021-09-01T23:24:27Z mw>ExE Boss 0 Use <[[mw:Special:MyLanguage/Help:Transclusion#<onlyinclude>|onlyinclude]]> wikitext text/x-wiki <onlyinclude>{{#invoke:Message box|cmbox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 04e229bdcc4ed5f8322f6a29df0d25d01316f5bf Module:Redirect 828 69 144 2021-09-10T07:46:37Z wikipedia>Johnuniq 0 restore p.getTargetFromText which is used by [[Module:RfD]] which is causing "Lua error in Module:RfD at line 87: attempt to call upvalue 'getTargetFromText' (a nil value)" Scribunto text/plain -- This module provides functions for getting the target of a redirect page. local p = {} -- Gets a mw.title object, using pcall to avoid generating script errors if we -- are over the expensive function count limit (among other possible causes). local function getTitle(...) local success, titleObj = pcall(mw.title.new, ...) if success then return titleObj else return nil end end -- Gets the name of a page that a redirect leads to, or nil if it isn't a -- redirect. function p.getTargetFromText(text) local target = string.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]" ) or string.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]" ) return target and mw.uri.decode(target, 'PATH') end -- Gets the target of a redirect. If the page specified is not a redirect, -- returns nil. function p.getTarget(page, fulltext) -- Get the title object. Both page names and title objects are allowed -- as input. local titleObj if type(page) == 'string' or type(page) == 'number' then titleObj = getTitle(page) elseif type(page) == 'table' and type(page.getContent) == 'function' then titleObj = page else error(string.format( "bad argument #1 to 'getTarget'" .. " (string, number, or title object expected, got %s)", type(page) ), 2) end if not titleObj then return nil end local targetTitle = titleObj.redirectTarget if targetTitle then if fulltext then return targetTitle.fullText else return targetTitle.prefixedText end else return nil end end --[[ -- Given a single page name determines what page it redirects to and returns the -- target page name, or the passed page name when not a redirect. The passed -- page name can be given as plain text or as a page link. -- -- Returns page name as plain text, or when the bracket parameter is given, as a -- page link. Returns an error message when page does not exist or the redirect -- target cannot be determined for some reason. --]] function p.luaMain(rname, bracket, fulltext) if type(rname) ~= "string" or not rname:find("%S") then return nil end bracket = bracket and "[[%s]]" or "%s" rname = rname:match("%[%[(.+)%]%]") or rname local target = p.getTarget(rname, fulltext) local ret = target or rname ret = getTitle(ret) if ret then if fulltext then ret = ret.fullText else ret = ret.prefixedText end return bracket:format(ret) else return nil end end -- Provides access to the luaMain function from wikitext. function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) return p.luaMain(args[1], args.bracket, args.fulltext) or '' end -- Returns true if the specified page is a redirect, and false otherwise. function p.luaIsRedirect(page) local titleObj = getTitle(page) if not titleObj then return false end if titleObj.isRedirect then return true else return false end end -- Provides access to the luaIsRedirect function from wikitext, returning 'yes' -- if the specified page is a redirect, and the blank string otherwise. function p.isRedirect(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) if p.luaIsRedirect(args[1]) then return 'yes' else return '' end end return p a224c45940343d66f49a78b0a39b2045e2c45d20 Template:TOC right 10 251 726 2021-09-17T13:06:17Z wikipedia>Izno 0 don't emit style unless width exists wikitext text/x-wiki <templatestyles src="Template:TOC_right/styles.css" />{{#if:{{{limit|}}}|<templatestyles src="Template:TOC limit/styles.css" />}}<!-- --><div class="tocright {{#if:{{{clear|}}}|tocright-clear-{{{clear|}}}}} {{#if:{{{limit|}}}|toclimit-{{{limit}}}}}" {{#if:{{{width|{{{1|}}}}}}|style="width: {{{width|{{{1}}}}}};"}}>__TOC__</div><noinclude> {{documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 67c60b46e441afa40d8c4c1227aa6580a0cda2e9 Template:TOC right/styles.css 10 252 728 2021-09-17T13:56:38Z wikipedia>Izno 0 do the same thing I apparently did to tocleft much earlier sanitized-css text/css /* {{pp-template}} */ /* The TOC is hidden on Minerva (mobile skin) for width < 720px so must also hide this wrapper */ @media all and (max-width: 720px) { body.skin-minerva .tocright { display: none; } .tocright { width: 100% !important; /* fix the inline width while at small resolution */ } } @media all and (min-width: 720px) { .tocright { float: right; clear: right; width: auto; margin: 0 0 0.5em 1em; } .tocright-clear-left { clear: left; } .tocright-clear-both { clear: both; } .tocright-clear-none { clear: none; } } 60435a52ddabf7eb321fa80dbf78c0d63d13f95b Template:PAGENAMETDOC 10 132 296 2021-09-19T22:49:59Z wikipedia>JJMC89 bot III 0 Moving [[:Category:Wikipedia variable-like templates]] to [[:Category:Wikipedia magic word templates]] per [[Wikipedia:Categories for discussion/Log/2021 September 11#Category:Wikipedia variable-like templates]] wikitext text/x-wiki {{#ifeq:{{#invoke:String|find|{{FULLPAGENAME}}|/sandbox%d*$|plain=false}}|0|{{{{#if:{{{1|}}}||FULL}}BASEPAGENAME}}|{{{{#if:{{{1|}}}||FULL}}PAGENAME}}}}<noinclude> {{Documentation|content= This template returns the current {{Tlx|FULLBASEPAGENAME}}, unless the title ends in <code>/sandbox</code> plus any number of digits, in which case it returns the {{tlx|FULLPAGENAME}}. It is primarily meant for demonstrating the sandbox version of templates in their documentation. This template takes one numbered parameter (<code>1</code>); if anything is in this parameter then it will return <code>&#123;&#123;BASEPAGENAME&#125;&#125;</code> and <code>&#123;&#123;PAGENAME&#125;&#125;</code>, which have no namespace prefix. }} [[Category:Wikipedia magic word templates]] </noinclude> ae0c3ac1a7415671c46f970d5faad2fd708640b0 Module:Sidebar/styles.css 828 101 218 2021-09-20T01:15:45Z wikipedia>Goszei 0 self-rv, it's a little tight sanitized-css text/css /* {{pp-template}} */ /* TODO: Invert width design to be "mobile first" */ .sidebar { /* TODO: Ask if we should have max-width 22em instead */ width: 22em; /* @noflip */ float: right; /* @noflip */ clear: right; /* @noflip */ margin: 0.5em 0 1em 1em; background: #f8f9fa; border: 1px solid #aaa; padding: 0.2em; text-align: center; line-height: 1.4em; font-size: 88%; border-collapse: collapse; /* Timeless has display: none on .nomobile at mobile resolutions, so we * unhide it with display: table and let precedence and proximity win. */ display: table; } /* Unfortunately, so does Minerva desktop, except Minerva drops an * !important on the declaration. So we have to be mean for Minerva users. * Mobile removes the element entirely with `wgMFRemovableClasses` in * https://github.com/wikimedia/operations-mediawiki-config/blob/master/ wmf-config/InitialiseSettings.php#L16992 * which is why displaying it categorically with display: table works. * We don't really want to expose the generic user in the wild on mobile to have * to deal with sidebars. (Maybe the ones with collapsible lists, so that * might be an improvement. That is blocked on [[:phab:T111565]].) */ body.skin-minerva .sidebar { display: table !important; /* also, minerva is way too aggressive about other stylings on tables. * TODO remove when this template gets moved to a div. plans on talk page. * We always float right on Minerva because that's a lot of extra CSS * otherwise. */ float: right !important; margin: 0.5em 0 1em 1em !important; } .sidebar-subgroup { width: 100%; margin: 0; border-spacing: 0; } .sidebar-left { /* @noflip */ float: left; /* @noflip */ clear: left; /* @noflip */ margin: 0.5em 1em 1em 0; } .sidebar-none { float: none; clear: both; /* @noflip */ margin: 0.5em 1em 1em 0; } .sidebar-outer-title { padding: 0 0.4em 0.2em; font-size: 125%; line-height: 1.2em; font-weight: bold; } .sidebar-top-image { padding: 0.4em; } .sidebar-top-caption, .sidebar-pretitle-with-top-image, .sidebar-caption { padding: 0.2em 0.4em 0; line-height: 1.2em; } .sidebar-pretitle { padding: 0.4em 0.4em 0; line-height: 1.2em; } .sidebar-title, .sidebar-title-with-pretitle { padding: 0.2em 0.8em; font-size: 145%; line-height: 1.2em; } .sidebar-title-with-pretitle { padding: 0.1em 0.4em; } .sidebar-image { padding: 0.2em 0.4em 0.4em; } .sidebar-heading { padding: 0.1em 0.4em; } .sidebar-content { padding: 0 0.5em 0.4em; } .sidebar-content-with-subgroup { padding: 0.1em 0.4em 0.2em; } .sidebar-above, .sidebar-below { padding: 0.3em 0.8em; font-weight: bold; } .sidebar-collapse .sidebar-above, .sidebar-collapse .sidebar-below { border-top: 1px solid #aaa; border-bottom: 1px solid #aaa; } .sidebar-navbar { text-align: right; font-size: 115%; padding: 0 0.4em 0.4em; } .sidebar-list-title { padding: 0 0.4em; text-align: left; font-weight: bold; line-height: 1.6em; font-size: 105%; } /* centered text with mw-collapsible headers is finicky */ .sidebar-list-title-c { padding: 0 0.4em; text-align: center; margin: 0 3.3em; } @media (max-width: 720px) { /* users have wide latitude to set arbitrary width and margin :( "Super-specific" selector to prevent overriding this appearance by lower level sidebars too */ body.mediawiki .sidebar { width: 100% !important; clear: both; float: none !important; /* Remove when we div based; Minerva is dumb */ margin-left: 0 !important; margin-right: 0 !important; } /* TODO: We might consider making all links wrap at small resolutions and then * only introduce nowrap at higher resolutions. Do when we invert the media * query. */ } 7d621b35a37807a103b59075851fe36201204ceb Module:Message box/configuration 828 14 27 2021-10-01T02:27:01Z mw>Pppery 0 Remove error category; it was the idea of one enwiki-an years ago and there's no evidence anyone on MediaWiki.org cares Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[Module:Message box]]. -- -------------------------------------------------------------------------------- return { ambox = { types = { speedy = { class = 'ambox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'ambox-delete', image = 'OOjs UI icon alert-destructive.svg' }, warning = { -- alias for content class = 'ambox-content', image = 'OOjs UI icon notice-warning.svg' }, content = { class = 'ambox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'ambox-style', image = 'Edit-clear.svg' }, move = { class = 'ambox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ambox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ambox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'}, allowSmall = true, smallParam = 'left', smallClass = 'mbox-small-left', substCheck = true, classes = {'metadata', 'plainlinks', 'ambox'}, imageEmptyCell = true, imageCheckBlank = true, imageSmallSize = '20x20px', imageCellDiv = true, useCollapsibleTextFields = true, imageRightNone = true, sectionDefault = 'article', allowMainspaceCategories = true, templateCategory = 'Article message templates', templateCategoryRequireName = true, templateErrorCategory = nil, templateErrorParamsToCheck = {'issue', 'fix', 'subst'} }, cmbox = { types = { speedy = { class = 'cmbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'cmbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'cmbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'cmbox-style', image = 'Edit-clear.svg' }, move = { class = 'cmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'cmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'cmbox-notice', image = 'OOjs UI icon information-progressive.svg' }, caution = { class = 'cmbox-style', image = 'Ambox warning yellow.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'cmbox'}, imageEmptyCell = true }, fmbox = { types = { warning = { class = 'fmbox-warning', image = 'OOjs UI icon clock-destructive.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'OOjs UI icon information-progressive.svg' }, system = { class = 'fmbox-system', image = 'OOjs UI icon information-progressive.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'plainlinks', 'fmbox'}, imageEmptyCell = false, imageRightNone = false }, imbox = { types = { speedy = { class = 'imbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'imbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'imbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'imbox-style', image = 'Edit-clear.svg' }, move = { class = 'imbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'imbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, license = { class = 'imbox-license licensetpl', image = 'Imbox license.png' -- @todo We need an SVG version of this }, featured = { class = 'imbox-featured', image = 'Cscr-featured.svg' }, notice = { class = 'imbox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'imbox'}, usePlainlinksParam = true, imageEmptyCell = true, below = true, templateCategory = 'File message boxes' }, ombox = { types = { speedy = { class = 'ombox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'ombox-delete', image = 'OOjs UI icon alert-destructive.svg' }, warning = { -- alias for content class = 'ombox-content', image = 'OOjs UI icon notice-warning.svg' }, content = { class = 'ombox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ombox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ombox-notice', image = 'OOjs UI icon information-progressive.svg' }, critical = { class = 'mbox-critical', image = 'OOjs UI icon clock-destructive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'ombox'}, allowSmall = true, imageEmptyCell = true, imageRightNone = true }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'tmbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'tmbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, imageEmptyCellStyle = true, templateCategory = 'Talk message boxes' } } d8cf419a57983f67944903d17535c0ee0780ceb6 Template:Module rating 10 196 1301 2021-10-07T03:29:11Z mw>Shirayuki 0 Reverted edits by [[Special:Contribs/Thingofme|Thingofme]] ([[User talk:Thingofme|talk]]) to last version by ExE Boss wikitext text/x-wiki <noinclude> <languages /> </noinclude><includeonly>{{Module other|{{ombox | type = notice | image = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = [[File:OOjs UI icon text-style.svg|40x40px|link=]] | alpha | a = [[File:OOjs UI icon bold-a.svg|40x40px|link=]] | beta | b = [[File:OOjs UI icon bold-b.svg|40x40px|link=]] | release | r | general | g = [[File:OOjs UI icon check-constructive.svg|40x40px|link=]] | protected | protect | p = [[File:{{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|Cascade-protection-shackle.svg|{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop|Full-protection-shackle-red.svg|Semi-protection-shackle-no-text.svg}}}}|40x40px|link=]] | semiprotected | semiprotect | semi = [[File:Semi-protection-shackle.svg|40x40px|link=]] | #default = [[File:OOjs UI icon alert-destructive.svg|40x40px|link=]] }} | style = | textstyle = | text = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = <translate><!--T:1--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in pre-alpha development</tvar>|pre-alpha]].</translate> <translate><!--T:2--> It is unfinished, and may or may not be in active development.</translate> <translate><!--T:3--> It should not be used from article namespace pages.</translate> <translate><!--T:4--> Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.</translate><!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }} }} | alpha | a = <translate><!--T:20--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in alpha</tvar>|alpha]].</translate> <translate><!--T:21--> It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched.</translate> <translate><!--T:22--> Suggestions for new features or changes in their input and output mechanisms are welcome.</translate><!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }} }} | beta | b = <translate><!--T:23--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules in beta</tvar>|beta]], and is ready for widespread use.</translate> <translate><!--T:24--> It is still new and should be used with some caution to ensure the results are as expected.</translate><!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }} }} | release | r | general | g = <translate><!--T:25--> This module is rated as [[<tvar name=1>Special:MyLanguage/Category:Modules for general use</tvar>|ready for general use]].</translate> <translate><!--T:26--> It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate.</translate> <translate><!--T:27--> It is ready to mention on help pages and other resources as an option for new users to learn.</translate> <translate><!--T:28--> To reduce server load and bad output, it should be improved by [[w:WP:TESTCASES|sandbox testing]] rather than repeated trial-and-error editing.</translate><!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }} }} | protected | protect | p = <translate><!--T:29--> This module is [[<tvar name=1>Special:MyLanguage/Category:Modules subject to page protection</tvar>|subject to {{<tvar name=2>#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}</tvar>|cascading|page}} protection]].</translate> <translate><!--T:30--> It is a highly visible module in use by a very large number of pages.</translate> <translate><!--T:31--> Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[<tvar name=1>Special:MyLanguage/Project:Protected page</tvar>|protected]] from editing.</translate><!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | #default = {{error|1=<translate><!--T:17--> Module rating is invalid or not specified.</translate>}} }} }}|{{error|1=<translate><!--T:18--> Error:</translate> <translate><!--T:19--> <tvar name=1>{{tl|Module rating}}</tvar> must be placed in the Module namespace.</translate>}}|demospace={{{demospace|<noinclude>module</noinclude>}}}}}</includeonly><noinclude> {{documentation|content= <translate><!--T:5--> This template is used to rate [[Lua/Overview|Lua modules]] by quality.</translate> <translate><!--T:6--> It is placed at the top of the module's /doc subpage.</translate> <translate><!--T:7--> It produces a message informing users about the rating system, and it also places the module into a tracking category.</translate> <translate> == Usage == <!--T:8--> <!--T:9--> Basic usage: </translate> {{pre|{{tlx|module rating|''rating''}}}} <translate><!--T:10--> Without categories:</translate> {{pre|{{tlx|module rating|''rating''|3=nocat=true}}}} <translate><!--T:32--> If <tvar name=1>{{tlx|Module rating}}</tvar> is used outside the Module namespace, an error message is shown: <tvar name=2>{{module rating}}</tvar></translate> <translate> == Ratings == <!--T:11--> </translate> <translate><!--T:33--> The rating should be placed in the first positional parameter.</translate> <translate><!--T:34--> There are five different ratings: <tvar name=1>'''pre-alpha'''{{int|comma-separator}}'''alpha'''{{int|comma-separator}}'''beta'''{{int|comma-separator}}'''release'''{{int|and}}{{int|word-separator}}'''protected'''</tvar>.</translate> <translate><!--T:35--> There are also short alias codes for each of the ratings.</translate> {{(!}} class="wikitable" ! <translate><!--T:12--> Rating</translate> ! <translate><!--T:13--> Aliases</translate> ! <translate><!--T:14--> Result</translate> {{!}}- {{!}} <code>pre-alpha</code> {{!}} <code>prealpha</code><br/><code>pa</code> {{!}} {{module rating|pre-alpha|nocat=true|demospace=Module}} {{!}}- {{!}} <code>alpha</code> {{!}} <code>a</code> {{!}} {{module rating|alpha|nocat=true|demospace=module}} {{!}}- {{!}} <code>beta</code> {{!}} <code>b</code> {{!}} {{module rating|beta|nocat=true|demospace=module}} {{!}}- {{!}} <code>release</code> {{!}} <code>r</code><br/><code>general</code><br/><code>g</code> {{!}} {{module rating|release|nocat=true|demospace=module}} {{!}}- {{!}} <code>protected</code> {{!}} <code>protect</code><br/><code>p</code> {{!}} {{module rating|protected|nocat=true|demospace=module}} {{!}}- {{!}} <translate><!--T:36--> ''Anything else or if missing''</translate> {{!}} {{!}} {{module rating|prdaskidkated|nocat=true|demospace=module}} {{!}}- {{!)}} == TemplateData == {{Module rating/doc}} <translate> == Categories == <!--T:15--> <!--T:37--> The template will put modules in one of the following categories, according to the rating specified: </translate> * {{ll|Category:Modules in pre-alpha development}} * {{ll|Category:Modules in alpha}} * {{ll|Category:Modules in beta}} * {{ll|Category:Modules for general use}} * {{ll|Category:Modules subject to page protection}} <translate><!--T:38--> These categories are suppressed on pages ending with /doc.</translate> <translate><!--T:39--> To suppress categories on all pages, you can use the code <tvar name=1>{{para|nocat|true}}</tvar>.</translate> <translate> == See also == <!--T:16--> </translate> * {{tl|module-rating categories}} * [[Lua]] * {{tl|Lua}} }} </noinclude> 4db82a1e955341afc1ffdaee6c12ba1f2929b3f5 Template:Cmbox/doc 10 450 1349 2021-10-14T14:48:43Z mw>Keymap9 0 PNG --> SVG wikitext text/x-wiki {{Mbox templates}} {{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{Lua|Module:Message box{{\sandbox}}}} {{Uses TemplateStyles|Module:Message box/ambox.css}} This is the {{tl|Cmbox}} (['''C''']ategory ['''m''']essage ['''box''']) metatemplate. It is used to build message box templates for category pages. It offers several different colours, uses default images if no image parameter is given, and it has some other features. This template works almost exactly like {{tl|Ambox}} and uses the same parameters. === Usage === Simple usage example: <pre> {{cmbox | text = Some text.}} </pre> {{cmbox{{\sandbox}} | text = Some text.}} Complex example: <pre> {{cmbox | type = style | image = [[File:Emblem-question-yellow.svg|40px]] | style = width: 400px; | textstyle = color: red; font-weight: bold; font-style: italic; | text = The message body text. }} </pre> {{cmbox{{\sandbox}} | type = style | image = [[File:Emblem-question-yellow.svg|40px]] | style = width: 400px; | textstyle = color: red; font-weight: bold; font-style: italic; | text = The message body text. }} === Category message box types === The following examples use different '''type''' parameters but use no image parameters, thus they use the default images for each type. {{cmbox{{\sandbox}} | type = speedy | text = type=<u>speedy</u> – Speedy deletion templates such as {{tl|db-c1}}. }} {{cmbox{{\sandbox}} | type = delete | text = type=<u>delete</u> – Deletion templates such as {{tl|cfd}}. }} {{cmbox{{\sandbox}} | type = content | text = type=<u>content</u> – Major warnings and problems such as {{tl|Categorization of people disputed}}. }} {{cmbox{{\sandbox}} | type = style | text = type=<u>style</u> – Minor warnings and problems such as {{tl|Underpopulated category}}. }} {{cmbox{{\sandbox}} | type = notice | text = type=<u>notice</u> – Notices and messages of any kind, both permanent and temporary. }} {{cmbox{{\sandbox}} | type = move | text = type=<u>move</u> – Move, merge, and split messages and proposals such as {{tl|Category redirect}}. }} {{cmbox{{\sandbox}} | type = protection | text = type=<u>protection</u> – Protection templates such as {{tl|pp}} when shown on a category page. }} === Other images === The default images shown above are mostly for convenience. In many cases it is more appropriate to use more specific images. These examples use the '''image''' parameter to specify an image other than the default images. {{cmbox{{\sandbox}} | type = style | image = [[File:Sub-arrows.svg|40px]] | text = type = style<br />image = <nowiki>[[File:Sub-arrows.svg|40px]]</nowiki><br />This image is used for {{tl|Very large}} and {{tl|Category diffuse}}. }} {{cmbox{{\sandbox}} | type = move | image = [[File:Redirect arrow.svg|52px]] | text = type = move<br />image = <nowiki>[[File:Redirect arrow.svg|52px]]</nowiki><br />This image is used for {{tl|Category redirect}}. }} === Special === Some other parameter combinations. {{cmbox{{\sandbox}} | text = No type and no image given ('''default''') }} {{cmbox{{\sandbox}} | image = none | text = No type and '''image=none''' – No image is used and the '''text''' uses the whole message box area. }} {{cmbox{{\sandbox}} | image = [[File:Gnome globe current event.svg|42px]] | imageright = [[File:Nuvola apps bookcase.svg|40px]] | text = image = <nowiki>[[File:Gnome globe current event.svg|42px]]</nowiki><br />imageright = <nowiki>[[File:Nuvola apps bookcase.svg|40px]]</nowiki> }} {{cmbox{{\sandbox}} | image = [[File:Gnome globe current event.svg|42px]] | imageright = [[File:Shuttle.svg|20px]] | text = '''This category lists articles about current and recent [[w:Spaceflight|spaceflights]].'''<br />It is populated by the {{tl|Current spaceflight}} template. }} === Parameters === List of all parameters: <pre> {{cmbox | type = speedy / delete / content / style / notice / move / protection | image = none / [[File:Some image.svg|40px]] | imageright = [[File:Some image.svg|40px]] | class = A custom CSS class to apply to the box | style = CSS values | textstyle = CSS values | plainlinks = no | text = The message body text. }} </pre> '''type''' :If no '''type''' parameter is given, the template defaults to type '''notice'''. That means it gets a blue background. '''image''' :'''No parameter''' = If no '''image''' parameter is given, the template uses a default image. Which default image it uses depends on the '''type''' parameter. :'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size). ::For example: <code><nowiki>image = [[File:Sub-arrows.svg|40px]]</nowiki></code> :'''none''' = Means that no image is used. '''imageright''' :'''No parameter''' = If no '''imageright''' parameter is given, no image is shown on the right side. :'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size). ::For example: <code><nowiki>imageright = [[File:Nuvola apps bookcase.svg|40px]]</nowiki></code> :'''Anything''' = Any other object that you want to show on the right side. '''style''' :An optional [[w:Cascading Style Sheets|CSS]] value used by the entire message box table. Without quotation marks <code>" "</code>. ::For example: <code>style = margin-bottom: 0.5em;</code> '''textstyle''' :An optional [[w:Cascading Style Sheets|CSS]] value used by the text cell. ::For example: <code>textstyle = text-align: center;</code> '''plainlinks''' :Normally on Wikipedia, external links have an arrow icon next to them, like this: [http://www.example.com Example.com]. However, in message boxes, the arrow icon is suppressed by default, like this: <span class="plainlinks">[http://www.example.com Example.com]</span>. To get the normal style of external link with the arrow icon, use {{para|plainlinks|no}}. '''text''' :The message body text. === Technical details === If you need to use special characters in the text parameter then you need to escape them like this: <pre> {{cmbox | text = <div> Equal sign = and a start and end brace { } work fine as they are. But here is a pipe {{!}} and two end braces &lt;nowiki>}}&lt;/nowiki>. And now a pipe and end braces &lt;nowiki>|}}&lt;/nowiki>. </div> }} </pre> {{cmbox{{\sandbox}} | text = <div> Equal sign = and a start and end brace { } work fine as they are. But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>. And now a pipe and end braces <nowiki>|}}</nowiki>. </div> }} This template uses the cmbox CSS classes in {{Blue|MediaWiki:Common.css}} for most of its looks, thus it is fully skinnable. Internally this meta-template uses HTML markup instead of wiki markup for the table code. That is the usual way we make meta-templates since wiki markup has several drawbacks. For instance it makes it harder to use [[Help:Extension:ParserFunctions|parser functions]] and special characters in parameters. The default images for this meta-template are in PNG format instead of SVG format. The main reason is that some older web browsers have trouble with the transparent background that MediaWiki renders for SVG images. The PNG images here have hand-optimised transparent background colour so they look good in all browsers. Note that SVG icons only look somewhat bad in the old browsers, thus such hand optimisation is only worth the trouble for very widely used icons. For more technical details see the [[Template talk:Cmbox|talk page]]. Since this template works almost exactly like the other mboxes, their talk pages and related pages might also contain more details (see the [[#See also|See also]] section below). == TemplateData == {{Mbox/TemplateData}} <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Mbox templates{{#translation:}}]] }}</includeonly> 5d5a78d9d3dac08ea8c76d1802b8e71065e9b565 Template:Module other 10 167 552 385 2021-10-20T19:50:22Z wikipedia>MusikBot II 0 Changed protection settings for "[[Template:Module other]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 3570 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite)) wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Module}} | module | other }} }} | module = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 503694836c1b07142e63fd35d8be69ec8bb9ffe7 Template:Italic title 10 184 529 2021-10-22T16:08:51Z wikipedia>Gonnym 0 includeonly wikitext text/x-wiki <includeonly>{{#invoke:Italic title|main}}</includeonly><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis to Wikidata. --> </noinclude> aa77d0fbc6bb86266d633b290b7ab258cc69c8b8 Template:!) 10 427 1293 2021-11-04T17:50:34Z mw>Clump 0 Reverted edits by [[Special:Contribs/110.54.165.94|110.54.165.94]] ([[User talk:110.54.165.94|talk]]) to last version by Clump wikitext text/x-wiki <onlyinclude>|}</onlyinclude> {{Documentation}} 469fe8c3efa0a39c92333858a80cd9d9b8b82968 Template:Main 10 81 176 2021-11-07T22:34:09Z wikipedia>Nihiltres 0 Includeonly the template to avoid errors on the template pages wikitext text/x-wiki <includeonly>{{#invoke:Labelled list hatnote|labelledList|Main article|Main articles|Main page|Main pages}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 99ebf54e265aa9354bc4861d3b0da913f1441ede Template:Lua sidebar 10 129 290 2021-11-15T22:24:39Z wikipedia>Izno 0 reduce expansion size slightly wikitext text/x-wiki {{Sidebar | class = lua-sidebar | templatestyles = Template:Lua sidebar/styles.css | title = Related pages | content1 = {{plainlist}} * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|Template]] {{#if:{{#invoke:redirect|isRedirect|Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}} * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Template sandbox]] * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Template testcases]] * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Template doc]] * [[Special:PrefixIndex/Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/|Template subpages]] * [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|Module]] {{#if:{{#invoke:redirect|isRedirect|Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}} * [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Module sandbox]] * [[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Module testcases]] * [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Module doc]] * [[Special:PrefixIndex/Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/|Module subpages]] {{endplainlist}} | content2 = {{{1|}}} }}<noinclude> {{Documentation}} </noinclude> f11e49d67a400d29f6d73720fea7eb5a273ab663 Template:Never substitute 10 159 365 2021-12-07T15:43:38Z wikipedia>Joe Roe 0 Undid revision 1043568500 by [[Special:Contributions/The Page Maker II|The Page Maker II]] ([[User talk:The Page Maker II|talk]]): a technical requirement is not a request wikitext text/x-wiki {{Ombox |type=notice |text='''This template should {{em|not}} be [[Wikipedia:Substitution|substituted]].''' {{{1|}}} }}<noinclude> {{Documentation}} </noinclude> ed10c57c4f8088f4a40cd7d066ae311218883d20 Template:Main other 10 75 158 2021-12-10T16:08:06Z wikipedia>Xaosflux 0 <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:0}} | main | other }} }} | main = {{{1|}}} | other | #default = {{{2|}}} }}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 86ad907ffeea3cc545159e00cd1f2d6433946450 Module:Navbox/styles.css 828 96 208 2021-12-21T22:10:10Z wikipedia>Izno 0 remove qualifications on th - this will remove styling from "hand-crafted" navboxes, but there's no other elegant way to deal with it. see talk page sanitized-css text/css /* {{pp|small=y}} */ .navbox { box-sizing: border-box; border: 1px solid #a2a9b1; width: 100%; clear: both; font-size: 88%; text-align: center; padding: 1px; margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ } .navbox .navbox { margin-top: 0; /* No top margin for nested navboxes */ } .navbox + .navbox, /* TODO: remove first line after transclusions have updated */ .navbox + .navbox-styles + .navbox { margin-top: -1px; /* Single pixel border between adjacent navboxes */ } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; line-height: 1.5em; text-align: center; } .navbox-group { white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background-color: #fdfdfd; } .navbox-list { line-height: 1.5em; border-color: #fdfdfd; /* Must match background color */ } .navbox-list-with-group { text-align: left; border-left-width: 2px; border-left-style: solid; } /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: #ccf; /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: #ddf; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: #e6e6ff; /* Level 3 color */ } .navbox-even { background-color: #f7f7f7; } .navbox-odd { background-color: transparent; } /* TODO: figure out how to remove reliance on td as structure */ .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; } e80b0d7a5770e6e105dab832deb6c37a5245ebc6 Module:Hatnote list 828 89 194 2021-12-26T20:05:24Z wikipedia>Nihiltres 0 Undid revision 1062166786 by [[Special:Contributions/Matthiaspaul|Matthiaspaul]] ([[User talk:Matthiaspaul|talk]]); should be fixed now, and if not, please ping me with examples as I couldn't reproduce the original error Scribunto text/plain -------------------------------------------------------------------------------- -- Module:Hatnote list -- -- -- -- This module produces and formats lists for use in hatnotes. In particular, -- -- it implements the for-see list, i.e. lists of "For X, see Y" statements, -- -- as used in {{about}}, {{redirect}}, and their variants. Also introduced -- -- are andList & orList helpers for formatting lists with those conjunctions. -- -------------------------------------------------------------------------------- local mArguments --initialize lazily local mFormatLink = require('Module:Format link') local mHatnote = require('Module:Hatnote') local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local p = {} -------------------------------------------------------------------------------- -- List stringification helper functions -- -- These functions are used for stringifying lists, usually page lists inside -- the "Y" portion of "For X, see Y" for-see items. -------------------------------------------------------------------------------- --default options table used across the list stringification functions local stringifyListDefaultOptions = { conjunction = "and", separator = ",", altSeparator = ";", space = " ", formatted = false } --Searches display text only local function searchDisp(haystack, needle) return string.find( string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle ) end -- Stringifies a list generically; probably shouldn't be used directly local function stringifyList(list, options) -- Type-checks, defaults, and a shortcut checkType("stringifyList", 1, list, "table") if #list == 0 then return nil end checkType("stringifyList", 2, options, "table", true) options = options or {} for k, v in pairs(stringifyListDefaultOptions) do if options[k] == nil then options[k] = v end end local s = options.space -- Format the list if requested if options.formatted then list = mFormatLink.formatPages( {categorizeMissing = mHatnote.missingTargetCat}, list ) end -- Set the separator; if any item contains it, use the alternate separator local separator = options.separator for k, v in pairs(list) do if searchDisp(v, separator) then separator = options.altSeparator break end end -- Set the conjunction, apply Oxford comma, and force a comma if #1 has "§" local conjunction = s .. options.conjunction .. s if #list == 2 and searchDisp(list[1], "§") or #list > 2 then conjunction = separator .. conjunction end -- Return the formatted string return mw.text.listToText(list, separator .. s, conjunction) end --DRY function function p.conjList (conj, list, fmt) return stringifyList(list, {conjunction = conj, formatted = fmt}) end -- Stringifies lists with "and" or "or" function p.andList (...) return p.conjList("and", ...) end function p.orList (...) return p.conjList("or", ...) end -------------------------------------------------------------------------------- -- For see -- -- Makes a "For X, see [[Y]]." list from raw parameters. Intended for the -- {{about}} and {{redirect}} templates and their variants. -------------------------------------------------------------------------------- --default options table used across the forSee family of functions local forSeeDefaultOptions = { andKeyword = 'and', title = mw.title.getCurrentTitle().text, otherText = 'other uses', forSeeForm = 'For %s, see %s.', } --Collapses duplicate punctuation local function punctuationCollapse (text) local replacements = { ["%.%.$"] = ".", ["%?%.$"] = "?", ["%!%.$"] = "!", ["%.%]%]%.$"] = ".]]", ["%?%]%]%.$"] = "?]]", ["%!%]%]%.$"] = "!]]" } for k, v in pairs(replacements) do text = string.gsub(text, k, v) end return text end -- Structures arguments into a table for stringification, & options function p.forSeeArgsToTable (args, from, options) -- Type-checks and defaults checkType("forSeeArgsToTable", 1, args, 'table') checkType("forSeeArgsToTable", 2, from, 'number', true) from = from or 1 checkType("forSeeArgsToTable", 3, options, 'table', true) options = options or {} for k, v in pairs(forSeeDefaultOptions) do if options[k] == nil then options[k] = v end end -- maxArg's gotten manually because getArgs() and table.maxn aren't friends local maxArg = 0 for k, v in pairs(args) do if type(k) == 'number' and k > maxArg then maxArg = k end end -- Structure the data out from the parameter list: -- * forTable is the wrapper table, with forRow rows -- * Rows are tables of a "use" string & a "pages" table of pagename strings -- * Blanks are left empty for defaulting elsewhere, but can terminate list local forTable = {} local i = from local terminated = false -- If there is extra text, and no arguments are given, give nil value -- to not produce default of "For other uses, see foo (disambiguation)" if options.extratext and i > maxArg then return nil end -- Loop to generate rows repeat -- New empty row local forRow = {} -- On blank use, assume list's ended & break at end of this loop forRow.use = args[i] if not args[i] then terminated = true end -- New empty list of pages forRow.pages = {} -- Insert first pages item if present table.insert(forRow.pages, args[i + 1]) -- If the param after next is "and", do inner loop to collect params -- until the "and"'s stop. Blanks are ignored: "1|and||and|3" → {1, 3} while args[i + 2] == options.andKeyword do if args[i + 3] then table.insert(forRow.pages, args[i + 3]) end -- Increment to next "and" i = i + 2 end -- Increment to next use i = i + 2 -- Append the row table.insert(forTable, forRow) until terminated or i > maxArg return forTable end -- Stringifies a table as formatted by forSeeArgsToTable function p.forSeeTableToString (forSeeTable, options) -- Type-checks and defaults checkType("forSeeTableToString", 1, forSeeTable, "table", true) checkType("forSeeTableToString", 2, options, "table", true) options = options or {} for k, v in pairs(forSeeDefaultOptions) do if options[k] == nil then options[k] = v end end -- Stringify each for-see item into a list local strList = {} if forSeeTable then for k, v in pairs(forSeeTable) do local useStr = v.use or options.otherText local pagesStr = p.andList(v.pages, true) or mFormatLink._formatLink{ categorizeMissing = mHatnote.missingTargetCat, link = mHatnote.disambiguate(options.title) } local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr) forSeeStr = punctuationCollapse(forSeeStr) table.insert(strList, forSeeStr) end end if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end -- Return the concatenated list return table.concat(strList, ' ') end -- Produces a "For X, see [[Y]]" string from arguments. Expects index gaps -- but not blank/whitespace values. Ignores named args and args < "from". function p._forSee (args, from, options) local forSeeTable = p.forSeeArgsToTable(args, from, options) return p.forSeeTableToString(forSeeTable, options) end -- As _forSee, but uses the frame. function p.forSee (frame, from, options) mArguments = require('Module:Arguments') return p._forSee(mArguments.getArgs(frame), from, options) end return p d0828422b1aa0d0d0092d699d059c9e882260398 Template:FULLROOTPAGENAME 10 72 150 2022-01-02T08:54:02Z wikipedia>Dinoguy1000 0 fix "|=foo" bug wikitext text/x-wiki {{ safesubst:<noinclude/>#if: {{ safesubst:<noinclude/>Ns has subpages | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{ safesubst:<noinclude/>NAMESPACE:{{{1}}}}}|{{ safesubst:<noinclude/>NAMESPACE}}}} }} | {{ safesubst:<noinclude/>#titleparts:{{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}|1}} | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}} }}<noinclude> {{documentation}} </noinclude> fd0c4e7050dded2d50e5df405e6e5e31dd0d46ac Template:No redirect 10 152 351 2022-01-02T09:07:18Z wikipedia>Dinoguy1000 0 fix "|=foo" bug wikitext text/x-wiki {{safesubst:<noinclude/>#if: {{safesubst:<noinclude/>#invoke:Redirect|isRedirect|{{{1}}}}} | <span class="plainlinks">[{{safesubst:<noinclude/>fullurl:{{{1}}}|redirect=no}} {{{2|{{{1}}}}}}]</span> | {{safesubst:<noinclude/>#if:{{{2|}}}|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}|{{{2}}}]]|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}]]}} }}<noinclude> {{documentation}} </noinclude> 1760035b1bed54ee08b810208ed3551b812dfe13 Module:Navbar/styles.css 828 93 202 2022-01-03T23:12:15Z wikipedia>Izno 0 navbar styles that were moved to parent templates sanitized-css text/css /* {{pp|small=yes}} */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar-collapse { float: left; text-align: left; } .navbar-boxtext { word-spacing: 0; } .navbar ul { display: inline-block; white-space: nowrap; line-height: inherit; } .navbar-brackets::before { margin-right: -0.125em; content: '[ '; } .navbar-brackets::after { margin-left: -0.125em; content: ' ]'; } .navbar li { word-spacing: -0.125em; } .navbar a > span, .navbar a > abbr { text-decoration: inherit; } .navbar-mini abbr { font-variant: small-caps; border-bottom: none; text-decoration: none; cursor: inherit; } .navbar-ct-full { font-size: 114%; margin: 0 7em; } .navbar-ct-mini { font-size: 114%; margin: 0 4em; } 9d4056f949b4f0b159e3d40dfb1a5f01e72f9571 Template:Documentation 10 15 29 2022-01-05T08:31:52Z mw>Taravyvan Adijene 0 /* Rationale */ абнаўленьне зьвестак wikitext text/x-wiki <noinclude> <languages/> </noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude> {{documentation|content= {{Lua|Module:Documentation}} <translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate> <translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate> <translate> ==Usage== <!--T:2--> ===Customizing display=== <!--T:3--> <!--T:4--> Overrides exist to customize the output in special cases: </translate> * <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate> <translate> ==Rationale== <!--T:6--> </translate> <translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate> <translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate> <translate> ==See also== <!--T:9--> </translate> * <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate> * {{tim|Documentation}} * <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate> }} [[Category:Formatting templates{{#translation:}}|Template documentation]] [[Category:Template documentation{{#translation:}}| ]] </noinclude><includeonly>{{#if:{{{content|}}}| [[Category:Template documentation pages{{#translation:}}]] }}</includeonly> e9a25c87d40f5882dd425c83ed4d3be628082f3c 238 29 2022-03-29T02:14:34Z wikipedia>Bsherr 0 consistent with new substitution template format wikitext text/x-wiki {{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}<noinclude> <!-- Add categories to the /doc subpage --> </noinclude> 9e62b964e96c4e3d478edecbfcb3c0338ae8a276 Template:Documentation/en 10 16 31 2022-01-05T21:45:00Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages/> </noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude> {{documentation|content= {{Lua|Module:Documentation}} This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page. It is intended for pages which are [[Special:MyLanguage/Help:Transclusion|transcluded]] in other pages, i.e. templates, whether in the template namespace or not. ==Usage== ===Customizing display=== Overrides exist to customize the output in special cases: * <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - change the text of the "documentation" heading. If this is set to blank, the entire heading line (including the first [edit] link) will also disappear. ==Rationale== This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories. It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[:en:Special:Diff/69888944|developer's explanation]]). ==See also== * [[w:Template:Documentation subpage]] * {{tim|Documentation}} * [[w:Wikipedia:Template documentation]] }} [[Category:Formatting templates{{#translation:}}|Template documentation]] [[Category:Template documentation{{#translation:}}| ]] </noinclude><includeonly>{{#if:{{{content|}}}| [[Category:Template documentation pages{{#translation:}}]] }}</includeonly> ea09a0702078c03b055fa66d2628126da3e3c062 Module:Documentation/config 828 26 242 2022-01-25T23:46:11Z wikipedia>Ianblair23 0 link Scribunto text/plain ---------------------------------------------------------------------------------------------------- -- -- Configuration for Module:Documentation -- -- Here you can set the values of the parameters and messages used in Module:Documentation to -- localise it to your wiki and your language. Unless specified otherwise, values given here -- should be string values. ---------------------------------------------------------------------------------------------------- local cfg = {} -- Do not edit this line. ---------------------------------------------------------------------------------------------------- -- Protection template configuration ---------------------------------------------------------------------------------------------------- -- cfg['protection-reason-edit'] -- The protection reason for edit-protected templates to pass to -- [[Module:Protection banner]]. cfg['protection-reason-edit'] = 'template' --[[ ---------------------------------------------------------------------------------------------------- -- Sandbox notice configuration -- -- On sandbox pages the module can display a template notifying users that the current page is a -- sandbox, and the location of test cases pages, etc. The module decides whether the page is a -- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the -- messages that the notices contains. ---------------------------------------------------------------------------------------------------- --]] -- cfg['sandbox-notice-image'] -- The image displayed in the sandbox notice. cfg['sandbox-notice-image'] = '[[File:Sandbox.svg|50px|alt=|link=]]' --[[ -- cfg['sandbox-notice-pagetype-template'] -- cfg['sandbox-notice-pagetype-module'] -- cfg['sandbox-notice-pagetype-other'] -- The page type of the sandbox page. The message that is displayed depends on the current subject -- namespace. This message is used in either cfg['sandbox-notice-blurb'] or -- cfg['sandbox-notice-diff-blurb']. --]] cfg['sandbox-notice-pagetype-template'] = '[[Wikipedia:Template test cases|template sandbox]] page' cfg['sandbox-notice-pagetype-module'] = '[[Wikipedia:Template test cases|module sandbox]] page' cfg['sandbox-notice-pagetype-other'] = 'sandbox page' --[[ -- cfg['sandbox-notice-blurb'] -- cfg['sandbox-notice-diff-blurb'] -- cfg['sandbox-notice-diff-display'] -- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence -- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page -- type, which is either cfg['sandbox-notice-pagetype-template'], -- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what -- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between -- the sandbox and the main template. The display value of the diff link is set by -- cfg['sandbox-notice-compare-link-display']. --]] cfg['sandbox-notice-blurb'] = 'This is the $1 for $2.' cfg['sandbox-notice-diff-blurb'] = 'This is the $1 for $2 ($3).' cfg['sandbox-notice-compare-link-display'] = 'diff' --[[ -- cfg['sandbox-notice-testcases-blurb'] -- cfg['sandbox-notice-testcases-link-display'] -- cfg['sandbox-notice-testcases-run-blurb'] -- cfg['sandbox-notice-testcases-run-link-display'] -- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit. $1 is a link to the test cases page. -- cfg['sandbox-notice-testcases-link-display'] is the display value for that link. -- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test -- cases page, and $2 is a link to the page to run it. -- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test -- cases. --]] cfg['sandbox-notice-testcases-blurb'] = 'See also the companion subpage for $1.' cfg['sandbox-notice-testcases-link-display'] = 'test cases' cfg['sandbox-notice-testcases-run-blurb'] = 'See also the companion subpage for $1 ($2).' cfg['sandbox-notice-testcases-run-link-display'] = 'run' -- cfg['sandbox-category'] -- A category to add to all template sandboxes. cfg['sandbox-category'] = 'Template sandboxes' ---------------------------------------------------------------------------------------------------- -- Start box configuration ---------------------------------------------------------------------------------------------------- -- cfg['documentation-icon-wikitext'] -- The wikitext for the icon shown at the top of the template. cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]' -- cfg['template-namespace-heading'] -- The heading shown in the template namespace. cfg['template-namespace-heading'] = 'Template documentation' -- cfg['module-namespace-heading'] -- The heading shown in the module namespace. cfg['module-namespace-heading'] = 'Module documentation' -- cfg['file-namespace-heading'] -- The heading shown in the file namespace. cfg['file-namespace-heading'] = 'Summary' -- cfg['other-namespaces-heading'] -- The heading shown in other namespaces. cfg['other-namespaces-heading'] = 'Documentation' -- cfg['view-link-display'] -- The text to display for "view" links. cfg['view-link-display'] = 'view' -- cfg['edit-link-display'] -- The text to display for "edit" links. cfg['edit-link-display'] = 'edit' -- cfg['history-link-display'] -- The text to display for "history" links. cfg['history-link-display'] = 'history' -- cfg['purge-link-display'] -- The text to display for "purge" links. cfg['purge-link-display'] = 'purge' -- cfg['create-link-display'] -- The text to display for "create" links. cfg['create-link-display'] = 'create' ---------------------------------------------------------------------------------------------------- -- Link box (end box) configuration ---------------------------------------------------------------------------------------------------- -- cfg['transcluded-from-blurb'] -- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page. cfg['transcluded-from-blurb'] = 'The above [[Wikipedia:Template documentation|documentation]] is [[Help:Transclusion|transcluded]] from $1.' --[[ -- cfg['create-module-doc-blurb'] -- Notice displayed in the module namespace when the documentation subpage does not exist. -- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the -- display cfg['create-link-display']. --]] cfg['create-module-doc-blurb'] = 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].' ---------------------------------------------------------------------------------------------------- -- Experiment blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['experiment-blurb-template'] -- cfg['experiment-blurb-module'] -- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages. -- It is only shown in the template and module namespaces. With the default English settings, it -- might look like this: -- -- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages. -- -- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links. -- -- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending -- on what namespace we are in. -- -- Parameters: -- -- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display']) -- -- If the sandbox doesn't exist, it is in the format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display']) -- -- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload'] -- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display'] -- loads a default edit summary of cfg['mirror-edit-summary']. -- -- $2 is a link to the test cases page. If the test cases page exists, it is in the following format: -- -- cfg['testcases-link-display'] (cfg['testcases-edit-link-display'] | cfg['testcases-run-link-display']) -- -- If the test cases page doesn't exist, it is in the format: -- -- cfg['testcases-link-display'] (cfg['testcases-create-link-display']) -- -- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the -- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current -- namespace. --]] cfg['experiment-blurb-template'] = "Editors can experiment in this template's $1 and $2 pages." cfg['experiment-blurb-module'] = "Editors can experiment in this module's $1 and $2 pages." ---------------------------------------------------------------------------------------------------- -- Sandbox link configuration ---------------------------------------------------------------------------------------------------- -- cfg['sandbox-subpage'] -- The name of the template subpage typically used for sandboxes. cfg['sandbox-subpage'] = 'sandbox' -- cfg['template-sandbox-preload'] -- Preload file for template sandbox pages. cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox' -- cfg['module-sandbox-preload'] -- Preload file for Lua module sandbox pages. cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox' -- cfg['sandbox-link-display'] -- The text to display for "sandbox" links. cfg['sandbox-link-display'] = 'sandbox' -- cfg['sandbox-edit-link-display'] -- The text to display for sandbox "edit" links. cfg['sandbox-edit-link-display'] = 'edit' -- cfg['sandbox-create-link-display'] -- The text to display for sandbox "create" links. cfg['sandbox-create-link-display'] = 'create' -- cfg['compare-link-display'] -- The text to display for "compare" links. cfg['compare-link-display'] = 'diff' -- cfg['mirror-edit-summary'] -- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the -- template page. cfg['mirror-edit-summary'] = 'Create sandbox version of $1' -- cfg['mirror-link-display'] -- The text to display for "mirror" links. cfg['mirror-link-display'] = 'mirror' -- cfg['mirror-link-preload'] -- The page to preload when a user clicks the "mirror" link. cfg['mirror-link-preload'] = 'Template:Documentation/mirror' ---------------------------------------------------------------------------------------------------- -- Test cases link configuration ---------------------------------------------------------------------------------------------------- -- cfg['testcases-subpage'] -- The name of the template subpage typically used for test cases. cfg['testcases-subpage'] = 'testcases' -- cfg['template-testcases-preload'] -- Preload file for template test cases pages. cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases' -- cfg['module-testcases-preload'] -- Preload file for Lua module test cases pages. cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases' -- cfg['testcases-link-display'] -- The text to display for "testcases" links. cfg['testcases-link-display'] = 'testcases' -- cfg['testcases-edit-link-display'] -- The text to display for test cases "edit" links. cfg['testcases-edit-link-display'] = 'edit' -- cfg['testcases-run-link-display'] -- The text to display for test cases "run" links. cfg['testcases-run-link-display'] = 'run' -- cfg['testcases-create-link-display'] -- The text to display for test cases "create" links. cfg['testcases-create-link-display'] = 'create' ---------------------------------------------------------------------------------------------------- -- Add categories blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['add-categories-blurb'] -- Text to direct users to add categories to the /doc subpage. Not used if the "content" or -- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a -- link to the /doc subpage with a display value of cfg['doc-link-display']. --]] cfg['add-categories-blurb'] = 'Add categories to the $1 subpage.' -- cfg['doc-link-display'] -- The text to display when linking to the /doc subpage. cfg['doc-link-display'] = '/doc' ---------------------------------------------------------------------------------------------------- -- Subpages link configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['subpages-blurb'] -- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a -- display value of cfg['subpages-link-display']. In the English version this blurb is simply -- the link followed by a period, and the link display provides the actual text. --]] cfg['subpages-blurb'] = '$1.' --[[ -- cfg['subpages-link-display'] -- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'], -- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in -- the template namespace, the module namespace, or another namespace. --]] cfg['subpages-link-display'] = 'Subpages of this $1' -- cfg['template-pagetype'] -- The pagetype to display for template pages. cfg['template-pagetype'] = 'template' -- cfg['module-pagetype'] -- The pagetype to display for Lua module pages. cfg['module-pagetype'] = 'module' -- cfg['default-pagetype'] -- The pagetype to display for pages other than templates or Lua modules. cfg['default-pagetype'] = 'page' ---------------------------------------------------------------------------------------------------- -- Doc link configuration ---------------------------------------------------------------------------------------------------- -- cfg['doc-subpage'] -- The name of the subpage typically used for documentation pages. cfg['doc-subpage'] = 'doc' -- cfg['docpage-preload'] -- Preload file for template documentation pages in all namespaces. cfg['docpage-preload'] = 'Template:Documentation/preload' -- cfg['module-preload'] -- Preload file for Lua module documentation pages. cfg['module-preload'] = 'Template:Documentation/preload-module-doc' ---------------------------------------------------------------------------------------------------- -- HTML and CSS configuration ---------------------------------------------------------------------------------------------------- -- cfg['templatestyles'] -- The name of the TemplateStyles page where CSS is kept. -- Sandbox CSS will be at Module:Documentation/sandbox/styles.css when needed. cfg['templatestyles'] = 'Module:Documentation/styles.css' -- cfg['container'] -- Class which can be used to set flex or grid CSS on the -- two child divs documentation and documentation-metadata cfg['container'] = 'documentation-container' -- cfg['main-div-classes'] -- Classes added to the main HTML "div" tag. cfg['main-div-classes'] = 'documentation' -- cfg['main-div-heading-class'] -- Class for the main heading for templates and modules and assoc. talk spaces cfg['main-div-heading-class'] = 'documentation-heading' -- cfg['start-box-class'] -- Class for the start box cfg['start-box-class'] = 'documentation-startbox' -- cfg['start-box-link-classes'] -- Classes used for the [view][edit][history] or [create] links in the start box. -- mw-editsection-like is per [[Wikipedia:Village pump (technical)/Archive 117]] cfg['start-box-link-classes'] = 'mw-editsection-like plainlinks' -- cfg['end-box-class'] -- Class for the end box. cfg['end-box-class'] = 'documentation-metadata' -- cfg['end-box-plainlinks'] -- Plainlinks cfg['end-box-plainlinks'] = 'plainlinks' -- cfg['toolbar-class'] -- Class added for toolbar links. cfg['toolbar-class'] = 'documentation-toolbar' -- cfg['clear'] -- Just used to clear things. cfg['clear'] = 'documentation-clear' ---------------------------------------------------------------------------------------------------- -- Tracking category configuration ---------------------------------------------------------------------------------------------------- -- cfg['display-strange-usage-category'] -- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage -- or a /testcases subpage. This should be a boolean value (either true or false). cfg['display-strange-usage-category'] = true -- cfg['strange-usage-category'] -- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a -- /doc subpage or a /testcases subpage. cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage' --[[ ---------------------------------------------------------------------------------------------------- -- End configuration -- -- Don't edit anything below this line. ---------------------------------------------------------------------------------------------------- --]] return cfg 71b68ed73088f1a59d61acf06bbee9fde6677f03 Template:Languages 10 420 1279 2022-01-30T17:31:41Z mw>Kaganer 0 PAGELANGUAGE wikitext text/x-wiki {{#ifeq:<languages exists/>|<languages/>|<languages/>| {{nmbox | header = {{ll|Project:Language policy|{{Languages/Title|{{SUBPAGENAME}}}}}} | text = '''[[{{{1|:{{translatable}}}}}|English]]''' {{Languages/Lang|af|{{{1|}}}| }}{{Languages/Lang|ar|{{{1|}}}| }}{{Languages/Lang|ast|{{{1|}}}| }}{{Languages/Lang|az|{{{1|}}}| }}{{Languages/Lang|bcc|{{{1|}}}| }}{{Languages/Lang|be|{{{1|}}}| }}{{Languages/Lang|be-tarask|{{{1|}}}| }}{{Languages/Lang|bg|{{{1|}}}| }}{{Languages/Lang|br|{{{1|}}}| }}{{Languages/Lang|bn|{{{1|}}}| }}{{Languages/Lang|bs|{{{1|}}}| }}{{Languages/Lang|ca|{{{1|}}}| }}{{Languages/Lang|ckb|{{{1|}}}| }}{{Languages/Lang|cs|{{{1|}}}| }}{{Languages/Lang|da|{{{1|}}}| }}{{Languages/Lang|de|{{{1|}}}| }}{{Languages/Lang|diq|{{{1|}}}| }}{{Languages/Lang|el|{{{1|}}}| }}{{Languages/Lang|eo|{{{1|}}}| }}{{Languages/Lang|es|{{{1|}}}| }}{{Languages/Lang|fa|{{{1|}}}| }}{{Languages/Lang|fi|{{{1|}}}| }}{{Languages/Lang|fr|{{{1|}}}| }}{{Languages/Lang|gl|{{{1|}}}| }}{{Languages/Lang|gu|{{{1|}}}| }}{{Languages/Lang|he|{{{1|}}}| }}{{Languages/Lang|hi|{{{1|}}}| }}{{Languages/Lang|hr|{{{1|}}}| }}{{Languages/Lang|hu|{{{1|}}}| }}{{Languages/Lang|hy|{{{1|}}}| }}{{Languages/Lang|id|{{{1|}}}| }}{{Languages/Lang|io|{{{1|}}}| }}{{Languages/Lang|it|{{{1|}}}| }}{{Languages/Lang|ja|{{{1|}}}| }}{{Languages/Lang|jv|{{{1|}}}| }}{{Languages/Lang|ka|{{{1|}}}| }}{{Languages/Lang|kk|{{{1|}}}| }}<span class="autonym">{{Languages/Lang|km|{{{1|}}}| }}</span>{{Languages/Lang|ko|{{{1|}}}| }}{{Languages/Lang|ko-kp|{{{1|}}}| }}{{Languages/Lang|ksh|{{{1|}}}| }}{{Languages/Lang|kw|{{{1|}}}| }}{{Languages/Lang|la|{{{1|}}}| }}{{Languages/Lang|map-bms|{{{1|}}}| }}{{Languages/Lang|min|{{{1|}}}| }}{{Languages/Lang|mk|{{{1|}}}| }}{{Languages/Lang|ml|{{{1|}}}| }}<span class="autonym">{{Languages/Lang|mr|{{{1|}}}| }}</span>{{Languages/Lang|ms|{{{1|}}}| }}{{Languages/Lang|mwl|{{{1|}}}| }}{{Languages/Lang|nl|{{{1|}}}| }}{{Languages/Lang|no|{{{1|}}}| }}{{Languages/Lang|oc|{{{1|}}}| }}{{Languages/Lang|or|{{{1|}}}| }}{{Languages/Lang|pl|{{{1|}}}| }}{{Languages/Lang|pt|{{{1|}}}| }}{{Languages/Lang|pt-br|{{{1|}}}| }}{{Languages/Lang|ro|{{{1|}}}| }}{{Languages/Lang|ru|{{{1|}}}| }}{{Languages/Lang|sc|{{{1|}}}| }}{{Languages/Lang|si|{{{1|}}}| }}{{Languages/Lang|sk|{{{1|}}}| }}{{Languages/Lang|sl|{{{1|}}}| }}{{Languages/Lang|so|{{{1|}}}| }}{{Languages/Lang|sq|{{{1|}}}| }}{{Languages/Lang|sr|{{{1|}}}| }}{{Languages/Lang|sv|{{{1|}}}| }}{{Languages/Lang|ta|{{{1|}}}| }}{{Languages/Lang|th|{{{1|}}}| }}{{Languages/Lang|tr|{{{1|}}}| }}{{Languages/Lang|uk|{{{1|}}}| }}{{Languages/Lang|vi|{{{1|}}}| }}{{Languages/Lang|yi|{{{1|}}}| }}{{Languages/Lang|yue|{{{1|}}}| }}{{Languages/Lang|zh|{{{1|}}}| }}{{Languages/Lang|zh-hans|{{{1|}}}| }}{{Languages/Lang|zh-hant|{{{1|}}}| }}{{Languages/Lang|zh-tw|{{{1|}}}}}| }}<!--/nmbox--><includeonly>{{#if:{{Languages/Lang|af|{{{1|}}}| }}{{Languages/Lang|ar|{{{1|}}}| }}{{Languages/Lang|ast|{{{1|}}}| }}{{Languages/Lang|az|{{{1|}}}| }}{{Languages/Lang|bcc|{{{1|}}}| }}{{Languages/Lang|be|{{{1|}}}| }}{{Languages/Lang|be-tarask|{{{1|}}}| }}{{Languages/Lang|bg|{{{1|}}}| }}{{Languages/Lang|br|{{{1|}}}| }}{{Languages/Lang|bn|{{{1|}}}| }}{{Languages/Lang|bs|{{{1|}}}| }}{{Languages/Lang|ca|{{{1|}}}| }}{{Languages/Lang|ckb|{{{1|}}}| }}{{Languages/Lang|cs|{{{1|}}}| }}{{Languages/Lang|da|{{{1|}}}| }}{{Languages/Lang|de|{{{1|}}}| }}{{Languages/Lang|diq|{{{1|}}}| }}{{Languages/Lang|el|{{{1|}}}| }}{{Languages/Lang|eo|{{{1|}}}| }}{{Languages/Lang|es|{{{1|}}}| }}{{Languages/Lang|fa|{{{1|}}}| }}{{Languages/Lang|fi|{{{1|}}}| }}{{Languages/Lang|fr|{{{1|}}}| }}{{Languages/Lang|gl|{{{1|}}}| }}{{Languages/Lang|gu|{{{1|}}}| }}{{Languages/Lang|he|{{{1|}}}| }}{{Languages/Lang|hi|{{{1|}}}| }}{{Languages/Lang|hr|{{{1|}}}| }}{{Languages/Lang|hu|{{{1|}}}| }}{{Languages/Lang|hy|{{{1|}}}| }}{{Languages/Lang|id|{{{1|}}}| }}{{Languages/Lang|io|{{{1|}}}| }}{{Languages/Lang|it|{{{1|}}}| }}{{Languages/Lang|ja|{{{1|}}}| }}{{Languages/Lang|jv|{{{1|}}}| }}{{Languages/Lang|ka|{{{1|}}}| }}{{Languages/Lang|kk|{{{1|}}}| }}{{Languages/Lang|km|{{{1|}}}| }}{{Languages/Lang|ko|{{{1|}}}| }}{{Languages/Lang|ko-kp|{{{1|}}}| }}{{Languages/Lang|ksh|{{{1|}}}| }}{{Languages/Lang|kw|{{{1|}}}| }}{{Languages/Lang|la|{{{1|}}}| }}{{Languages/Lang|map-bms|{{{1|}}}| }}{{Languages/Lang|min|{{{1|}}}| }}{{Languages/Lang|mk|{{{1|}}}| }}{{Languages/Lang|ml|{{{1|}}}| }}{{Languages/Lang|mr|{{{1|}}}| }}{{Languages/Lang|ms|{{{1|}}}| }}{{Languages/Lang|mwl|{{{1|}}}| }}{{Languages/Lang|nl|{{{1|}}}| }}{{Languages/Lang|no|{{{1|}}}| }}{{Languages/Lang|oc|{{{1|}}}| }}{{Languages/Lang|or|{{{1|}}}| }}{{Languages/Lang|pl|{{{1|}}}| }}{{Languages/Lang|pt|{{{1|}}}| }}{{Languages/Lang|pt-br|{{{1|}}}| }}{{Languages/Lang|ro|{{{1|}}}| }}{{Languages/Lang|ru|{{{1|}}}| }}{{Languages/Lang|si|{{{1|}}}| }}{{Languages/Lang|sk|{{{1|}}}| }}{{Languages/Lang|sl|{{{1|}}}| }}{{Languages/Lang|so|{{{1|}}}| }}{{Languages/Lang|sq|{{{1|}}}| }}{{Languages/Lang|sr|{{{1|}}}| }}{{Languages/Lang|sv|{{{1|}}}| }}{{Languages/Lang|ta|{{{1|}}}| }}{{Languages/Lang|th|{{{1|}}}| }}{{Languages/Lang|tr|{{{1|}}}| }}{{Languages/Lang|uk|{{{1|}}}| }}{{Languages/Lang|vi|{{{1|}}}| }}{{Languages/Lang|yi|{{{1|}}}| }}{{Languages/Lang|yue|{{{1|}}}| }}{{Languages/Lang|zh|{{{1|}}}| }}{{Languages/Lang|zh-hans|{{{1|}}}| }}{{Languages/Lang|zh-hant|{{{1|}}}| }}{{Languages/Lang|zh-tw|{{{1|}}}}} ||[[Category:Languages pages without translations]]}}<!--/#if--><!-- -->[[Category:Languages pages]]<!-- -->{{#switch:{{PAGELANGUAGE}} |en=<!--empty--> |ku-latn=[[Category:Languages pages/ku]] |zh-hans|zh-hant=[[Category:Languages pages/zh]] |#default=[[Category:Languages pages{{#translation:}}]] }}<!--/#switch--></includeonly>}}<!--/#ifeq--><noinclude> {{documentation}} </noinclude> 55bb0db791ef7b2ac02d610038d723c74f71cd00 Template:TemplateData header/en 10 22 43 2022-01-30T17:48:30Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages/> <onlyinclude>{{#switch: |= <div class="templatedata-header"><!-- -->{{#if:{{yesno|{{{editlinks|}}}}}<!-- -->|{{#ifexpr:<!-- -->{{#if:{{{docpage|}}}<!-- -->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!-- -->|not{{IsDocSubpage|false=0}}<!-- -->}}<!-- -->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!-- -->}}<!-- -->}} {{#if:{{{noheader|}}}||This is the [[Special:MyLanguage/Help:TemplateData|TemplateData]] documentation for this template used by [[Special:MyLanguage/VisualEditor|VisualEditor]] and other tools.}} '''{{{1|{{BASEPAGENAME}}}}}''' </div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!-- -->|{{#if:{{IsDocSubpage|false=}}<!-- -->|[[Category:TemplateData documentation{{#translation:}}]]<!-- -->|[[Category:Templates using TemplateData{{#translation:}}]]<!-- -->}}<!-- -->}}</includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}} }}</onlyinclude> {{Documentation|content= Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]]. == Usage == {{#tag:syntaxhighlight| ==TemplateData== or ==Parameters== or ==Usage== {{((}}TemplateData header{{))}} {{^(}}templatedata{{)^}}{ ... }{{^(}}/templatedata{{)^}} |lang=html }} Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]]. <dl><dd> {{TemplateData header|Template name}} </dd></dl> Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text. <dl><dd> {{TemplateData header|noheader=1}} </dd></dl> ==Parameters== {{TemplateData header/doc}} }} </noinclude> dce30fc2e3f9848db82a3e0290f65f2d61e1c5ed Template:Nmbox 10 417 1269 2022-01-30T18:30:39Z mw>Kaganer 0 PAGELANGUAGE wikitext text/x-wiki <templatestyles src="Template:Nmbox/styles.css" /> <div class="nmbox noprint {{dir|{{PAGELANGUAGE}}|mw-content-rtl|mw-content-ltr}}">{{#if: {{{image|}}}{{{header|}}} |<div class="nmbox-header">{{#if: {{{image|}}}|<div class="nmbox-image mbox-image">{{{image|}}}</div>}}{{{header|}}} </div>}} {{#if:{{{text|}}}|<div class="nmbox-text mbox-text">{{{text|}}}</div>}} </div><noinclude> {{documentation}} </noinclude> 65d650d49fef1164b81d6520492d31f2e477c2bf Module:Int 828 408 1251 2022-01-30T22:06:47Z mw>AntiCompositeNumber 0 check message in the target language, not the default, still return missing message markup if message does not exist (and is not just disabled) Scribunto text/plain -- This is a helper module for [[Template:int]] local templateTranslation = require('Module:Template translation') local this = {} function this.renderIntMessage(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local arguments = {} for k, v in pairs(pargs) do local n = tonumber(k) or 0 if (n >= 2) then arguments[n - 1] = mw.text.trim(v) end end local lang if args.lang and args.lang ~= '' and mw.language.isValidCode(args.lang) then lang = args.lang else lang = templateTranslation.getLanguage() end local msg = mw.message.new(mw.text.trim(args[1]), arguments):inLanguage(lang) if msg:exists() or lang == 'qqx' then if msg:isDisabled() then return args.missing or '' else local msgstr = msg:plain() return frame:preprocess(msgstr) end else return args.missing ~= '' and args.missing or '⧼' .. args[1] .. '⧽' end end return this 8bd789d31d4f269e575c5806864031420e6a5c86 Module:TableTools 828 31 166 61 2022-01-31T13:08:18Z wikipedia>MSGJ 0 updates/fixes requested by [[User:Uzume]] Scribunto text/plain ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should not -- -- be called directly from #invoke. -- ------------------------------------------------------------------------------------ local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ function p.isPositiveInteger(v) return type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity end ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false if -- not. Although it doesn't operate on tables, it is included here as it is useful -- for determining whether a value can be a valid table key. Lua will generate an -- error if a NaN is used as a table key. ------------------------------------------------------------------------------------ function p.isNan(v) return type(v) == 'number' and v ~= v end ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ function p.shallowClone(t) checkType('shallowClone', 1, t, 'table') local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ function p.removeDuplicates(arr) checkType('removeDuplicates', 1, arr, 'table') local isNan = p.isNan local ret, exists = {}, {} for _, v in ipairs(arr) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v else if not exists[v] then ret[#ret + 1] = v exists[v] = true end end end return ret end ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will return -- {1, 3, 6}. ------------------------------------------------------------------------------------ function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. return s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like {"foo1", "bar1", "foo2", "baz2"}, returns a table -- of subtables in the format -- {[1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'}}. -- Keys that don't end with an integer are stored in a subtable named "other". The -- compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ function p.size(t) checkType('size', 1, t, 'table') local i = 0 for _ in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 elseif type1 == 'table' or type1 == 'boolean' or type1 == 'function' then return tostring(item1) < tostring(item2) else return item1 < item2 end end ------------------------------------------------------------------------------------ -- keysToList -- -- Returns an array of the keys in a table, sorted using either a default -- comparison function or a custom keySort function. ------------------------------------------------------------------------------------ function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, {'function', 'boolean', 'nil'}) end local arr = {} local index = 1 for k in pairs(t) do arr[index] = k index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(arr, keySort) end return arr end ------------------------------------------------------------------------------------ -- sortedPairs -- -- Iterates through a table, with the keys sorted using the keysToList function. -- If there are only numerical keys, sparseIpairs is probably more efficient. ------------------------------------------------------------------------------------ function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local arr = p.keysToList(t, keySort, true) local i = 0 return function () i = i + 1 local key = arr[i] if key ~= nil then return key, t[key] else return nil, nil end end end ------------------------------------------------------------------------------------ -- isArray -- -- Returns true if the given value is a table and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArray(v) if type(v) ~= 'table' then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- isArrayLike -- -- Returns true if the given value is iterable and all keys are consecutive -- integers starting at 1. ------------------------------------------------------------------------------------ function p.isArrayLike(v) if not pcall(pairs, v) then return false end local i = 0 for _ in pairs(v) do i = i + 1 if v[i] == nil then return false end end return true end ------------------------------------------------------------------------------------ -- invert -- -- Transposes the keys and values in an array. For example, {"a", "b", "c"} -> -- {a = 1, b = 2, c = 3}. Duplicates are not supported (result values refer to -- the index of the last duplicate) and NaN values are ignored. ------------------------------------------------------------------------------------ function p.invert(arr) checkType("invert", 1, arr, "table") local isNan = p.isNan local map = {} for i, v in ipairs(arr) do if not isNan(v) then map[v] = i end end return map end ------------------------------------------------------------------------------------ -- listToSet -- -- Creates a set from the array part of the table. Indexing the set by any of the -- values of the array returns true. For example, {"a", "b", "c"} -> -- {a = true, b = true, c = true}. NaN values are ignored as Lua considers them -- never equal to any value (including other NaNs or even themselves). ------------------------------------------------------------------------------------ function p.listToSet(arr) checkType("listToSet", 1, arr, "table") local isNan = p.isNan local set = {} for _, v in ipairs(arr) do if not isNan(v) then set[v] = true end end return set end ------------------------------------------------------------------------------------ -- deepCopy -- -- Recursive deep copy function. Preserves identities of subtables. ------------------------------------------------------------------------------------ local function _deepCopy(orig, includeMetatable, already_seen) -- Stores copies of tables indexed by the original table. already_seen = already_seen or {} local copy = already_seen[orig] if copy ~= nil then return copy end if type(orig) == 'table' then copy = {} for orig_key, orig_value in pairs(orig) do copy[_deepCopy(orig_key, includeMetatable, already_seen)] = _deepCopy(orig_value, includeMetatable, already_seen) end already_seen[orig] = copy if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then local mt_copy = _deepCopy(mt, includeMetatable, already_seen) setmetatable(copy, mt_copy) already_seen[mt] = mt_copy end end else -- number, string, boolean, etc copy = orig end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen) end ------------------------------------------------------------------------------------ -- sparseConcat -- -- Concatenates all values in the table that are indexed by a number, in order. -- sparseConcat{a, nil, c, d} => "acd" -- sparseConcat{nil, b, c, d} => "bcd" ------------------------------------------------------------------------------------ function p.sparseConcat(t, sep, i, j) local arr = {} local arr_i = 0 for _, v in p.sparseIpairs(t) do arr_i = arr_i + 1 arr[arr_i] = v end return table.concat(arr, sep, i, j) end ------------------------------------------------------------------------------------ -- length -- -- Finds the length of an array, or of a quasi-array with keys such as "data1", -- "data2", etc., using an exponential search algorithm. It is similar to the -- operator #, but may return a different value when there are gaps in the array -- portion of the table. Intended to be used on data loaded with mw.loadData. For -- other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of the number -- of unnamed template parameters, so use this function for frame.args. ------------------------------------------------------------------------------------ function p.length(t, prefix) -- requiring module inline so that [[Module:Exponential search]] which is -- only needed by this one function doesn't get millions of transclusions local expSearch = require("Module:Exponential search") checkType('length', 1, t, 'table') checkType('length', 2, prefix, 'string', true) return expSearch(function (i) local key if prefix then key = prefix .. tostring(i) else key = i end return t[key] ~= nil end) or 0 end ------------------------------------------------------------------------------------ -- inArray -- -- Returns true if valueToFind is a member of the array, and false otherwise. ------------------------------------------------------------------------------------ function p.inArray(arr, valueToFind) checkType("inArray", 1, arr, "table") -- if valueToFind is nil, error? for _, v in ipairs(arr) do if v == valueToFind then return true end end return false end return p 085e7094ac84eb0132ee65822cf3f69cd8ba3d81 Template:Pp-template 10 166 383 2022-02-09T03:21:43Z mw>Clump 0 Reverted edits by [[Special:Contribs/112.204.172.159|112.204.172.159]] ([[User talk:112.204.172.159|talk]]) to last version by Eyesnore wikitext text/x-wiki <includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}} |*=[[Category:Pages with incorrect protection templates]] |autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]] |sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]] }}</includeonly><noinclude> {{Documentation}} </noinclude> 1046e139e5a0380698fd75d7207e9ef53a4ff91d Template:Navbar 10 109 1321 234 2022-02-12T23:57:50Z mw>Shirayuki 0 new tvar syntax wikitext text/x-wiki <noinclude> <languages/> </noinclude><templatestyles src="Module:Navbar/styles.css"/><span class="noprint plainlinks navbar" style="{{{style|}}}"><small><!-- -->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else: --><span style="{{{fontstyle|}}}">{{#if:{{{text|}}}|{{{text}}}|<translate><!--T:1--> This box:</translate>}} </span>}}<!-- -->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">&#91;</span>}}<!-- --><span style="white-space:nowrap;word-spacing:-.12em;"><!-- -->[[{{transclude|{{{1}}}}}|<span style="{{{fontstyle|}}}" title="<translate nowrap><!--T:2--> View this template</translate>"><!-- -->{{#if:{{{mini|}}}|<translate><!--T:3--> v</translate>|<translate><!--T:4--> view</translate>}}</span>]]<!-- --><span style="{{{fontstyle|}}}">&#32;<b>&middot;</b>&#32;</span><!-- -->[{{fullurl:{{<noinclude><nowiki/></noinclude>TALKPAGENAME:{{transclude|{{{1}}}}}}}}} <span style="{{{fontstyle|}}}" title="<translate nowrap><!--T:9--> Discuss this template</translate>"><!-- -->{{#if:{{{mini|}}}|<translate><!--T:5--> d</translate>|<translate><!--T:6--> talk</translate>}}</span>]<!-- -->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else: --><span style="{{{fontstyle|}}}">&#32;<b>&middot;</b>&#32;</span><!-- -->[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} <span style="{{{fontstyle|}}}" title="<translate nowrap><!--T:10--> Edit this template</translate>"><!-- -->{{#if:{{{mini|}}}|<translate><!--T:7--> e</translate>|<translate><!--T:8--> edit</translate>}}</span>]}}<!-- --></span><!-- -->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">&#93;</span>}}<!-- --></small></span><noinclude> {{Documentation|content= {{Uses TemplateStyles|Module:Navbar/styles.css}} <translate> == Usage == <!--T:11--> === General === <!--T:12--> <!--T:13--> When one of the following examples is placed inside a given [[<tvar name=1>Special:MyLanguage/Help:Templates</tvar>|template]], it adds navbar navigational functionality: </translate> : {{tlx|Navbar|Navbar|mini{{=}}1}} : {{tlx|Navbar|Navbar|plain{{=}}1}} : {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}} <translate><!--T:14--> The <tvar name=1><code><nowiki>{{subst:PAGENAME}}</nowiki></code></tvar> will be substituted with the template's name when parsed by the servers.</translate> <translate><!--T:15--> For example, <tvar name=1>{{tlx|Navbar|navbar/doc}}</tvar> gives:</translate> {{Navbar|navbar/doc}} <translate> === Font-size === <!--T:16--> </translate> <translate><!--T:17--> Font-size is <tvar name=1><code>88%</code></tvar> when used in a navbar, and <tvar name=2><code>100%</code></tvar> when nested in a navbox.</translate> <translate><!--T:18--> In the navbar, the weight is "<tvar name=1><code>normal</code></tvar>"; when nested in navbox, it takes on the outer setting.</translate> <translate><!--T:19--> The middot is bold.</translate> <translate> == Examples == <!--T:20--> === Required parameters === <!--T:21--> </translate> * {{tlx|Navbar|''<translate><!--T:22--> template name</translate>''}} — <translate><!--T:23--> the template name is required.</translate> <translate> === Optional parameters === <!--T:24--> </translate> {{(}}{{!}} class="wikitable" ! <translate><!--T:25--> Options</translate> ! <translate><!--T:26--> Parameters</translate> ! <translate><!--T:27--> Produces...</translate> {{!}}- {{!}} <translate><!--T:28--> Basic</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:29--> template name</translate>''}} {{!}} {{navbar|navbar/doc}} {{!}}- {{!}} <translate><!--T:30--> Different text</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:31--> template name</translate>''|3=text{{=}}<translate><!--T:32--> This template:</translate>}} {{!}} {{navbar|navbar/doc|text=<translate><!--T:33--> This template:</translate>}} {{!}}- {{!}} <translate><!--T:34--> Without "This box:" text</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:35--> template name</translate>''|3=plain{{=}}1}} {{!}} {{navbar|navbar/doc|plain=1}} {{!}}- {{!}} <translate><!--T:36--> Short version</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:37--> template name</translate>''|3=mini{{=}}1}} {{!}} {{navbar|navbar/doc|mini=1}} {{!}}- {{!}} <translate><!--T:38--> With a color option</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:39--> template name</translate>''|3=fontstyle{{=}}color:green}} {{!}} {{navbar|navbar/doc|fontstyle=color:green}} {{!}}- {{!}} <translate><!--T:40--> With brackets</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:41--> template name</translate>''|3=brackets{{=}}1}} {{!}} {{navbar|navbar/doc|brackets=1}} {{!}}- {{!}} <translate><!--T:45--> Custom namespace</translate> {{!}} {{tlx|Navbar|2=''<translate><!--T:46--> namespaced template name</translate>''|3=plain{{=}}1|4=brackets{{=}}1}} {{!}} {{navbar|User:Example|plain=1|brackets=1}} {{!}}{{)}} == TemplateData == {{Navbar/doc}} <translate> == Notes == <!--T:42--> </translate> <translate><!--T:43--> Navbar is contained within a <tvar name=1>{{tag|div}}</tvar> in order to accommodate a horizontal unnumbered list.</translate> <translate><!--T:44--> This means it cannot be placed inside a <tvar name=1>{{tag|span}}</tvar> or other inline element, because Tidy will 'fix' situations where it finds block elements inside inline elements.</translate> <!--- PLEASE ADD METADATA TO THE <includeonly> SECTION HERE ---> <includeonly> [[Category:Formatting templates{{#translation:}}]] </includeonly> }} </noinclude> 5e5af5638e20e93d6f7d25d32f1e0d811b3b601f Module:Check for unknown parameters 828 76 160 2022-02-21T05:24:13Z wikipedia>BusterD 0 Changed protection settings for "[[Module:Check for unknown parameters]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) Scribunto text/plain -- This module may be used to compare the arguments passed to the parent -- with a list of arguments, returning a specified result if an argument is -- not on the list local p = {} local function trim(s) return s:match('^%s*(.-)%s*$') end local function isnotempty(s) return s and s:match('%S') end local function clean(text) -- Return text cleaned for display and truncated if too long. -- Strip markers are replaced with dummy text representing the original wikitext. local pos, truncated local function truncate(text) if truncated then return '' end if mw.ustring.len(text) > 25 then truncated = true text = mw.ustring.sub(text, 1, 25) .. '...' end return mw.text.nowiki(text) end local parts = {} for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do pos = remainder table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;') end table.insert(parts, truncate(text:sub(pos or 1))) return table.concat(parts) end function p._check(args, pargs) if type(args) ~= "table" or type(pargs) ~= "table" then -- TODO: error handling return end -- create the list of known args, regular expressions, and the return string local knownargs = {} local regexps = {} for k, v in pairs(args) do if type(k) == 'number' then v = trim(v) knownargs[v] = 1 elseif k:find('^regexp[1-9][0-9]*$') then table.insert(regexps, '^' .. v .. '$') end end -- loop over the parent args, and make sure they are on the list local ignoreblank = isnotempty(args['ignoreblank']) local showblankpos = isnotempty(args['showblankpositional']) local values = {} for k, v in pairs(pargs) do if type(k) == 'string' and knownargs[k] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(k, regexp) then knownflag = true break end end if not knownflag and ( not ignoreblank or isnotempty(v) ) then table.insert(values, clean(k)) end elseif type(k) == 'number' and knownargs[tostring(k)] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(tostring(k), regexp) then knownflag = true break end end if not knownflag and ( showblankpos or isnotempty(v) ) then table.insert(values, k .. ' = ' .. clean(v)) end end end -- add results to the output tables local res = {} if #values > 0 then local unknown_text = args['unknown'] or 'Found _VALUE_, ' if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then local preview_text = args['preview'] if isnotempty(preview_text) then preview_text = require('Module:If preview')._warning({preview_text}) elseif preview == nil then preview_text = unknown_text end unknown_text = preview_text end for _, v in pairs(values) do -- Fix odd bug for | = which gets stripped to the empty string and -- breaks category links if v == '' then v = ' ' end -- avoid error with v = 'example%2' ("invalid capture index") local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v}) table.insert(res, r) end end return table.concat(res) end function p.check(frame) local args = frame.args local pargs = frame:getParent().args return p._check(args, pargs) end return p 93db6d115d4328d2a5148bb42959105e367b663e Template:Tll 10 445 1339 2022-02-23T07:17:07Z mw>Shirayuki 0 wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Mono/styles.css"/><!-- -->{{#if:{{yesno|{{{nowrap|}}}}}<!-- -->|<templatestyles src="Template:Nowrap/styles.css"/><!-- -->}}<span class=" monospaced {{#if:{{yesno|{{{nowrap|}}}}}|nowrap}} "><!-- -->{{((}}<!-- --><includeonly>[[Special:MyLanguage/Template:{{{{{|safesubst:}}}ucfirst:{{{1}}}}}|{{{1}}}]]</includeonly><!-- --><noinclude>[[Special:MyLanguage/{{translatable}}|Template link localized]]</noinclude><!-- -->{{{{{|safesubst:}}}#ifeq:{{{2|}}}|{{{2}}}|{{!}}{{{2}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{3|}}}|{{{3}}}|{{!}}{{{3}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{4|}}}|{{{4}}}|{{!}}{{{4}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{5|}}}|{{{5}}}|{{!}}{{{5}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{6|}}}|{{{6}}}|{{!}}{{{6}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{7|}}}|{{{7}}}|{{!}}{{{7}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{8|}}}|{{{8}}}|{{!}}{{{8}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{9|}}}|{{{9}}}|{{!}}{{{9}}}}}<!-- -->{{))}}<!-- --></span><!-- --></onlyinclude> {{Documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> 590499106cdfec1fb3c1797e6cc6fc56946b3e0d Template:Magic word 10 412 1259 2022-02-23T07:21:33Z mw>Shirayuki 0 wikitext text/x-wiki <onlyinclude><!-- -->{{#ifexpr:<!-- -->{{yesno|{{{code|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!-- -->|<!-- -->{{#if:{{yesno|{{{mono|}}}}}|<templatestyles src="Template:Mono/styles.css"/>}}<!-- -->{{#if:{{yesno|{{{nowrap|}}}}}|<templatestyles src="Template:Nowrap/styles.css"/>}}<!-- --><{{#if:{{yesno|{{{code|}}}}}|code|span}} {{#ifexpr:<!-- -->{{yesno|{{{mono|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!-- -->|<!-- -->class="{{yesno|{{{mono|}}}|yes=monospaced|no=}} {{yesno|{{{nowrap|}}}|yes=nowrap|no=}}"<!-- -->}}><!-- -->}}<!-- -->{{((}}<!-- -->[[mw:Special:MyLanguage/{{#switch:{{{ext|}}}<!-- Extensions with public domain help page documentation: -->|Translate=Help:Extension:Translate<!-- -->{{#switch:{{{1}}}<!-- -->|#translation=/Page translation administration<!-- -->}}<!-- -->|ParserFunctions=Help:Extension:ParserFunctions<!-- Extensions with documentation in subpages of the “Extension:” namespace: -->|Page Forms=Extension:Page Forms<!-- -->{{#switch:{{{1}}}<!-- -->|#arraymap<!-- -->|#arraymaptemplate<!-- -->|#template_display<!-- -->|#template_params<!-- -->=/Page Forms and templates<!-- -->|#autoedit<!-- -->|#forminput<!-- -->|#formlink<!-- -->|#formredlink<!-- -->=/Linking to forms<!-- -->|#queryformlink<!-- -->=/Creating query forms<!-- -->|#default_form<!-- -->=/The "edit with form" tab<!-- -->}}<!-- Default page when `ext` is specified: -->|#default=Extension:{{{ext}}}<!-- Default page when `ext` is not specified: -->|=Help:Magic words<!-- -->}}<includeonly>#{{#ifeq:{{Str left|{{{1}}}}}|#<!-- Workaround bug which causes the leading `#`s in the fragment of a “Special:MyLanguage/...” link to be discarded: -->|.23{{Str right|{{{1}}}|1}}<!-- -->|{{{1}}}<!-- -->}}|{{{1}}}</includeonly><noinclude>|magic word</noinclude>]]<!-- -->{{#ifexpr:<!-- -->{{#ifeq:{{{2|¬}}}|{{{2}}}|1|0}}or{{#ifeq:{{Str left|{{{1}}}}}|#|1|0}}<!-- -->|&#58;{{{2|}}}<!-- -->}}<!-- -->{{))}}<!-- -->{{#ifexpr:<!-- -->{{yesno|{{{code|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!-- -->|</{{#if:{{yesno|{{{code|}}}}}|code|span}}><!-- -->}}<!-- --></onlyinclude> {{Documentation}} aa8986c941a5e9ac9ff1dd2876f7455839290bd4 Template:Tlx 10 35 69 2022-02-23T07:26:01Z mw>Shirayuki 0 wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Mono/styles.css"/><!-- -->{{#if:{{yesno|{{{nowrap|}}}}}<!-- -->|<templatestyles src="Template:Nowrap/styles.css"/><!-- -->}}<span class=" monospaced {{#if:{{yesno|{{{nowrap|}}}}}|nowrap}} "><!-- -->{{((}}<!-- --><noinclude>[[Template:Tlx|tlx]]</noinclude><!-- --><includeonly>[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:10}}}}:{{{1}}}|{{{1}}}]]</includeonly><!-- -->{{#if:{{{2|}}}|{{!}}{{{2}}}}}<!-- -->{{#if:{{{3|}}}|{{!}}{{{3}}}}}<!-- -->{{#if:{{{4|}}}|{{!}}{{{4}}}}}<!-- -->{{#if:{{{5|}}}|{{!}}{{{5}}}}}<!-- -->{{#if:{{{6|}}}|{{!}}{{{6}}}}}<!-- -->{{#if:{{{7|}}}|{{!}}{{{7}}}}}<!-- -->{{#if:{{{8|}}}|{{!}}''...''}}<!-- -->{{))}}<!-- --></span><!-- --></onlyinclude> {{documentation}} 25c4c72191d3dad2c3476ae6092c6c17ee3034d8 Template:Tlc 10 419 1275 2022-02-23T07:28:07Z mw>Shirayuki 0 wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Nowrap/styles.css"/><!-- --><code class="nowrap"><!-- -->{{((}}<!-- --><includeonly>{{{1}}}</includeonly><!-- --><noinclude>tlc{{!}}...</noinclude><!-- -->{{#ifeq:{{{2|x}}}|{{{2|}}}| {{!}}{{{2}}} | }}<!-- -->{{#ifeq:{{{3|x}}}|{{{3|}}}| {{!}}{{{3}}} | }}<!-- -->{{#ifeq:{{{4|x}}}|{{{4|}}}| {{!}}{{{4}}} | }}<!-- -->{{#ifeq:{{{5|x}}}|{{{5|}}}| {{!}}{{{5}}} | }}<!-- -->{{#ifeq:{{{6|x}}}|{{{6|}}}| {{!}}{{{6}}} | }}<!-- -->{{#ifeq:{{{7|x}}}|{{{7|}}}| {{!}}{{{7}}} | }}<!-- -->{{#ifeq:{{{8|x}}}|{{{8|}}}| {{!}}{{{8}}} | }}<!-- -->{{#ifeq:{{{9|x}}}|{{{9|}}}| {{!}}{{{9}}} | }}<!-- -->{{))}}<!-- --></code><!-- --></onlyinclude> {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> 587b3ef23459fe76a16b04d3770178ad99c11882 Module:Effective protection expiry 828 83 182 2022-02-23T10:59:29Z wikipedia>Xaosflux 0 Changed protection settings for "[[Module:Effective protection expiry]]": used in the mediawiki interface / match [[Module:Effective protection level]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) Scribunto text/plain local p = {} -- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) local title if type(pagename) == 'table' and pagename.prefixedText then title = pagename elseif pagename then title = mw.title.new(pagename) else title = mw.title.getCurrentTitle() end pagename = title.prefixedText if action == 'autoreview' then local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title) return stabilitySettings and stabilitySettings.expiry or 'unknown' elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 ) end local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename) if rawExpiry == 'infinity' then return 'infinity' elseif rawExpiry == '' then return 'unknown' else local year, month, day, hour, minute, second = rawExpiry:match( '^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$' ) if year then return string.format( '%s-%s-%sT%s:%s:%s', year, month, day, hour, minute, second ) else error('internal error in Module:Effective protection expiry; malformed expiry timestamp') end end end setmetatable(p, { __index = function(t, k) return function(frame) return t._main(k, frame.args[1]) end end }) return p 9a8c58dc2667232ed08a9b206a5d89ca8150312b Template:Tl 10 67 1329 136 2022-02-26T04:13:26Z mw>Shirayuki 0 wikitext text/x-wiki {{((}}[[Template:{{{1}}}|{{{1}}}]]{{))}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 1447a15b7ca7f93848d1ac4b792d61a1d8555e3b Template:Ns has subpages 10 73 152 2022-03-02T10:43:18Z wikipedia>Trialpears 0 Changed protection settings for "[[Template:Ns has subpages]]": [[WP:High-risk templates|Highly visible template]] ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 060d2d01af26cb67fd90a7c346a0d2d5e450a040 Module:Template link general 828 79 170 2022-03-08T08:30:51Z wikipedia>Primefac 0 update from sandbox - fixes to _show_result and adding _expand Scribunto text/plain -- This implements Template:Tlg local getArgs = require('Module:Arguments').getArgs local p = {} -- Is a string non-empty? local function _ne(s) return s ~= nil and s ~= "" end local nw = mw.text.nowiki local function addTemplate(s) local i, _ = s:find(':', 1, true) if i == nil then return 'Template:' .. s end local ns = s:sub(1, i - 1) if ns == '' or mw.site.namespaces[ns] then return s else return 'Template:' .. s end end local function trimTemplate(s) local needle = 'template:' if s:sub(1, needle:len()):lower() == needle then return s:sub(needle:len() + 1) else return s end end local function linkTitle(args) if _ne(args.nolink) then return args['1'] end local titleObj local titlePart = '[[' if args['1'] then -- This handles :Page and other NS titleObj = mw.title.new(args['1'], 'Template') else titleObj = mw.title.getCurrentTitle() end titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or addTemplate(args['1'])) local textPart = args.alttext if not _ne(textPart) then if titleObj ~= nil then textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText else -- redlink textPart = args['1'] end end if _ne(args.subst) then -- HACK: the ns thing above is probably broken textPart = 'subst:' .. textPart end if _ne(args.brace) then textPart = nw('{{') .. textPart .. nw('}}') elseif _ne(args.braceinside) then textPart = nw('{') .. textPart .. nw('}') end titlePart = titlePart .. '|' .. textPart .. ']]' if _ne(args.braceinside) then titlePart = nw('{') .. titlePart .. nw('}') end return titlePart end function p.main(frame) local args = getArgs(frame, { trim = true, removeBlanks = false }) return p._main(args) end function p._main(args) local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname) local italic = _ne(args.italic) or _ne(args.italics) local dontBrace = _ne(args.brace) or _ne(args.braceinside) local code = _ne(args.code) or _ne(args.tt) local show_result = _ne(args._show_result) local expand = _ne(args._expand) -- Build the link part local titlePart = linkTitle(args) if bold then titlePart = "'''" .. titlePart .. "'''" end if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end -- Build the arguments local textPart = "" local textPartBuffer = "&#124;" local codeArguments = {} local codeArgumentsString = "" local i = 2 local j = 1 while args[i] do local val = args[i] if val ~= "" then if _ne(args.nowiki) then -- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will -- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up val = nw(mw.text.unstripNoWiki(val)) end local k, v = string.match(val, "(.*)=(.*)") if not k then codeArguments[j] = val j = j + 1 else codeArguments[k] = v end codeArgumentsString = codeArgumentsString .. textPartBuffer .. val if italic then val = '<span style="font-style:italic;">' .. val .. '</span>' end textPart = textPart .. textPartBuffer .. val end i = i + 1 end -- final wrap local ret = titlePart .. textPart if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end if _ne(args.a) then ret = nw('*') .. '&nbsp;' .. ret end if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end if code then ret = '<code>' .. ret .. '</code>' elseif _ne(args.plaincode) then ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>' end if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end --[[ Wrap as html?? local span = mw.html.create('span') span:wikitext(ret) --]] if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end if show_result then local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments} ret = ret .. " → " .. result end if expand then local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}') local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query) mw.log() ret = ret .. " [" .. tostring(url) .. "]" end return ret end return p c7307fa3959d308a2dd7fd2f5009c1ce6db3d122 Template:Lit 10 257 738 2022-04-03T17:59:39Z wikipedia>MusikBot II 0 Changed protection settings for "[[Template:Lit]]": [[Wikipedia:High-risk templates|High-risk template or module]]: 2502 transclusions ([[User:MusikBot II/TemplateProtector|more info]]) ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite)) wikitext text/x-wiki #REDIRECT [[Template:Literal translation]] 38b4e908291ac0a1fa8482ed0f8d5631c6a213e6 Template:Translatable 10 403 1239 2022-05-07T02:53:36Z mw>Shirayuki 0 simplify wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}| |{{{1|{{FULLPAGENAME}}}}} |{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}} |1 |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}} }} }}<noinclude> {{Documentation|content= {{Lua|Module:String}} <translate> == Examples == <!--T:1--> </translate> * {{tlx|translatable}} {{translatable}} * {{tlx|translatable|2=<translate><!--T:2--> Page name</translate>}} {{translatable|1=<translate><!--T:3--> Page name</translate>}} * {{tlx|translatable|2=<translate><!--T:4--> Page name</translate>/{{PAGELANGUAGE}} }} {{translatable|1=<translate><!--T:5--> Page name</translate>/{{PAGELANGUAGE}} }} }} [[Category:Internationalization templates{{#translation:}}]] </noinclude> 76f8f4907f2c12144291f6adc98a40cc2cc4061f Template:Translatable/en 10 410 1255 2022-05-07T02:55:05Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}| |{{{1|{{FULLPAGENAME}}}}} |{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}} |1 |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}} }} }}<noinclude> {{Documentation|content= {{Lua|Module:String}} == Examples == * {{tlx|translatable}} {{translatable}} * {{tlx|translatable|2=Page name}} {{translatable|1=Page name}} * {{tlx|translatable|2=Page name/{{PAGELANGUAGE}} }} {{translatable|1=Page name/{{PAGELANGUAGE}} }} }} [[Category:Internationalization templates{{#translation:}}]] </noinclude> 7fee927d686a6bf590db77885cbef8376112670f Template:Module rating 10 196 554 2022-06-03T15:10:23Z wikipedia>The Anome 0 Reverted edits by [[Special:Contribs/Dawn PScLim|Dawn PScLim]] ([[User talk:Dawn PScLim|talk]]) to last version by Alexis Jazz wikitext text/x-wiki <includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox | type = notice | image = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]] | alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]] | beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]] | release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]] | protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]] | semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]] }} | style = | textstyle = | text = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }} }} | alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }} }} | beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }} }} | release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }} }} | protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | #default = {{error|Module rating is invalid or not specified.}} }} }}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude> {{module rating|release|nocat=true|demospace=module}} {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go in Wikidata. --> </noinclude> bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc Template:T 10 185 531 2022-06-05T04:09:28Z wikipedia>Dinoguy1000 0 not that it matters much, but fix comment closing wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Rcat shell| {{R from template shortcut}} }} <!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta --> bb10dbc83695404528dbc095ea267429142c7f05 Module:Labelled list hatnote 828 90 196 2022-06-08T23:33:35Z wikipedia>Nihiltres 0 Fixed iteration-and-removal bug Scribunto text/plain -------------------------------------------------------------------------------- -- Labelled list -- -- -- -- This module does the core work of creating a hatnote composed of a list -- -- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", -- -- for {{see also}} and similar templates. -- -------------------------------------------------------------------------------- local mHatnote = require('Module:Hatnote') local mHatlist = require('Module:Hatnote list') local mArguments --initialize lazily local yesno --initialize lazily local p = {} -- Defaults global to this module local defaults = { label = 'See also', --Final fallback for label argument labelForm = '%s: %s', prefixes = {'label', 'label ', 'l'}, template = 'Module:Labelled list hatnote' } -- Localizable message strings local msg = { errorSuffix = '#Errors', noInputWarning = 'no page names specified', noOutputWarning = "'''[[%s]] — no output: none of the target pages exist.'''" } -- Helper function that pre-combines display parameters into page arguments. -- Also compresses sparse arrays, as a desirable side-effect. function p.preprocessDisplays (args, prefixes) -- Prefixes specify which parameters, in order, to check for display options -- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1' prefixes = prefixes or defaults.prefixes local indices = {} local sparsePages = {} for k, v in pairs(args) do if type(k) == 'number' then indices[#indices + 1] = k local display for i = 1, #prefixes do display = args[prefixes[i] .. k] if display then break end end sparsePages[k] = display and string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v end end table.sort(indices) local pages = {} for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end return pages end --Helper function to get a page target from a processed page string --e.g. "Page|Label" → "Page" or "Target" → "Target" local function getTarget(pagename) local pipe = string.find(pagename, '|') return string.sub(pagename, 0, pipe and pipe - 1 or nil) end -- Produces a labelled pages-list hatnote. -- The main frame (template definition) takes 1 or 2 arguments, for a singular -- and (optionally) plural label respectively: -- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}} -- The resulting template takes pagename & label parameters normally. function p.labelledList (frame) mArguments = require('Module:Arguments') yesno = require('Module:Yesno') local labels = {frame.args[1] or defaults.label} labels[2] = frame.args[2] or labels[1] labels[3] = frame.args[3] --no defaulting labels[4] = frame.args[4] --no defaulting local template = frame:getParent():getTitle() local args = mArguments.getArgs(frame, {parentOnly = true}) local pages = p.preprocessDisplays(args) local options = { category = yesno(args.category), extraclasses = frame.args.extraclasses, ifexists = yesno(frame.args.ifexists), namespace = frame.args.namespace or args.namespace, selfref = yesno(frame.args.selfref or args.selfref), template = template } return p._labelledList(pages, labels, options) end function p._labelledList (pages, labels, options) if options.ifexists then for k = #pages, 1, -1 do --iterate backwards to allow smooth removals local v = pages[k] local title = mw.title.new(getTarget(v), namespace) if (v == '') or title == nil or not title.exists then table.remove(pages, k) end end end labels = labels or {} label = (#pages == 1 and labels[1] or labels[2]) or defaults.label for k, v in pairs(pages) do if mHatnote.findNamespaceId(v) ~= 0 then label = ( #pages == 1 and (labels[3] or labels[1] or defaults.label) or (labels[4] or labels[2] or defaults.label) ) or defaults.label end end if #pages == 0 then if options.ifexists then mw.addWarning( string.format( msg.noOutputWarning, options.template or defaults.template ) ) return '' else return mHatnote.makeWikitextError( msg.noInputWarning, (options.template or defaults.template) .. msg.errorSuffix, options.category ) end end local text = string.format( options.labelForm or defaults.labelForm, label, mHatlist.andList(pages, true) ) local hnOptions = { extraclasses = options.extraclasses, selfref = options.selfref } return mHatnote._hatnote(text, hnOptions) end return p b7a8ba27cf6195e6427701b94e8d2acad3c40a21 Template:Clear 10 80 174 2022-06-13T15:31:11Z wikipedia>Xaosflux 0 Changed protection settings for "[[Template:Clear]]": [[WP:High-risk templates|Highly visible template]]: 3MM+ uses ([Edit=Require administrator access] (indefinite) [Move=Require administrator access] (indefinite)) wikitext text/x-wiki <div style="clear:{{{1|both}}};"></div><noinclude> {{documentation}} </noinclude> 38bab3e3d7fbd3d6800d46556e60bc6bac494d72 Template:Tim 10 164 377 2022-06-23T08:07:13Z mw>Mtarch11 0 Reverted edits by [[Special:Contribs/118.148.83.155|118.148.83.155]] ([[User talk:118.148.83.155|talk]]) to last version by Damenleeturks wikitext text/x-wiki [[m:Template:{{{1|{{PAGENAME}}}}}]]<noinclude> {{documentation|content= Displays a link to a template on Meta. * {{xpds|tim|foo}} [[Category:Shortcut templates|{{PAGENAME}}]] [[Category:External link templates]]}}</noinclude> 2bed05d802e6f826c40c07ef66c9e0df72d4028d Module:Message box/configuration 828 14 142 27 2022-07-11T18:19:26Z wikipedia>Izno 0 add templatestyles, remove a variable or two as a result Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[Module:Message box]]. -- -------------------------------------------------------------------------------- return { ambox = { types = { speedy = { class = 'ambox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'ambox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'ambox-content', image = 'Ambox important.svg' }, style = { class = 'ambox-style', image = 'Edit-clear.svg' }, move = { class = 'ambox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ambox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ambox-notice', image = 'Information icon4.svg' } }, default = 'notice', allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'}, allowSmall = true, smallParam = 'left', smallClass = 'mbox-small-left', substCheck = true, classes = {'metadata', 'ambox'}, imageEmptyCell = true, imageCheckBlank = true, imageSmallSize = '20x20px', imageCellDiv = true, useCollapsibleTextFields = true, imageRightNone = true, sectionDefault = 'article', allowMainspaceCategories = true, templateCategory = 'Article message templates', templateCategoryRequireName = true, templateErrorCategory = 'Article message templates with missing parameters', templateErrorParamsToCheck = {'issue', 'fix', 'subst'}, removalNotice = '<small>[[Help:Maintenance template removal|Learn how and when to remove this template message]]</small>', templatestyles = 'Module:Message box/ambox.css' }, cmbox = { types = { speedy = { class = 'cmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'cmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'cmbox-content', image = 'Ambox important.svg' }, style = { class = 'cmbox-style', image = 'Edit-clear.svg' }, move = { class = 'cmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'cmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'cmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'cmbox'}, imageEmptyCell = true, templatestyles = 'Module:Message box/cmbox.css' }, fmbox = { types = { warning = { class = 'fmbox-warning', image = 'Ambox warning pn.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'Information icon4.svg' }, system = { class = 'fmbox-system', image = 'Information icon4.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'fmbox'}, imageEmptyCell = false, imageRightNone = false, templatestyles = 'Module:Message box/fmbox.css' }, imbox = { types = { speedy = { class = 'imbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'imbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'imbox-content', image = 'Ambox important.svg' }, style = { class = 'imbox-style', image = 'Edit-clear.svg' }, move = { class = 'imbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'imbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, license = { class = 'imbox-license licensetpl', image = 'Imbox license.png' -- @todo We need an SVG version of this }, featured = { class = 'imbox-featured', image = 'Cscr-featured.svg' }, notice = { class = 'imbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'imbox'}, imageEmptyCell = true, below = true, templateCategory = 'File message boxes', templatestyles = 'Module:Message box/imbox.css' }, ombox = { types = { speedy = { class = 'ombox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'ombox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'ombox-content', image = 'Ambox important.svg' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ombox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ombox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'ombox'}, allowSmall = true, imageEmptyCell = true, imageRightNone = true, templatestyles = 'Module:Message box/ombox.css' }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'Ambox warning pn.svg' }, delete = { class = 'tmbox-delete', image = 'Ambox warning pn.svg' }, content = { class = 'tmbox-content', image = 'Ambox important.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'Information icon4.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, templateCategory = 'Talk message boxes', templatestyles = 'Module:Message box/tmbox.css' } } b6f0151037e6867b577c8cca32ff297e48697a10 Module:Message box/ombox.css 828 33 302 65 2022-07-11T18:40:17Z wikipedia>Izno 0 and move mbox-small to 720px here as well sanitized-css text/css /* {{pp|small=y}} */ .ombox { margin: 4px 0; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" gray */ background-color: #f8f9fa; box-sizing: border-box; } /* For the "small=yes" option. */ .ombox.mbox-small { font-size: 88%; line-height: 1.25em; } .ombox-speedy { border: 2px solid #b32424; /* Red */ background-color: #fee7e6; /* Pink */ } .ombox-delete { border: 2px solid #b32424; /* Red */ } .ombox-content { border: 1px solid #f28500; /* Orange */ } .ombox-style { border: 1px solid #fc3; /* Yellow */ } .ombox-move { border: 1px solid #9932cc; /* Purple */ } .ombox-protection { border: 2px solid #a2a9b1; /* Gray-gold */ } .ombox .mbox-text { border: none; /* @noflip */ padding: 0.25em 0.9em; width: 100%; } .ombox .mbox-image { border: none; /* @noflip */ padding: 2px 0 2px 0.9em; text-align: center; } .ombox .mbox-imageright { border: none; /* @noflip */ padding: 2px 0.9em 2px 0; text-align: center; } /* An empty narrow cell */ .ombox .mbox-empty-cell { border: none; padding: 0; width: 1px; } .ombox .mbox-invalid-type { text-align: center; } @media (min-width: 720px) { .ombox { margin: 4px 10%; } .ombox.mbox-small { /* @noflip */ clear: right; /* @noflip */ float: right; /* @noflip */ margin: 4px 0 4px 1em; width: 238px; } } 8fe3df4bb607e699eab2dbd23bd4a1a446391002 Template:IsDocSubpage 10 20 39 2022-07-13T12:02:25Z mw>Tacsipacsi 0 use {{#translation:}}—it handles manual translations as well wikitext text/x-wiki <onlyinclude><includeonly>{{#ifexpr: ( {{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{override|doc}}}}}|1|0}} or ( {{#ifeq:{{lc:{{#titleparts:{{FULLPAGENAME}}|-1|-2}}}}|{{lc:{{{override|doc}}}}}|1|0}} and {{#if:{{#translation:}}|1|0}} ) )<!-- -->|{{{true|1}}}<!-- -->|{{{false|}}}<!-- -->}}</includeonly></onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 47b5d5a2fb89240a721f8874924170f791de93b2 Template:Para 10 108 232 2022-07-22T08:06:17Z wikipedia>TheDJ 0 breakup super long words, so we do not overflow the viewport. wikitext text/x-wiki <code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">&#124;{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}&#61;}}{{{2|}}}</code><noinclude> {{Documentation}} <!--Categories and interwikis go near the bottom of the /doc subpage.--> </noinclude> 06006deea2ed5d552aab61b4332321ab749ae7e8 Template:Collapse bottom 10 151 349 2022-08-21T18:03:39Z wikipedia>MSGJ 0 Undid revision 1105766128 by [[Special:Contributions/MSGJ|MSGJ]] ([[User talk:MSGJ|talk]]) - did not work wikitext text/x-wiki <includeonly>|}</div></includeonly><noinclude> {{Documentation|Template:Collapse top/doc}} <!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --> </noinclude> 64b210e8ab0882b262da50e9fbccf2132bc34fab Module:Hatnote 828 87 190 2022-09-05T18:18:32Z wikipedia>Nihiltres 0 Reordered helper functions (first by export status, then alphabetically) and migrated p.quote upstream from [[Module:Redirect hatnote]] (includes contributions by Tamzin and Nihiltres) Scribunto text/plain -------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the {{hatnote}} and {{format link}} meta-templates and includes -- -- helper functions for other Lua hatnote modules. -- -------------------------------------------------------------------------------- local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg local mArguments -- lazily initialise [[Module:Arguments]] local yesno -- lazily initialise [[Module:Yesno]] local formatLink -- lazily initialise [[Module:Format link]] ._formatLink local p = {} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end function p.defaultClasses(inline) -- Provides the default hatnote classes as a space-separated string; useful -- for hatnote-manipulation modules like [[Module:Hatnote group]]. return (inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' .. 'navigation-not-searchable' end function p.disambiguate(page, disambiguator) -- Formats a page title with a disambiguation parenthetical, -- i.e. "Example" → "Example (disambiguation)". checkType('disambiguate', 1, page, 'string') checkType('disambiguate', 2, disambiguator, 'string', true) disambiguator = disambiguator or 'disambiguation' return mw.ustring.format('%s (%s)', page, disambiguator) end function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to false. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end function p.makeWikitextError(msg, helpLink, addTrackingCategory, title) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- [[Module:Yesno]], and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') title = title or mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' ([[' .. helpLink .. '|help]])' else helpText = '' end -- Make the category text. local category if not title.isTalkPage -- Don't categorise talk pages and title.namespace ~= 2 -- Don't categorise userspace and yesno(addTrackingCategory) ~= false -- Allow opting out then category = 'Hatnote templates with errors' category = mw.ustring.format( '[[%s:%s]]', mw.site.namespaces[14].name, category ) else category = '' end return mw.ustring.format( '<strong class="error">Error: %s%s.</strong>%s', msg, helpText, category ) end local curNs = mw.title.getCurrentTitle().namespace p.missingTargetCat = --Default missing target category, exported for use in related modules ((curNs == 0) or (curNs == 14)) and 'Articles with hatnote templates targeting a nonexistent page' or nil function p.quote(title) --Wraps titles in quotation marks. If the title starts/ends with a quotation --mark, kerns that side as with {{-'}} local quotationMarks = { ["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true } local quoteLeft, quoteRight = -- Test if start/end are quotation marks quotationMarks[string.sub(title, 1, 1)], quotationMarks[string.sub(title, -1, -1)] if quoteLeft or quoteRight then title = mw.html.create("span"):wikitext(title) end if quoteLeft then title:css("padding-left", "0.15em") end if quoteRight then title:css("padding-right", "0.15em") end return '"' .. tostring(title) .. '"' end -------------------------------------------------------------------------------- -- Hatnote -- -- Produces standard hatnote text. Implements the {{hatnote}} template. -------------------------------------------------------------------------------- function p.hatnote(frame) local args = getArgs(frame) local s = args[1] if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end return p._hatnote(s, { extraclasses = args.extraclasses, selfref = args.selfref }) end function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) options = options or {} local inline = options.inline local hatnote = mw.html.create(inline == 1 and 'span' or 'div') local extraclasses if type(options.extraclasses) == 'string' then extraclasses = options.extraclasses end hatnote :attr('role', 'note') :addClass(p.defaultClasses(inline)) :addClass(extraclasses) :addClass(options.selfref and 'selfref' or nil) :wikitext(s) return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' } } .. tostring(hatnote) end return p 3ae1ed7094c5005ca0896395ec9a587287a0bef1 Module:Unicode data/scripts 828 249 722 2022-09-28T15:04:27Z wikipedia>Drmccreedy 0 Revert script name Nko back to NKo per request Scribunto text/plain --[=[ -- Official Unicode script values for individual codepoints and ranges of -- codepoints. -- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided -- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt -- provided script codes corresponding to the names (see [[Script (Unicode)]]). --]=] local data = { singles = { [0x000AA] = "Latn", [0x000BA] = "Latn", [0x000D7] = "Zyyy", [0x000F7] = "Zyyy", [0x00374] = "Zyyy", [0x0037E] = "Zyyy", [0x0037F] = "Grek", [0x00384] = "Grek", [0x00385] = "Zyyy", [0x00386] = "Grek", [0x00387] = "Zyyy", [0x0038C] = "Grek", [0x00605] = "Zyyy", [0x0060C] = "Zyyy", [0x0061B] = "Zyyy", [0x0061F] = "Zyyy", [0x00640] = "Zyyy", [0x00670] = "Zinh", [0x006DD] = "Zyyy", [0x0085E] = "Mand", [0x008E2] = "Zyyy", [0x009B2] = "Beng", [0x009D7] = "Beng", [0x00A3C] = "Guru", [0x00A51] = "Guru", [0x00A5E] = "Guru", [0x00AD0] = "Gujr", [0x00B9C] = "Taml", [0x00BD0] = "Taml", [0x00BD7] = "Taml", [0x00C5D] = "Telu", [0x00DBD] = "Sinh", [0x00DCA] = "Sinh", [0x00DD6] = "Sinh", [0x00E3F] = "Zyyy", [0x00E84] = "Laoo", [0x00EA5] = "Laoo", [0x00EC6] = "Laoo", [0x010C7] = "Geor", [0x010CD] = "Geor", [0x010FB] = "Zyyy", [0x01258] = "Ethi", [0x012C0] = "Ethi", [0x0171F] = "Tglg", [0x01804] = "Mong", [0x01805] = "Zyyy", [0x01940] = "Limb", [0x01CD3] = "Zyyy", [0x01CE1] = "Zyyy", [0x01CED] = "Zinh", [0x01CF4] = "Zinh", [0x01CFA] = "Zyyy", [0x01D2B] = "Cyrl", [0x01D78] = "Cyrl", [0x01DBF] = "Grek", [0x01F59] = "Grek", [0x01F5B] = "Grek", [0x01F5D] = "Grek", [0x02071] = "Latn", [0x0207F] = "Latn", [0x02126] = "Grek", [0x02132] = "Latn", [0x0214E] = "Latn", [0x02D27] = "Geor", [0x02D2D] = "Geor", [0x02D7F] = "Tfng", [0x03005] = "Hani", [0x03006] = "Zyyy", [0x03007] = "Hani", [0x030A0] = "Zyyy", [0x032FF] = "Zyyy", [0x0A7D3] = "Latn", [0x0A92E] = "Zyyy", [0x0A92F] = "Kali", [0x0A95F] = "Rjng", [0x0A9CF] = "Zyyy", [0x0AB5B] = "Zyyy", [0x0AB65] = "Grek", [0x0FB3E] = "Hebr", [0x0FDCF] = "Arab", [0x0FEFF] = "Zyyy", [0x0FF70] = "Zyyy", [0x101A0] = "Grek", [0x101FD] = "Zinh", [0x102E0] = "Zinh", [0x1039F] = "Ugar", [0x1056F] = "Aghb", [0x10808] = "Cprt", [0x1083C] = "Cprt", [0x1083F] = "Cprt", [0x1091F] = "Phnx", [0x1093F] = "Lydi", [0x1107F] = "Brah", [0x110CD] = "Kthi", [0x11288] = "Mult", [0x1133B] = "Zinh", [0x11350] = "Gran", [0x11357] = "Gran", [0x118FF] = "Wara", [0x11909] = "Diak", [0x11D3A] = "Gonm", [0x11FB0] = "Lisu", [0x11FFF] = "Taml", [0x16FE0] = "Tang", [0x16FE1] = "Nshu", [0x16FE4] = "Kits", [0x1B000] = "Kana", [0x1B132] = "Hira", [0x1B155] = "Kana", [0x1D4A2] = "Zyyy", [0x1D4BB] = "Zyyy", [0x1D546] = "Zyyy", [0x1E08F] = "Cyrl", [0x1E2FF] = "Wcho", [0x1EE24] = "Arab", [0x1EE27] = "Arab", [0x1EE39] = "Arab", [0x1EE3B] = "Arab", [0x1EE42] = "Arab", [0x1EE47] = "Arab", [0x1EE49] = "Arab", [0x1EE4B] = "Arab", [0x1EE54] = "Arab", [0x1EE57] = "Arab", [0x1EE59] = "Arab", [0x1EE5B] = "Arab", [0x1EE5D] = "Arab", [0x1EE5F] = "Arab", [0x1EE64] = "Arab", [0x1EE7E] = "Arab", [0x1F200] = "Hira", [0x1F7F0] = "Zyyy", [0xE0001] = "Zyyy", }, ranges = { { 0x00000, 0x00040, "Zyyy" }, { 0x00041, 0x0005A, "Latn" }, { 0x0005B, 0x00060, "Zyyy" }, { 0x00061, 0x0007A, "Latn" }, { 0x0007B, 0x000A9, "Zyyy" }, { 0x000AB, 0x000B9, "Zyyy" }, { 0x000BB, 0x000BF, "Zyyy" }, { 0x000C0, 0x000D6, "Latn" }, { 0x000D8, 0x000F6, "Latn" }, { 0x000F8, 0x002B8, "Latn" }, { 0x002B9, 0x002DF, "Zyyy" }, { 0x002E0, 0x002E4, "Latn" }, { 0x002E5, 0x002E9, "Zyyy" }, { 0x002EA, 0x002EB, "Bopo" }, { 0x002EC, 0x002FF, "Zyyy" }, { 0x00300, 0x0036F, "Zinh" }, { 0x00370, 0x00373, "Grek" }, { 0x00375, 0x00377, "Grek" }, { 0x0037A, 0x0037D, "Grek" }, { 0x00388, 0x0038A, "Grek" }, { 0x0038E, 0x003A1, "Grek" }, { 0x003A3, 0x003E1, "Grek" }, { 0x003E2, 0x003EF, "Copt" }, { 0x003F0, 0x003FF, "Grek" }, { 0x00400, 0x00484, "Cyrl" }, { 0x00485, 0x00486, "Zinh" }, { 0x00487, 0x0052F, "Cyrl" }, { 0x00531, 0x00556, "Armn" }, { 0x00559, 0x0058A, "Armn" }, { 0x0058D, 0x0058F, "Armn" }, { 0x00591, 0x005C7, "Hebr" }, { 0x005D0, 0x005EA, "Hebr" }, { 0x005EF, 0x005F4, "Hebr" }, { 0x00600, 0x00604, "Arab" }, { 0x00606, 0x0060B, "Arab" }, { 0x0060D, 0x0061A, "Arab" }, { 0x0061C, 0x0061E, "Arab" }, { 0x00620, 0x0063F, "Arab" }, { 0x00641, 0x0064A, "Arab" }, { 0x0064B, 0x00655, "Zinh" }, { 0x00656, 0x0066F, "Arab" }, { 0x00671, 0x006DC, "Arab" }, { 0x006DE, 0x006FF, "Arab" }, { 0x00700, 0x0070D, "Syrc" }, { 0x0070F, 0x0074A, "Syrc" }, { 0x0074D, 0x0074F, "Syrc" }, { 0x00750, 0x0077F, "Arab" }, { 0x00780, 0x007B1, "Thaa" }, { 0x007C0, 0x007FA, "Nkoo" }, { 0x007FD, 0x007FF, "Nkoo" }, { 0x00800, 0x0082D, "Samr" }, { 0x00830, 0x0083E, "Samr" }, { 0x00840, 0x0085B, "Mand" }, { 0x00860, 0x0086A, "Syrc" }, { 0x00870, 0x0088E, "Arab" }, { 0x00890, 0x00891, "Arab" }, { 0x00898, 0x008E1, "Arab" }, { 0x008E3, 0x008FF, "Arab" }, { 0x00900, 0x00950, "Deva" }, { 0x00951, 0x00954, "Zinh" }, { 0x00955, 0x00963, "Deva" }, { 0x00964, 0x00965, "Zyyy" }, { 0x00966, 0x0097F, "Deva" }, { 0x00980, 0x00983, "Beng" }, { 0x00985, 0x0098C, "Beng" }, { 0x0098F, 0x00990, "Beng" }, { 0x00993, 0x009A8, "Beng" }, { 0x009AA, 0x009B0, "Beng" }, { 0x009B6, 0x009B9, "Beng" }, { 0x009BC, 0x009C4, "Beng" }, { 0x009C7, 0x009C8, "Beng" }, { 0x009CB, 0x009CE, "Beng" }, { 0x009DC, 0x009DD, "Beng" }, { 0x009DF, 0x009E3, "Beng" }, { 0x009E6, 0x009FE, "Beng" }, { 0x00A01, 0x00A03, "Guru" }, { 0x00A05, 0x00A0A, "Guru" }, { 0x00A0F, 0x00A10, "Guru" }, { 0x00A13, 0x00A28, "Guru" }, { 0x00A2A, 0x00A30, "Guru" }, { 0x00A32, 0x00A33, "Guru" }, { 0x00A35, 0x00A36, "Guru" }, { 0x00A38, 0x00A39, "Guru" }, { 0x00A3E, 0x00A42, "Guru" }, { 0x00A47, 0x00A48, "Guru" }, { 0x00A4B, 0x00A4D, "Guru" }, { 0x00A59, 0x00A5C, "Guru" }, { 0x00A66, 0x00A76, "Guru" }, { 0x00A81, 0x00A83, "Gujr" }, { 0x00A85, 0x00A8D, "Gujr" }, { 0x00A8F, 0x00A91, "Gujr" }, { 0x00A93, 0x00AA8, "Gujr" }, { 0x00AAA, 0x00AB0, "Gujr" }, { 0x00AB2, 0x00AB3, "Gujr" }, { 0x00AB5, 0x00AB9, "Gujr" }, { 0x00ABC, 0x00AC5, "Gujr" }, { 0x00AC7, 0x00AC9, "Gujr" }, { 0x00ACB, 0x00ACD, "Gujr" }, { 0x00AE0, 0x00AE3, "Gujr" }, { 0x00AE6, 0x00AF1, "Gujr" }, { 0x00AF9, 0x00AFF, "Gujr" }, { 0x00B01, 0x00B03, "Orya" }, { 0x00B05, 0x00B0C, "Orya" }, { 0x00B0F, 0x00B10, "Orya" }, { 0x00B13, 0x00B28, "Orya" }, { 0x00B2A, 0x00B30, "Orya" }, { 0x00B32, 0x00B33, "Orya" }, { 0x00B35, 0x00B39, "Orya" }, { 0x00B3C, 0x00B44, "Orya" }, { 0x00B47, 0x00B48, "Orya" }, { 0x00B4B, 0x00B4D, "Orya" }, { 0x00B55, 0x00B57, "Orya" }, { 0x00B5C, 0x00B5D, "Orya" }, { 0x00B5F, 0x00B63, "Orya" }, { 0x00B66, 0x00B77, "Orya" }, { 0x00B82, 0x00B83, "Taml" }, { 0x00B85, 0x00B8A, "Taml" }, { 0x00B8E, 0x00B90, "Taml" }, { 0x00B92, 0x00B95, "Taml" }, { 0x00B99, 0x00B9A, "Taml" }, { 0x00B9E, 0x00B9F, "Taml" }, { 0x00BA3, 0x00BA4, "Taml" }, { 0x00BA8, 0x00BAA, "Taml" }, { 0x00BAE, 0x00BB9, "Taml" }, { 0x00BBE, 0x00BC2, "Taml" }, { 0x00BC6, 0x00BC8, "Taml" }, { 0x00BCA, 0x00BCD, "Taml" }, { 0x00BE6, 0x00BFA, "Taml" }, { 0x00C00, 0x00C0C, "Telu" }, { 0x00C0E, 0x00C10, "Telu" }, { 0x00C12, 0x00C28, "Telu" }, { 0x00C2A, 0x00C39, "Telu" }, { 0x00C3C, 0x00C44, "Telu" }, { 0x00C46, 0x00C48, "Telu" }, { 0x00C4A, 0x00C4D, "Telu" }, { 0x00C55, 0x00C56, "Telu" }, { 0x00C58, 0x00C5A, "Telu" }, { 0x00C60, 0x00C63, "Telu" }, { 0x00C66, 0x00C6F, "Telu" }, { 0x00C77, 0x00C7F, "Telu" }, { 0x00C80, 0x00C8C, "Knda" }, { 0x00C8E, 0x00C90, "Knda" }, { 0x00C92, 0x00CA8, "Knda" }, { 0x00CAA, 0x00CB3, "Knda" }, { 0x00CB5, 0x00CB9, "Knda" }, { 0x00CBC, 0x00CC4, "Knda" }, { 0x00CC6, 0x00CC8, "Knda" }, { 0x00CCA, 0x00CCD, "Knda" }, { 0x00CD5, 0x00CD6, "Knda" }, { 0x00CDD, 0x00CDE, "Knda" }, { 0x00CE0, 0x00CE3, "Knda" }, { 0x00CE6, 0x00CEF, "Knda" }, { 0x00CF1, 0x00CF3, "Knda" }, { 0x00D00, 0x00D0C, "Mlym" }, { 0x00D0E, 0x00D10, "Mlym" }, { 0x00D12, 0x00D44, "Mlym" }, { 0x00D46, 0x00D48, "Mlym" }, { 0x00D4A, 0x00D4F, "Mlym" }, { 0x00D54, 0x00D63, "Mlym" }, { 0x00D66, 0x00D7F, "Mlym" }, { 0x00D81, 0x00D83, "Sinh" }, { 0x00D85, 0x00D96, "Sinh" }, { 0x00D9A, 0x00DB1, "Sinh" }, { 0x00DB3, 0x00DBB, "Sinh" }, { 0x00DC0, 0x00DC6, "Sinh" }, { 0x00DCF, 0x00DD4, "Sinh" }, { 0x00DD8, 0x00DDF, "Sinh" }, { 0x00DE6, 0x00DEF, "Sinh" }, { 0x00DF2, 0x00DF4, "Sinh" }, { 0x00E01, 0x00E3A, "Thai" }, { 0x00E40, 0x00E5B, "Thai" }, { 0x00E81, 0x00E82, "Laoo" }, { 0x00E86, 0x00E8A, "Laoo" }, { 0x00E8C, 0x00EA3, "Laoo" }, { 0x00EA7, 0x00EBD, "Laoo" }, { 0x00EC0, 0x00EC4, "Laoo" }, { 0x00EC8, 0x00ECE, "Laoo" }, { 0x00ED0, 0x00ED9, "Laoo" }, { 0x00EDC, 0x00EDF, "Laoo" }, { 0x00F00, 0x00F47, "Tibt" }, { 0x00F49, 0x00F6C, "Tibt" }, { 0x00F71, 0x00F97, "Tibt" }, { 0x00F99, 0x00FBC, "Tibt" }, { 0x00FBE, 0x00FCC, "Tibt" }, { 0x00FCE, 0x00FD4, "Tibt" }, { 0x00FD5, 0x00FD8, "Zyyy" }, { 0x00FD9, 0x00FDA, "Tibt" }, { 0x01000, 0x0109F, "Mymr" }, { 0x010A0, 0x010C5, "Geor" }, { 0x010D0, 0x010FA, "Geor" }, { 0x010FC, 0x010FF, "Geor" }, { 0x01100, 0x011FF, "Hang" }, { 0x01200, 0x01248, "Ethi" }, { 0x0124A, 0x0124D, "Ethi" }, { 0x01250, 0x01256, "Ethi" }, { 0x0125A, 0x0125D, "Ethi" }, { 0x01260, 0x01288, "Ethi" }, { 0x0128A, 0x0128D, "Ethi" }, { 0x01290, 0x012B0, "Ethi" }, { 0x012B2, 0x012B5, "Ethi" }, { 0x012B8, 0x012BE, "Ethi" }, { 0x012C2, 0x012C5, "Ethi" }, { 0x012C8, 0x012D6, "Ethi" }, { 0x012D8, 0x01310, "Ethi" }, { 0x01312, 0x01315, "Ethi" }, { 0x01318, 0x0135A, "Ethi" }, { 0x0135D, 0x0137C, "Ethi" }, { 0x01380, 0x01399, "Ethi" }, { 0x013A0, 0x013F5, "Cher" }, { 0x013F8, 0x013FD, "Cher" }, { 0x01400, 0x0167F, "Cans" }, { 0x01680, 0x0169C, "Ogam" }, { 0x016A0, 0x016EA, "Runr" }, { 0x016EB, 0x016ED, "Zyyy" }, { 0x016EE, 0x016F8, "Runr" }, { 0x01700, 0x01715, "Tglg" }, { 0x01720, 0x01734, "Hano" }, { 0x01735, 0x01736, "Zyyy" }, { 0x01740, 0x01753, "Buhd" }, { 0x01760, 0x0176C, "Tagb" }, { 0x0176E, 0x01770, "Tagb" }, { 0x01772, 0x01773, "Tagb" }, { 0x01780, 0x017DD, "Khmr" }, { 0x017E0, 0x017E9, "Khmr" }, { 0x017F0, 0x017F9, "Khmr" }, { 0x01800, 0x01801, "Mong" }, { 0x01802, 0x01803, "Zyyy" }, { 0x01806, 0x01819, "Mong" }, { 0x01820, 0x01878, "Mong" }, { 0x01880, 0x018AA, "Mong" }, { 0x018B0, 0x018F5, "Cans" }, { 0x01900, 0x0191E, "Limb" }, { 0x01920, 0x0192B, "Limb" }, { 0x01930, 0x0193B, "Limb" }, { 0x01944, 0x0194F, "Limb" }, { 0x01950, 0x0196D, "Tale" }, { 0x01970, 0x01974, "Tale" }, { 0x01980, 0x019AB, "Talu" }, { 0x019B0, 0x019C9, "Talu" }, { 0x019D0, 0x019DA, "Talu" }, { 0x019DE, 0x019DF, "Talu" }, { 0x019E0, 0x019FF, "Khmr" }, { 0x01A00, 0x01A1B, "Bugi" }, { 0x01A1E, 0x01A1F, "Bugi" }, { 0x01A20, 0x01A5E, "Lana" }, { 0x01A60, 0x01A7C, "Lana" }, { 0x01A7F, 0x01A89, "Lana" }, { 0x01A90, 0x01A99, "Lana" }, { 0x01AA0, 0x01AAD, "Lana" }, { 0x01AB0, 0x01ACE, "Zinh" }, { 0x01B00, 0x01B4C, "Bali" }, { 0x01B50, 0x01B7E, "Bali" }, { 0x01B80, 0x01BBF, "Sund" }, { 0x01BC0, 0x01BF3, "Batk" }, { 0x01BFC, 0x01BFF, "Batk" }, { 0x01C00, 0x01C37, "Lepc" }, { 0x01C3B, 0x01C49, "Lepc" }, { 0x01C4D, 0x01C4F, "Lepc" }, { 0x01C50, 0x01C7F, "Olck" }, { 0x01C80, 0x01C88, "Cyrl" }, { 0x01C90, 0x01CBA, "Geor" }, { 0x01CBD, 0x01CBF, "Geor" }, { 0x01CC0, 0x01CC7, "Sund" }, { 0x01CD0, 0x01CD2, "Zinh" }, { 0x01CD4, 0x01CE0, "Zinh" }, { 0x01CE2, 0x01CE8, "Zinh" }, { 0x01CE9, 0x01CEC, "Zyyy" }, { 0x01CEE, 0x01CF3, "Zyyy" }, { 0x01CF5, 0x01CF7, "Zyyy" }, { 0x01CF8, 0x01CF9, "Zinh" }, { 0x01D00, 0x01D25, "Latn" }, { 0x01D26, 0x01D2A, "Grek" }, { 0x01D2C, 0x01D5C, "Latn" }, { 0x01D5D, 0x01D61, "Grek" }, { 0x01D62, 0x01D65, "Latn" }, { 0x01D66, 0x01D6A, "Grek" }, { 0x01D6B, 0x01D77, "Latn" }, { 0x01D79, 0x01DBE, "Latn" }, { 0x01DC0, 0x01DFF, "Zinh" }, { 0x01E00, 0x01EFF, "Latn" }, { 0x01F00, 0x01F15, "Grek" }, { 0x01F18, 0x01F1D, "Grek" }, { 0x01F20, 0x01F45, "Grek" }, { 0x01F48, 0x01F4D, "Grek" }, { 0x01F50, 0x01F57, "Grek" }, { 0x01F5F, 0x01F7D, "Grek" }, { 0x01F80, 0x01FB4, "Grek" }, { 0x01FB6, 0x01FC4, "Grek" }, { 0x01FC6, 0x01FD3, "Grek" }, { 0x01FD6, 0x01FDB, "Grek" }, { 0x01FDD, 0x01FEF, "Grek" }, { 0x01FF2, 0x01FF4, "Grek" }, { 0x01FF6, 0x01FFE, "Grek" }, { 0x02000, 0x0200B, "Zyyy" }, { 0x0200C, 0x0200D, "Zinh" }, { 0x0200E, 0x02064, "Zyyy" }, { 0x02066, 0x02070, "Zyyy" }, { 0x02074, 0x0207E, "Zyyy" }, { 0x02080, 0x0208E, "Zyyy" }, { 0x02090, 0x0209C, "Latn" }, { 0x020A0, 0x020C0, "Zyyy" }, { 0x020D0, 0x020F0, "Zinh" }, { 0x02100, 0x02125, "Zyyy" }, { 0x02127, 0x02129, "Zyyy" }, { 0x0212A, 0x0212B, "Latn" }, { 0x0212C, 0x02131, "Zyyy" }, { 0x02133, 0x0214D, "Zyyy" }, { 0x0214F, 0x0215F, "Zyyy" }, { 0x02160, 0x02188, "Latn" }, { 0x02189, 0x0218B, "Zyyy" }, { 0x02190, 0x02426, "Zyyy" }, { 0x02440, 0x0244A, "Zyyy" }, { 0x02460, 0x027FF, "Zyyy" }, { 0x02800, 0x028FF, "Brai" }, { 0x02900, 0x02B73, "Zyyy" }, { 0x02B76, 0x02B95, "Zyyy" }, { 0x02B97, 0x02BFF, "Zyyy" }, { 0x02C00, 0x02C5F, "Glag" }, { 0x02C60, 0x02C7F, "Latn" }, { 0x02C80, 0x02CF3, "Copt" }, { 0x02CF9, 0x02CFF, "Copt" }, { 0x02D00, 0x02D25, "Geor" }, { 0x02D30, 0x02D67, "Tfng" }, { 0x02D6F, 0x02D70, "Tfng" }, { 0x02D80, 0x02D96, "Ethi" }, { 0x02DA0, 0x02DA6, "Ethi" }, { 0x02DA8, 0x02DAE, "Ethi" }, { 0x02DB0, 0x02DB6, "Ethi" }, { 0x02DB8, 0x02DBE, "Ethi" }, { 0x02DC0, 0x02DC6, "Ethi" }, { 0x02DC8, 0x02DCE, "Ethi" }, { 0x02DD0, 0x02DD6, "Ethi" }, { 0x02DD8, 0x02DDE, "Ethi" }, { 0x02DE0, 0x02DFF, "Cyrl" }, { 0x02E00, 0x02E5D, "Zyyy" }, { 0x02E80, 0x02E99, "Hani" }, { 0x02E9B, 0x02EF3, "Hani" }, { 0x02F00, 0x02FD5, "Hani" }, { 0x02FF0, 0x02FFB, "Zyyy" }, { 0x03000, 0x03004, "Zyyy" }, { 0x03008, 0x03020, "Zyyy" }, { 0x03021, 0x03029, "Hani" }, { 0x0302A, 0x0302D, "Zinh" }, { 0x0302E, 0x0302F, "Hang" }, { 0x03030, 0x03037, "Zyyy" }, { 0x03038, 0x0303B, "Hani" }, { 0x0303C, 0x0303F, "Zyyy" }, { 0x03041, 0x03096, "Hira" }, { 0x03099, 0x0309A, "Zinh" }, { 0x0309B, 0x0309C, "Zyyy" }, { 0x0309D, 0x0309F, "Hira" }, { 0x030A1, 0x030FA, "Kana" }, { 0x030FB, 0x030FC, "Zyyy" }, { 0x030FD, 0x030FF, "Kana" }, { 0x03105, 0x0312F, "Bopo" }, { 0x03131, 0x0318E, "Hang" }, { 0x03190, 0x0319F, "Zyyy" }, { 0x031A0, 0x031BF, "Bopo" }, { 0x031C0, 0x031E3, "Zyyy" }, { 0x031F0, 0x031FF, "Kana" }, { 0x03200, 0x0321E, "Hang" }, { 0x03220, 0x0325F, "Zyyy" }, { 0x03260, 0x0327E, "Hang" }, { 0x0327F, 0x032CF, "Zyyy" }, { 0x032D0, 0x032FE, "Kana" }, { 0x03300, 0x03357, "Kana" }, { 0x03358, 0x033FF, "Zyyy" }, { 0x03400, 0x04DBF, "Hani" }, { 0x04DC0, 0x04DFF, "Zyyy" }, { 0x04E00, 0x09FFF, "Hani" }, { 0x0A000, 0x0A48C, "Yiii" }, { 0x0A490, 0x0A4C6, "Yiii" }, { 0x0A4D0, 0x0A4FF, "Lisu" }, { 0x0A500, 0x0A62B, "Vaii" }, { 0x0A640, 0x0A69F, "Cyrl" }, { 0x0A6A0, 0x0A6F7, "Bamu" }, { 0x0A700, 0x0A721, "Zyyy" }, { 0x0A722, 0x0A787, "Latn" }, { 0x0A788, 0x0A78A, "Zyyy" }, { 0x0A78B, 0x0A7CA, "Latn" }, { 0x0A7D0, 0x0A7D1, "Latn" }, { 0x0A7D5, 0x0A7D9, "Latn" }, { 0x0A7F2, 0x0A7FF, "Latn" }, { 0x0A800, 0x0A82C, "Sylo" }, { 0x0A830, 0x0A839, "Zyyy" }, { 0x0A840, 0x0A877, "Phag" }, { 0x0A880, 0x0A8C5, "Saur" }, { 0x0A8CE, 0x0A8D9, "Saur" }, { 0x0A8E0, 0x0A8FF, "Deva" }, { 0x0A900, 0x0A92D, "Kali" }, { 0x0A930, 0x0A953, "Rjng" }, { 0x0A960, 0x0A97C, "Hang" }, { 0x0A980, 0x0A9CD, "Java" }, { 0x0A9D0, 0x0A9D9, "Java" }, { 0x0A9DE, 0x0A9DF, "Java" }, { 0x0A9E0, 0x0A9FE, "Mymr" }, { 0x0AA00, 0x0AA36, "Cham" }, { 0x0AA40, 0x0AA4D, "Cham" }, { 0x0AA50, 0x0AA59, "Cham" }, { 0x0AA5C, 0x0AA5F, "Cham" }, { 0x0AA60, 0x0AA7F, "Mymr" }, { 0x0AA80, 0x0AAC2, "Tavt" }, { 0x0AADB, 0x0AADF, "Tavt" }, { 0x0AAE0, 0x0AAF6, "Mtei" }, { 0x0AB01, 0x0AB06, "Ethi" }, { 0x0AB09, 0x0AB0E, "Ethi" }, { 0x0AB11, 0x0AB16, "Ethi" }, { 0x0AB20, 0x0AB26, "Ethi" }, { 0x0AB28, 0x0AB2E, "Ethi" }, { 0x0AB30, 0x0AB5A, "Latn" }, { 0x0AB5C, 0x0AB64, "Latn" }, { 0x0AB66, 0x0AB69, "Latn" }, { 0x0AB6A, 0x0AB6B, "Zyyy" }, { 0x0AB70, 0x0ABBF, "Cher" }, { 0x0ABC0, 0x0ABED, "Mtei" }, { 0x0ABF0, 0x0ABF9, "Mtei" }, { 0x0AC00, 0x0D7A3, "Hang" }, { 0x0D7B0, 0x0D7C6, "Hang" }, { 0x0D7CB, 0x0D7FB, "Hang" }, { 0x0F900, 0x0FA6D, "Hani" }, { 0x0FA70, 0x0FAD9, "Hani" }, { 0x0FB00, 0x0FB06, "Latn" }, { 0x0FB13, 0x0FB17, "Armn" }, { 0x0FB1D, 0x0FB36, "Hebr" }, { 0x0FB38, 0x0FB3C, "Hebr" }, { 0x0FB40, 0x0FB41, "Hebr" }, { 0x0FB43, 0x0FB44, "Hebr" }, { 0x0FB46, 0x0FB4F, "Hebr" }, { 0x0FB50, 0x0FBC2, "Arab" }, { 0x0FBD3, 0x0FD3D, "Arab" }, { 0x0FD3E, 0x0FD3F, "Zyyy" }, { 0x0FD40, 0x0FD8F, "Arab" }, { 0x0FD92, 0x0FDC7, "Arab" }, { 0x0FDF0, 0x0FDFF, "Arab" }, { 0x0FE00, 0x0FE0F, "Zinh" }, { 0x0FE10, 0x0FE19, "Zyyy" }, { 0x0FE20, 0x0FE2D, "Zinh" }, { 0x0FE2E, 0x0FE2F, "Cyrl" }, { 0x0FE30, 0x0FE52, "Zyyy" }, { 0x0FE54, 0x0FE66, "Zyyy" }, { 0x0FE68, 0x0FE6B, "Zyyy" }, { 0x0FE70, 0x0FE74, "Arab" }, { 0x0FE76, 0x0FEFC, "Arab" }, { 0x0FF01, 0x0FF20, "Zyyy" }, { 0x0FF21, 0x0FF3A, "Latn" }, { 0x0FF3B, 0x0FF40, "Zyyy" }, { 0x0FF41, 0x0FF5A, "Latn" }, { 0x0FF5B, 0x0FF65, "Zyyy" }, { 0x0FF66, 0x0FF6F, "Kana" }, { 0x0FF71, 0x0FF9D, "Kana" }, { 0x0FF9E, 0x0FF9F, "Zyyy" }, { 0x0FFA0, 0x0FFBE, "Hang" }, { 0x0FFC2, 0x0FFC7, "Hang" }, { 0x0FFCA, 0x0FFCF, "Hang" }, { 0x0FFD2, 0x0FFD7, "Hang" }, { 0x0FFDA, 0x0FFDC, "Hang" }, { 0x0FFE0, 0x0FFE6, "Zyyy" }, { 0x0FFE8, 0x0FFEE, "Zyyy" }, { 0x0FFF9, 0x0FFFD, "Zyyy" }, { 0x10000, 0x1000B, "Linb" }, { 0x1000D, 0x10026, "Linb" }, { 0x10028, 0x1003A, "Linb" }, { 0x1003C, 0x1003D, "Linb" }, { 0x1003F, 0x1004D, "Linb" }, { 0x10050, 0x1005D, "Linb" }, { 0x10080, 0x100FA, "Linb" }, { 0x10100, 0x10102, "Zyyy" }, { 0x10107, 0x10133, "Zyyy" }, { 0x10137, 0x1013F, "Zyyy" }, { 0x10140, 0x1018E, "Grek" }, { 0x10190, 0x1019C, "Zyyy" }, { 0x101D0, 0x101FC, "Zyyy" }, { 0x10280, 0x1029C, "Lyci" }, { 0x102A0, 0x102D0, "Cari" }, { 0x102E1, 0x102FB, "Zyyy" }, { 0x10300, 0x10323, "Ital" }, { 0x1032D, 0x1032F, "Ital" }, { 0x10330, 0x1034A, "Goth" }, { 0x10350, 0x1037A, "Perm" }, { 0x10380, 0x1039D, "Ugar" }, { 0x103A0, 0x103C3, "Xpeo" }, { 0x103C8, 0x103D5, "Xpeo" }, { 0x10400, 0x1044F, "Dsrt" }, { 0x10450, 0x1047F, "Shaw" }, { 0x10480, 0x1049D, "Osma" }, { 0x104A0, 0x104A9, "Osma" }, { 0x104B0, 0x104D3, "Osge" }, { 0x104D8, 0x104FB, "Osge" }, { 0x10500, 0x10527, "Elba" }, { 0x10530, 0x10563, "Aghb" }, { 0x10570, 0x1057A, "Vith" }, { 0x1057C, 0x1058A, "Vith" }, { 0x1058C, 0x10592, "Vith" }, { 0x10594, 0x10595, "Vith" }, { 0x10597, 0x105A1, "Vith" }, { 0x105A3, 0x105B1, "Vith" }, { 0x105B3, 0x105B9, "Vith" }, { 0x105BB, 0x105BC, "Vith" }, { 0x10600, 0x10736, "Lina" }, { 0x10740, 0x10755, "Lina" }, { 0x10760, 0x10767, "Lina" }, { 0x10780, 0x10785, "Latn" }, { 0x10787, 0x107B0, "Latn" }, { 0x107B2, 0x107BA, "Latn" }, { 0x10800, 0x10805, "Cprt" }, { 0x1080A, 0x10835, "Cprt" }, { 0x10837, 0x10838, "Cprt" }, { 0x10840, 0x10855, "Armi" }, { 0x10857, 0x1085F, "Armi" }, { 0x10860, 0x1087F, "Palm" }, { 0x10880, 0x1089E, "Nbat" }, { 0x108A7, 0x108AF, "Nbat" }, { 0x108E0, 0x108F2, "Hatr" }, { 0x108F4, 0x108F5, "Hatr" }, { 0x108FB, 0x108FF, "Hatr" }, { 0x10900, 0x1091B, "Phnx" }, { 0x10920, 0x10939, "Lydi" }, { 0x10980, 0x1099F, "Mero" }, { 0x109A0, 0x109B7, "Merc" }, { 0x109BC, 0x109CF, "Merc" }, { 0x109D2, 0x109FF, "Merc" }, { 0x10A00, 0x10A03, "Khar" }, { 0x10A05, 0x10A06, "Khar" }, { 0x10A0C, 0x10A13, "Khar" }, { 0x10A15, 0x10A17, "Khar" }, { 0x10A19, 0x10A35, "Khar" }, { 0x10A38, 0x10A3A, "Khar" }, { 0x10A3F, 0x10A48, "Khar" }, { 0x10A50, 0x10A58, "Khar" }, { 0x10A60, 0x10A7F, "Sarb" }, { 0x10A80, 0x10A9F, "Narb" }, { 0x10AC0, 0x10AE6, "Mani" }, { 0x10AEB, 0x10AF6, "Mani" }, { 0x10B00, 0x10B35, "Avst" }, { 0x10B39, 0x10B3F, "Avst" }, { 0x10B40, 0x10B55, "Prti" }, { 0x10B58, 0x10B5F, "Prti" }, { 0x10B60, 0x10B72, "Phli" }, { 0x10B78, 0x10B7F, "Phli" }, { 0x10B80, 0x10B91, "Phlp" }, { 0x10B99, 0x10B9C, "Phlp" }, { 0x10BA9, 0x10BAF, "Phlp" }, { 0x10C00, 0x10C48, "Orkh" }, { 0x10C80, 0x10CB2, "Hung" }, { 0x10CC0, 0x10CF2, "Hung" }, { 0x10CFA, 0x10CFF, "Hung" }, { 0x10D00, 0x10D27, "Rohg" }, { 0x10D30, 0x10D39, "Rohg" }, { 0x10E60, 0x10E7E, "Arab" }, { 0x10E80, 0x10EA9, "Yezi" }, { 0x10EAB, 0x10EAD, "Yezi" }, { 0x10EB0, 0x10EB1, "Yezi" }, { 0x10EFD, 0x10EFF, "Arab" }, { 0x10F00, 0x10F27, "Sogo" }, { 0x10F30, 0x10F59, "Sogd" }, { 0x10F70, 0x10F89, "Ougr" }, { 0x10FB0, 0x10FCB, "Chrs" }, { 0x10FE0, 0x10FF6, "Elym" }, { 0x11000, 0x1104D, "Brah" }, { 0x11052, 0x11075, "Brah" }, { 0x11080, 0x110C2, "Kthi" }, { 0x110D0, 0x110E8, "Sora" }, { 0x110F0, 0x110F9, "Sora" }, { 0x11100, 0x11134, "Cakm" }, { 0x11136, 0x11147, "Cakm" }, { 0x11150, 0x11176, "Mahj" }, { 0x11180, 0x111DF, "Shrd" }, { 0x111E1, 0x111F4, "Sinh" }, { 0x11200, 0x11211, "Khoj" }, { 0x11213, 0x11241, "Khoj" }, { 0x11280, 0x11286, "Mult" }, { 0x1128A, 0x1128D, "Mult" }, { 0x1128F, 0x1129D, "Mult" }, { 0x1129F, 0x112A9, "Mult" }, { 0x112B0, 0x112EA, "Sind" }, { 0x112F0, 0x112F9, "Sind" }, { 0x11300, 0x11303, "Gran" }, { 0x11305, 0x1130C, "Gran" }, { 0x1130F, 0x11310, "Gran" }, { 0x11313, 0x11328, "Gran" }, { 0x1132A, 0x11330, "Gran" }, { 0x11332, 0x11333, "Gran" }, { 0x11335, 0x11339, "Gran" }, { 0x1133C, 0x11344, "Gran" }, { 0x11347, 0x11348, "Gran" }, { 0x1134B, 0x1134D, "Gran" }, { 0x1135D, 0x11363, "Gran" }, { 0x11366, 0x1136C, "Gran" }, { 0x11370, 0x11374, "Gran" }, { 0x11400, 0x1145B, "Newa" }, { 0x1145D, 0x11461, "Newa" }, { 0x11480, 0x114C7, "Tirh" }, { 0x114D0, 0x114D9, "Tirh" }, { 0x11580, 0x115B5, "Sidd" }, { 0x115B8, 0x115DD, "Sidd" }, { 0x11600, 0x11644, "Modi" }, { 0x11650, 0x11659, "Modi" }, { 0x11660, 0x1166C, "Mong" }, { 0x11680, 0x116B9, "Takr" }, { 0x116C0, 0x116C9, "Takr" }, { 0x11700, 0x1171A, "Ahom" }, { 0x1171D, 0x1172B, "Ahom" }, { 0x11730, 0x11746, "Ahom" }, { 0x11800, 0x1183B, "Dogr" }, { 0x118A0, 0x118F2, "Wara" }, { 0x11900, 0x11906, "Diak" }, { 0x1190C, 0x11913, "Diak" }, { 0x11915, 0x11916, "Diak" }, { 0x11918, 0x11935, "Diak" }, { 0x11937, 0x11938, "Diak" }, { 0x1193B, 0x11946, "Diak" }, { 0x11950, 0x11959, "Diak" }, { 0x119A0, 0x119A7, "Nand" }, { 0x119AA, 0x119D7, "Nand" }, { 0x119DA, 0x119E4, "Nand" }, { 0x11A00, 0x11A47, "Zanb" }, { 0x11A50, 0x11AA2, "Soyo" }, { 0x11AB0, 0x11ABF, "Cans" }, { 0x11AC0, 0x11AF8, "Pauc" }, { 0x11B00, 0x11B09, "Deva" }, { 0x11C00, 0x11C08, "Bhks" }, { 0x11C0A, 0x11C36, "Bhks" }, { 0x11C38, 0x11C45, "Bhks" }, { 0x11C50, 0x11C6C, "Bhks" }, { 0x11C70, 0x11C8F, "Marc" }, { 0x11C92, 0x11CA7, "Marc" }, { 0x11CA9, 0x11CB6, "Marc" }, { 0x11D00, 0x11D06, "Gonm" }, { 0x11D08, 0x11D09, "Gonm" }, { 0x11D0B, 0x11D36, "Gonm" }, { 0x11D3C, 0x11D3D, "Gonm" }, { 0x11D3F, 0x11D47, "Gonm" }, { 0x11D50, 0x11D59, "Gonm" }, { 0x11D60, 0x11D65, "Gong" }, { 0x11D67, 0x11D68, "Gong" }, { 0x11D6A, 0x11D8E, "Gong" }, { 0x11D90, 0x11D91, "Gong" }, { 0x11D93, 0x11D98, "Gong" }, { 0x11DA0, 0x11DA9, "Gong" }, { 0x11EE0, 0x11EF8, "Maka" }, { 0x11F00, 0x11F10, "Kawi" }, { 0x11F12, 0x11F3A, "Kawi" }, { 0x11F3E, 0x11F59, "Kawi" }, { 0x11FC0, 0x11FF1, "Taml" }, { 0x12000, 0x12399, "Xsux" }, { 0x12400, 0x1246E, "Xsux" }, { 0x12470, 0x12474, "Xsux" }, { 0x12480, 0x12543, "Xsux" }, { 0x12F90, 0x12FF2, "Cpmn" }, { 0x13000, 0x13455, "Egyp" }, { 0x14400, 0x14646, "Hluw" }, { 0x16800, 0x16A38, "Bamu" }, { 0x16A40, 0x16A5E, "Mroo" }, { 0x16A60, 0x16A69, "Mroo" }, { 0x16A6E, 0x16A6F, "Mroo" }, { 0x16A70, 0x16ABE, "Tnsa" }, { 0x16AC0, 0x16AC9, "Tnsa" }, { 0x16AD0, 0x16AED, "Bass" }, { 0x16AF0, 0x16AF5, "Bass" }, { 0x16B00, 0x16B45, "Hmng" }, { 0x16B50, 0x16B59, "Hmng" }, { 0x16B5B, 0x16B61, "Hmng" }, { 0x16B63, 0x16B77, "Hmng" }, { 0x16B7D, 0x16B8F, "Hmng" }, { 0x16E40, 0x16E9A, "Medf" }, { 0x16F00, 0x16F4A, "Plrd" }, { 0x16F4F, 0x16F87, "Plrd" }, { 0x16F8F, 0x16F9F, "Plrd" }, { 0x16FE2, 0x16FE3, "Hani" }, { 0x16FF0, 0x16FF1, "Hani" }, { 0x17000, 0x187F7, "Tang" }, { 0x18800, 0x18AFF, "Tang" }, { 0x18B00, 0x18CD5, "Kits" }, { 0x18D00, 0x18D08, "Tang" }, { 0x1AFF0, 0x1AFF3, "Kana" }, { 0x1AFF5, 0x1AFFB, "Kana" }, { 0x1AFFD, 0x1AFFE, "Kana" }, { 0x1B001, 0x1B11F, "Hira" }, { 0x1B120, 0x1B122, "Kana" }, { 0x1B150, 0x1B152, "Hira" }, { 0x1B164, 0x1B167, "Kana" }, { 0x1B170, 0x1B2FB, "Nshu" }, { 0x1BC00, 0x1BC6A, "Dupl" }, { 0x1BC70, 0x1BC7C, "Dupl" }, { 0x1BC80, 0x1BC88, "Dupl" }, { 0x1BC90, 0x1BC99, "Dupl" }, { 0x1BC9C, 0x1BC9F, "Dupl" }, { 0x1BCA0, 0x1BCA3, "Zyyy" }, { 0x1CF00, 0x1CF2D, "Zinh" }, { 0x1CF30, 0x1CF46, "Zinh" }, { 0x1CF50, 0x1CFC3, "Zyyy" }, { 0x1D000, 0x1D0F5, "Zyyy" }, { 0x1D100, 0x1D126, "Zyyy" }, { 0x1D129, 0x1D166, "Zyyy" }, { 0x1D167, 0x1D169, "Zinh" }, { 0x1D16A, 0x1D17A, "Zyyy" }, { 0x1D17B, 0x1D182, "Zinh" }, { 0x1D183, 0x1D184, "Zyyy" }, { 0x1D185, 0x1D18B, "Zinh" }, { 0x1D18C, 0x1D1A9, "Zyyy" }, { 0x1D1AA, 0x1D1AD, "Zinh" }, { 0x1D1AE, 0x1D1EA, "Zyyy" }, { 0x1D200, 0x1D245, "Grek" }, { 0x1D2C0, 0x1D2D3, "Zyyy" }, { 0x1D2E0, 0x1D2F3, "Zyyy" }, { 0x1D300, 0x1D356, "Zyyy" }, { 0x1D360, 0x1D378, "Zyyy" }, { 0x1D400, 0x1D454, "Zyyy" }, { 0x1D456, 0x1D49C, "Zyyy" }, { 0x1D49E, 0x1D49F, "Zyyy" }, { 0x1D4A5, 0x1D4A6, "Zyyy" }, { 0x1D4A9, 0x1D4AC, "Zyyy" }, { 0x1D4AE, 0x1D4B9, "Zyyy" }, { 0x1D4BD, 0x1D4C3, "Zyyy" }, { 0x1D4C5, 0x1D505, "Zyyy" }, { 0x1D507, 0x1D50A, "Zyyy" }, { 0x1D50D, 0x1D514, "Zyyy" }, { 0x1D516, 0x1D51C, "Zyyy" }, { 0x1D51E, 0x1D539, "Zyyy" }, { 0x1D53B, 0x1D53E, "Zyyy" }, { 0x1D540, 0x1D544, "Zyyy" }, { 0x1D54A, 0x1D550, "Zyyy" }, { 0x1D552, 0x1D6A5, "Zyyy" }, { 0x1D6A8, 0x1D7CB, "Zyyy" }, { 0x1D7CE, 0x1D7FF, "Zyyy" }, { 0x1D800, 0x1DA8B, "Sgnw" }, { 0x1DA9B, 0x1DA9F, "Sgnw" }, { 0x1DAA1, 0x1DAAF, "Sgnw" }, { 0x1DF00, 0x1DF1E, "Latn" }, { 0x1DF25, 0x1DF2A, "Latn" }, { 0x1E000, 0x1E006, "Glag" }, { 0x1E008, 0x1E018, "Glag" }, { 0x1E01B, 0x1E021, "Glag" }, { 0x1E023, 0x1E024, "Glag" }, { 0x1E026, 0x1E02A, "Glag" }, { 0x1E030, 0x1E06D, "Cyrl" }, { 0x1E100, 0x1E12C, "Hmnp" }, { 0x1E130, 0x1E13D, "Hmnp" }, { 0x1E140, 0x1E149, "Hmnp" }, { 0x1E14E, 0x1E14F, "Hmnp" }, { 0x1E290, 0x1E2AE, "Toto" }, { 0x1E2C0, 0x1E2F9, "Wcho" }, { 0x1E4D0, 0x1E4F9, "Nagm" }, { 0x1E7E0, 0x1E7E6, "Ethi" }, { 0x1E7E8, 0x1E7EB, "Ethi" }, { 0x1E7ED, 0x1E7EE, "Ethi" }, { 0x1E7F0, 0x1E7FE, "Ethi" }, { 0x1E800, 0x1E8C4, "Mend" }, { 0x1E8C7, 0x1E8D6, "Mend" }, { 0x1E900, 0x1E94B, "Adlm" }, { 0x1E950, 0x1E959, "Adlm" }, { 0x1E95E, 0x1E95F, "Adlm" }, { 0x1EC71, 0x1ECB4, "Zyyy" }, { 0x1ED01, 0x1ED3D, "Zyyy" }, { 0x1EE00, 0x1EE03, "Arab" }, { 0x1EE05, 0x1EE1F, "Arab" }, { 0x1EE21, 0x1EE22, "Arab" }, { 0x1EE29, 0x1EE32, "Arab" }, { 0x1EE34, 0x1EE37, "Arab" }, { 0x1EE4D, 0x1EE4F, "Arab" }, { 0x1EE51, 0x1EE52, "Arab" }, { 0x1EE61, 0x1EE62, "Arab" }, { 0x1EE67, 0x1EE6A, "Arab" }, { 0x1EE6C, 0x1EE72, "Arab" }, { 0x1EE74, 0x1EE77, "Arab" }, { 0x1EE79, 0x1EE7C, "Arab" }, { 0x1EE80, 0x1EE89, "Arab" }, { 0x1EE8B, 0x1EE9B, "Arab" }, { 0x1EEA1, 0x1EEA3, "Arab" }, { 0x1EEA5, 0x1EEA9, "Arab" }, { 0x1EEAB, 0x1EEBB, "Arab" }, { 0x1EEF0, 0x1EEF1, "Arab" }, { 0x1F000, 0x1F02B, "Zyyy" }, { 0x1F030, 0x1F093, "Zyyy" }, { 0x1F0A0, 0x1F0AE, "Zyyy" }, { 0x1F0B1, 0x1F0BF, "Zyyy" }, { 0x1F0C1, 0x1F0CF, "Zyyy" }, { 0x1F0D1, 0x1F0F5, "Zyyy" }, { 0x1F100, 0x1F1AD, "Zyyy" }, { 0x1F1E6, 0x1F1FF, "Zyyy" }, { 0x1F201, 0x1F202, "Zyyy" }, { 0x1F210, 0x1F23B, "Zyyy" }, { 0x1F240, 0x1F248, "Zyyy" }, { 0x1F250, 0x1F251, "Zyyy" }, { 0x1F260, 0x1F265, "Zyyy" }, { 0x1F300, 0x1F6D7, "Zyyy" }, { 0x1F6DC, 0x1F6EC, "Zyyy" }, { 0x1F6F0, 0x1F6FC, "Zyyy" }, { 0x1F700, 0x1F776, "Zyyy" }, { 0x1F77B, 0x1F7D9, "Zyyy" }, { 0x1F7E0, 0x1F7EB, "Zyyy" }, { 0x1F800, 0x1F80B, "Zyyy" }, { 0x1F810, 0x1F847, "Zyyy" }, { 0x1F850, 0x1F859, "Zyyy" }, { 0x1F860, 0x1F887, "Zyyy" }, { 0x1F890, 0x1F8AD, "Zyyy" }, { 0x1F8B0, 0x1F8B1, "Zyyy" }, { 0x1F900, 0x1FA53, "Zyyy" }, { 0x1FA60, 0x1FA6D, "Zyyy" }, { 0x1FA70, 0x1FA7C, "Zyyy" }, { 0x1FA80, 0x1FA88, "Zyyy" }, { 0x1FA90, 0x1FABD, "Zyyy" }, { 0x1FABF, 0x1FAC5, "Zyyy" }, { 0x1FACE, 0x1FADB, "Zyyy" }, { 0x1FAE0, 0x1FAE8, "Zyyy" }, { 0x1FAF0, 0x1FAF8, "Zyyy" }, { 0x1FB00, 0x1FB92, "Zyyy" }, { 0x1FB94, 0x1FBCA, "Zyyy" }, { 0x1FBF0, 0x1FBF9, "Zyyy" }, { 0x20000, 0x2A6DF, "Hani" }, { 0x2A700, 0x2B739, "Hani" }, { 0x2B740, 0x2B81D, "Hani" }, { 0x2B820, 0x2CEA1, "Hani" }, { 0x2CEB0, 0x2EBE0, "Hani" }, { 0x2F800, 0x2FA1D, "Hani" }, { 0x30000, 0x3134A, "Hani" }, { 0x31350, 0x323AF, "Hani" }, { 0xE0020, 0xE007F, "Zyyy" }, { 0xE0100, 0xE01EF, "Zinh" }, }, -- Scripts.txt gives full names; here we consider them aliases to save space. aliases = { Adlm = "Adlam", Aghb = "Caucasian Albanian", Ahom = "Ahom", Arab = "Arabic", Armi = "Imperial Aramaic", Armn = "Armenian", Avst = "Avestan", Bali = "Balinese", Bamu = "Bamum", Bass = "Bassa Vah", Batk = "Batak", Beng = "Bengali", Bhks = "Bhaiksuki", Bopo = "Bopomofo", Brah = "Brahmi", Brai = "Braille", Bugi = "Buginese", Buhd = "Buhid", Cakm = "Chakma", Cans = "Canadian Aboriginal", Cari = "Carian", Cham = "Cham", Cher = "Cherokee", Chrs = "Chorasmian", Copt = "Coptic", Cpmn = "Cypro Minoan", Cprt = "Cypriot", Cyrl = "Cyrillic", Deva = "Devanagari", Diak = "Dives Akuru", Dogr = "Dogra", Dsrt = "Deseret", Dupl = "Duployan", Egyp = "Egyptian Hieroglyphs", Elba = "Elbasan", Elym = "Elymaic", Ethi = "Ethiopic", Geor = "Georgian", Glag = "Glagolitic", Gong = "Gunjala Gondi", Gonm = "Masaram Gondi", Goth = "Gothic", Gran = "Grantha", Grek = "Greek", Gujr = "Gujarati", Guru = "Gurmukhi", Hang = "Hangul", Hani = "Han", Hano = "Hanunoo", Hatr = "Hatran", Hebr = "Hebrew", Hira = "Hiragana", Hluw = "Anatolian Hieroglyphs", Hmng = "Pahawh Hmong", Hmnp = "Nyiakeng Puachue Hmong", Hrkt = "Katakana Or Hiragana", Hung = "Old Hungarian", Ital = "Old Italic", Java = "Javanese", Kali = "Kayah Li", Kana = "Katakana", Kawi = "Kawi", Khar = "Kharoshthi", Khmr = "Khmer", Khoj = "Khojki", Kits = "Khitan Small Script", Knda = "Kannada", Kthi = "Kaithi", Lana = "Tai Tham", Laoo = "Lao", Latn = "Latin", Lepc = "Lepcha", Limb = "Limbu", Lina = "Linear A", Linb = "Linear B", Lisu = "Lisu", Lyci = "Lycian", Lydi = "Lydian", Mahj = "Mahajani", Maka = "Makasar", Mand = "Mandaic", Mani = "Manichaean", Marc = "Marchen", Medf = "Medefaidrin", Mend = "Mende Kikakui", Merc = "Meroitic Cursive", Mero = "Meroitic Hieroglyphs", Mlym = "Malayalam", Modi = "Modi", Mong = "Mongolian", Mroo = "Mro", Mtei = "Meetei Mayek", Mult = "Multani", Mymr = "Myanmar", Nagm = "Nag Mundari", Nand = "Nandinagari", Narb = "Old North Arabian", Nbat = "Nabataean", Newa = "Newa", Nkoo = "NKo", Nshu = "Nushu", Ogam = "Ogham", Olck = "Ol Chiki", Orkh = "Old Turkic", Orya = "Oriya", Osge = "Osage", Osma = "Osmanya", Ougr = "Old Uyghur", Palm = "Palmyrene", Pauc = "Pau Cin Hau", Perm = "Old Permic", Phag = "Phags Pa", Phli = "Inscriptional Pahlavi", Phlp = "Psalter Pahlavi", Phnx = "Phoenician", Plrd = "Miao", Prti = "Inscriptional Parthian", Rjng = "Rejang", Rohg = "Hanifi Rohingya", Runr = "Runic", Samr = "Samaritan", Sarb = "Old South Arabian", Saur = "Saurashtra", Sgnw = "SignWriting", Shaw = "Shavian", Shrd = "Sharada", Sidd = "Siddham", Sind = "Khudawadi", Sinh = "Sinhala", Sogd = "Sogdian", Sogo = "Old Sogdian", Sora = "Sora Sompeng", Soyo = "Soyombo", Sund = "Sundanese", Sylo = "Syloti Nagri", Syrc = "Syriac", Tagb = "Tagbanwa", Takr = "Takri", Tale = "Tai Le", Talu = "New Tai Lue", Taml = "Tamil", Tang = "Tangut", Tavt = "Tai Viet", Telu = "Telugu", Tfng = "Tifinagh", Tglg = "Tagalog", Thaa = "Thaana", Thai = "Thai", Tibt = "Tibetan", Tirh = "Tirhuta", Tnsa = "Tangsa", Toto = "Toto", Ugar = "Ugaritic", Vaii = "Vai", Vith = "Vithkuqi", Wara = "Warang Citi", Wcho = "Wancho", Xpeo = "Old Persian", Xsux = "Cuneiform", Yezi = "Yezidi", Yiii = "Yi", Zanb = "Zanabazar Square", Zinh = "Inherited", Zyyy = "Common", Zzzz = "Unknown", }, } -- Required for binary search function in [[Module:Language/scripts]]. -- Cannot get length of module loaded with mw.loadData. data.ranges.length = #data.ranges data.rtl = {} for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do -- [[Module:Lang/data]] has script codes in lowercase; -- this module has script codes with the first letter capitalized. data.rtl[script:gsub("^%a", string.upper)] = true end return data f887eb9f8d53e83c36af36a127f534c3e063e358 Module:Documentation 828 25 240 2022-09-29T01:57:36Z wikipedia>Andrybak 0 update code comment according to [[Special:Diff/989669779]] Scribunto text/plain -- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but are made available in the p -- table for testing purposes. ---------------------------------------------------------------------------- local function message(cfgKey, valArray, expectType) --[[ -- Gets a message from the cfg table and formats it if appropriate. -- The function raises an error if the value from the cfg table is not -- of the type expectType. The default type for expectType is 'string'. -- If the table valArray is present, strings such as $1, $2 etc. in the -- message are substituted with values from the table keys [1], [2] etc. -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." --]] local msg = cfg[cfgKey] expectType = expectType or 'string' if type(msg) ~= expectType then error('message: type error in message cfg.' .. cfgKey .. ' (' .. expectType .. ' expected, got ' .. type(msg) .. ')', 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error('message: no value found for key $' .. match .. ' in message cfg.' .. cfgKey, 4) end return ugsub(msg, '$([1-9][0-9]*)', getMessageVal) end p.message = message local function makeWikilink(page, display) if display then return mw.ustring.format('[[%s|%s]]', page, display) else return mw.ustring.format('[[%s]]', page) end end p.makeWikilink = makeWikilink local function makeCategoryLink(cat, sort) local catns = mw.site.namespaces[14].name return makeWikilink(catns .. ':' .. cat, sort) end p.makeCategoryLink = makeCategoryLink local function makeUrlLink(url, display) return mw.ustring.format('[%s %s]', url, display) end p.makeUrlLink = makeUrlLink local function makeToolbar(...) local ret = {} local lim = select('#', ...) if lim < 1 then return nil end for i = 1, lim do ret[#ret + 1] = select(i, ...) end -- 'documentation-toolbar' return '<span class="' .. message('toolbar-class') .. '">(' .. table.concat(ret, ' &#124; ') .. ')</span>' end p.makeToolbar = makeToolbar ---------------------------------------------------------------------------- -- Argument processing ---------------------------------------------------------------------------- local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame, { valueFunc = function (key, value) if type(value) == 'string' then value = value:match('^%s*(.-)%s*$') -- Remove whitespace. if key == 'heading' or value ~= '' then return value else return nil end else return value end end }) return p[funcName](args) end end ---------------------------------------------------------------------------- -- Entry points ---------------------------------------------------------------------------- function p.nonexistent(frame) if mw.title.getCurrentTitle().subpageText == 'testcases' then return frame:expandTemplate{title = 'module test cases notice'} else return p.main(frame) end end p.main = makeInvokeFunc('_main') function p._main(args) --[[ -- This function defines logic flow for the module. -- @args - table of arguments passed by the user --]] local env = p.getEnvironment(args) local root = mw.html.create() root :wikitext(p._getModuleWikitext(args, env)) :wikitext(p.protectionTemplate(env)) :wikitext(p.sandboxNotice(args, env)) :tag('div') -- 'documentation-container' :addClass(message('container')) :attr('role', 'complementary') :attr('aria-labelledby', args.heading ~= '' and 'documentation-heading' or nil) :attr('aria-label', args.heading == '' and 'Documentation' or nil) :newline() :tag('div') -- 'documentation' :addClass(message('main-div-classes')) :newline() :wikitext(p._startBox(args, env)) :wikitext(p._content(args, env)) :tag('div') -- 'documentation-clear' :addClass(message('clear')) :done() :newline() :done() :wikitext(p._endBox(args, env)) :done() :wikitext(p.addTrackingCategories(env)) -- 'Module:Documentation/styles.css' return mw.getCurrentFrame():extensionTag ( 'templatestyles', '', {src=cfg['templatestyles'] }) .. tostring(root) end ---------------------------------------------------------------------------- -- Environment settings ---------------------------------------------------------------------------- function p.getEnvironment(args) --[[ -- Returns a table with information about the environment, including title -- objects and other namespace- or path-related data. -- @args - table of arguments passed by the user -- -- Title objects include: -- env.title - the page we are making documentation for (usually the current title) -- env.templateTitle - the template (or module, file, etc.) -- env.docTitle - the /doc subpage. -- env.sandboxTitle - the /sandbox subpage. -- env.testcasesTitle - the /testcases subpage. -- -- Data includes: -- env.protectionLevels - the protection levels table of the title object. -- env.subjectSpace - the number of the title's subject namespace. -- env.docSpace - the number of the namespace the title puts its documentation in. -- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace. -- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template. -- -- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value -- returned will be nil. --]] local env, envFuncs = {}, {} -- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value -- returned by that function is memoized in the env table so that we don't call any of the functions -- more than once. (Nils won't be memoized.) setmetatable(env, { __index = function (t, key) local envFunc = envFuncs[key] if envFunc then local success, val = pcall(envFunc) if success then env[key] = val -- Memoise the value. return val end end return nil end }) function envFuncs.title() -- The title object for the current page, or a test page passed with args.page. local title local titleArg = args.page if titleArg then title = mw.title.new(titleArg) else title = mw.title.getCurrentTitle() end return title end function envFuncs.templateTitle() --[[ -- The template (or module, etc.) title object. -- Messages: -- 'sandbox-subpage' --> 'sandbox' -- 'testcases-subpage' --> 'testcases' --]] local subjectSpace = env.subjectSpace local title = env.title local subpage = title.subpageText if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then return mw.title.makeTitle(subjectSpace, title.baseText) else return mw.title.makeTitle(subjectSpace, title.text) end end function envFuncs.docTitle() --[[ -- Title object of the /doc subpage. -- Messages: -- 'doc-subpage' --> 'doc' --]] local title = env.title local docname = args[1] -- User-specified doc page. local docpage if docname then docpage = docname else docpage = env.docpageBase .. '/' .. message('doc-subpage') end return mw.title.new(docpage) end function envFuncs.sandboxTitle() --[[ -- Title object for the /sandbox subpage. -- Messages: -- 'sandbox-subpage' --> 'sandbox' --]] return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage')) end function envFuncs.testcasesTitle() --[[ -- Title object for the /testcases subpage. -- Messages: -- 'testcases-subpage' --> 'testcases' --]] return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) end function envFuncs.protectionLevels() -- The protection levels table of the title object. return env.title.protectionLevels end function envFuncs.subjectSpace() -- The subject namespace number. return mw.site.namespaces[env.title.namespace].subject.id end function envFuncs.docSpace() -- The documentation namespace number. For most namespaces this is the -- same as the subject namespace. However, pages in the Article, File, -- MediaWiki or Category namespaces must have their /doc, /sandbox and -- /testcases pages in talk space. local subjectSpace = env.subjectSpace if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then return subjectSpace + 1 else return subjectSpace end end function envFuncs.docpageBase() -- The base page of the /doc, /sandbox, and /testcases subpages. -- For some namespaces this is the talk page, rather than the template page. local templateTitle = env.templateTitle local docSpace = env.docSpace local docSpaceText = mw.site.namespaces[docSpace].name -- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon. return docSpaceText .. ':' .. templateTitle.text end function envFuncs.compareUrl() -- Diff link between the sandbox and the main template using [[Special:ComparePages]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.fullUrl( 'Special:ComparePages', { page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} ) return tostring(compareUrl) else return nil end end return env end ---------------------------------------------------------------------------- -- Auxiliary templates ---------------------------------------------------------------------------- p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext') function p._getModuleWikitext(args, env) local currentTitle = mw.title.getCurrentTitle() if currentTitle.contentModel ~= 'Scribunto' then return end pcall(require, currentTitle.prefixedText) -- if it fails, we don't care local moduleWikitext = package.loaded["Module:Module wikitext"] if moduleWikitext then return moduleWikitext.main() end end function p.sandboxNotice(args, env) --[=[ -- Generates a sandbox notice for display above sandbox pages. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-notice-image' --> '[[File:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' -- 'sandbox-notice-pagetype-template' --> '[[Wikipedia:Template test cases|template sandbox]] page' -- 'sandbox-notice-pagetype-module' --> '[[Wikipedia:Template test cases|module sandbox]] page' -- 'sandbox-notice-pagetype-other' --> 'sandbox page' -- 'sandbox-notice-compare-link-display' --> 'diff' -- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.' -- 'sandbox-notice-testcases-link-display' --> 'test cases' -- 'sandbox-category' --> 'Template sandboxes' --]=] local title = env.title local sandboxTitle = env.sandboxTitle local templateTitle = env.templateTitle local subjectSpace = env.subjectSpace if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then return nil end -- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text". local omargs = {} omargs.image = message('sandbox-notice-image') -- Get the text. We start with the opening blurb, which is something like -- "This is the template sandbox for [[Template:Foo]] (diff)." local text = '' local pagetype if subjectSpace == 10 then pagetype = message('sandbox-notice-pagetype-template') elseif subjectSpace == 828 then pagetype = message('sandbox-notice-pagetype-module') else pagetype = message('sandbox-notice-pagetype-other') end local templateLink = makeWikilink(templateTitle.prefixedText) local compareUrl = env.compareUrl if compareUrl then local compareDisplay = message('sandbox-notice-compare-link-display') local compareLink = makeUrlLink(compareUrl, compareDisplay) text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) else text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) end -- Get the test cases page blurb if the page exists. This is something like -- "See also the companion subpage for [[Template:Foo/testcases|test cases]]." local testcasesTitle = env.testcasesTitle if testcasesTitle and testcasesTitle.exists then if testcasesTitle.contentModel == "Scribunto" then local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink}) else local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink}) end end -- Add the sandbox to the sandbox category. omargs.text = text .. makeCategoryLink(message('sandbox-category')) -- 'documentation-clear' return '<div class="' .. message('clear') .. '"></div>' .. require('Module:Message box').main('ombox', omargs) end function p.protectionTemplate(env) -- Generates the padlock icon in the top right. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'protection-template' --> 'pp-template' -- 'protection-template-args' --> {docusage = 'yes'} local protectionLevels = env.protectionLevels if not protectionLevels then return nil end local editProt = protectionLevels.edit and protectionLevels.edit[1] local moveProt = protectionLevels.move and protectionLevels.move[1] if editProt then -- The page is edit-protected. return require('Module:Protection banner')._main{ message('protection-reason-edit'), small = true } elseif moveProt and moveProt ~= 'autoconfirmed' then -- The page is move-protected but not edit-protected. Exclude move -- protection with the level "autoconfirmed", as this is equivalent to -- no move protection at all. return require('Module:Protection banner')._main{ action = 'move', small = true } else return nil end end ---------------------------------------------------------------------------- -- Start box ---------------------------------------------------------------------------- p.startBox = makeInvokeFunc('_startBox') function p._startBox(args, env) --[[ -- This function generates the start box. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make -- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox -- which generate the box HTML. --]] env = env or p.getEnvironment(args) local links local content = args.content if not content or args[1] then -- No need to include the links if the documentation is on the template page itself. local linksData = p.makeStartBoxLinksData(args, env) if linksData then links = p.renderStartBoxLinks(linksData) end end -- Generate the start box html. local data = p.makeStartBoxData(args, env, links) if data then return p.renderStartBox(data) else -- User specified no heading. return nil end end function p.makeStartBoxLinksData(args, env) --[[ -- Does initial processing of data to make the [view] [edit] [history] [purge] links. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'view-link-display' --> 'view' -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'purge-link-display' --> 'purge' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'docpage-preload' --> 'Template:Documentation/preload' -- 'create-link-display' --> 'create' --]] local subjectSpace = env.subjectSpace local title = env.title local docTitle = env.docTitle if not title or not docTitle then return nil end if docTitle.isRedirect then docTitle = docTitle.redirectTarget end local data = {} data.title = title data.docTitle = docTitle -- View, display, edit, and purge links if /doc exists. data.viewLinkDisplay = message('view-link-display') data.editLinkDisplay = message('edit-link-display') data.historyLinkDisplay = message('history-link-display') data.purgeLinkDisplay = message('purge-link-display') -- Create link if /doc doesn't exist. local preload = args.preload if not preload then if subjectSpace == 828 then -- Module namespace preload = message('module-preload') else preload = message('docpage-preload') end end data.preload = preload data.createLinkDisplay = message('create-link-display') return data end function p.renderStartBoxLinks(data) --[[ -- Generates the [view][edit][history][purge] or [create][purge] links from the data table. -- @data - a table of data generated by p.makeStartBoxLinksData --]] local function escapeBrackets(s) -- Escapes square brackets with HTML entities. s = s:gsub('%[', '&#91;') -- Replace square brackets with HTML entities. s = s:gsub('%]', '&#93;') return s end local ret local docTitle = data.docTitle local title = data.title local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) ret = '[%s] [%s] [%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) else local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) ret = '[%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, createLink, purgeLink) end return ret end function p.makeStartBoxData(args, env, links) --[=[ -- Does initial processing of data to pass to the start-box render function, p.renderStartBox. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=]]' -- 'template-namespace-heading' --> 'Template documentation' -- 'module-namespace-heading' --> 'Module documentation' -- 'file-namespace-heading' --> 'Summary' -- 'other-namespaces-heading' --> 'Documentation' -- 'testcases-create-link-display' --> 'create' --]=] local subjectSpace = env.subjectSpace if not subjectSpace then -- Default to an "other namespaces" namespace, so that we get at least some output -- if an error occurs. subjectSpace = 2 end local data = {} -- Heading local heading = args.heading -- Blank values are not removed. if heading == '' then -- Don't display the start box if the heading arg is defined but blank. return nil end if heading then data.heading = heading elseif subjectSpace == 10 then -- Template namespace data.heading = message('documentation-icon-wikitext') .. ' ' .. message('template-namespace-heading') elseif subjectSpace == 828 then -- Module namespace data.heading = message('documentation-icon-wikitext') .. ' ' .. message('module-namespace-heading') elseif subjectSpace == 6 then -- File namespace data.heading = message('file-namespace-heading') else data.heading = message('other-namespaces-heading') end -- Heading CSS local headingStyle = args['heading-style'] if headingStyle then data.headingStyleText = headingStyle else -- 'documentation-heading' data.headingClass = message('main-div-heading-class') end -- Data for the [view][edit][history][purge] or [create] links. if links then -- 'mw-editsection-like plainlinks' data.linksClass = message('start-box-link-classes') data.links = links end return data end function p.renderStartBox(data) -- Renders the start box html. -- @data - a table of data generated by p.makeStartBoxData. local sbox = mw.html.create('div') sbox -- 'documentation-startbox' :addClass(message('start-box-class')) :newline() :tag('span') :addClass(data.headingClass) :attr('id', 'documentation-heading') :cssText(data.headingStyleText) :wikitext(data.heading) local links = data.links if links then sbox:tag('span') :addClass(data.linksClass) :attr('id', data.linksId) :wikitext(links) end return tostring(sbox) end ---------------------------------------------------------------------------- -- Documentation content ---------------------------------------------------------------------------- p.content = makeInvokeFunc('_content') function p._content(args, env) -- Displays the documentation contents -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment env = env or p.getEnvironment(args) local docTitle = env.docTitle local content = args.content if not content and docTitle and docTitle.exists then content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle.prefixedText} end -- The line breaks below are necessary so that "=== Headings ===" at the start and end -- of docs are interpreted correctly. return '\n' .. (content or '') .. '\n' end p.contentTitle = makeInvokeFunc('_contentTitle') function p._contentTitle(args, env) env = env or p.getEnvironment(args) local docTitle = env.docTitle if not args.content and docTitle and docTitle.exists then return docTitle.prefixedText else return '' end end ---------------------------------------------------------------------------- -- End box ---------------------------------------------------------------------------- p.endBox = makeInvokeFunc('_endBox') function p._endBox(args, env) --[=[ -- This function generates the end box (also known as the link box). -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- --]=] -- Get environment data. env = env or p.getEnvironment(args) local subjectSpace = env.subjectSpace local docTitle = env.docTitle if not subjectSpace or not docTitle then return nil end -- Check whether we should output the end box at all. Add the end -- box by default if the documentation exists or if we are in the -- user, module or template namespaces. local linkBox = args['link box'] if linkBox == 'off' or not ( docTitle.exists or subjectSpace == 2 or subjectSpace == 828 or subjectSpace == 10 ) then return nil end -- Assemble the link box. local text = '' if linkBox then text = text .. linkBox else text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then -- We are in the user, template or module namespaces. -- Add sandbox and testcases links. -- "Editors can experiment in this template's sandbox and testcases pages." text = text .. (p.makeExperimentBlurb(args, env) or '') .. '<br />' if not args.content and not args[1] then -- "Please add categories to the /doc subpage." -- Don't show this message with inline docs or with an explicitly specified doc page, -- as then it is unclear where to add the categories. text = text .. (p.makeCategoriesBlurb(args, env) or '') end text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" end end local box = mw.html.create('div') -- 'documentation-metadata' box:attr('role', 'note') :addClass(message('end-box-class')) -- 'plainlinks' :addClass(message('end-box-plainlinks')) :wikitext(text) :done() return '\n' .. tostring(box) end function p.makeDocPageBlurb(args, env) --[=[ -- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'transcluded-from-blurb' --> -- 'The above [[Wikipedia:Template documentation|documentation]] -- is [[Help:Transclusion|transcluded]] from $1.' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'create-link-display' --> 'create' -- 'create-module-doc-blurb' --> -- 'You might want to $1 a documentation page for this [[Wikipedia:Lua|Scribunto module]].' --]=] local docTitle = env.docTitle if not docTitle then return nil end local ret if docTitle.exists then -- /doc exists; link to it. local docLink = makeWikilink(docTitle.prefixedText) local editUrl = docTitle:fullUrl{action = 'edit'} local editDisplay = message('edit-link-display') local editLink = makeUrlLink(editUrl, editDisplay) local historyUrl = docTitle:fullUrl{action = 'history'} local historyDisplay = message('history-link-display') local historyLink = makeUrlLink(historyUrl, historyDisplay) ret = message('transcluded-from-blurb', {docLink}) .. ' ' .. makeToolbar(editLink, historyLink) .. '<br />' elseif env.subjectSpace == 828 then -- /doc does not exist; ask to create it. local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} local createDisplay = message('create-link-display') local createLink = makeUrlLink(createUrl, createDisplay) ret = message('create-module-doc-blurb', {createLink}) .. '<br />' end return ret end function p.makeExperimentBlurb(args, env) --[[ -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'sandbox' -- 'sandbox-edit-link-display' --> 'edit' -- 'compare-link-display' --> 'diff' -- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'sandbox-create-link-display' --> 'create' -- 'mirror-edit-summary' --> 'Create sandbox version of $1' -- 'mirror-link-display' --> 'mirror' -- 'mirror-link-preload' --> 'Template:Documentation/mirror' -- 'sandbox-link-display' --> 'sandbox' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display'--> 'edit' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'testcases-create-link-display' --> 'create' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display' --> 'edit' -- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases' -- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases' -- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.' -- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle local testcasesTitle = env.testcasesTitle local templatePage = templateTitle.prefixedText if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then return nil end -- Make links. local sandboxLinks, testcasesLinks if sandboxTitle.exists then local sandboxPage = sandboxTitle.prefixedText local sandboxDisplay = message('sandbox-link-display') local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'} local sandboxEditDisplay = message('sandbox-edit-link-display') local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay) local compareUrl = env.compareUrl local compareLink if compareUrl then local compareDisplay = message('compare-link-display') compareLink = makeUrlLink(compareUrl, compareDisplay) end sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink) else local sandboxPreload if subjectSpace == 828 then sandboxPreload = message('module-sandbox-preload') else sandboxPreload = message('template-sandbox-preload') end local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload} local sandboxCreateDisplay = message('sandbox-create-link-display') local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) local mirrorPreload = message('mirror-link-preload') local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} if subjectSpace == 828 then mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = templateTitle.prefixedText, summary = mirrorSummary} end local mirrorDisplay = message('mirror-link-display') local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink) end if testcasesTitle.exists then local testcasesPage = testcasesTitle.prefixedText local testcasesDisplay = message('testcases-link-display') local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'} local testcasesEditDisplay = message('testcases-edit-link-display') local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) -- for Modules, add testcases run link if exists if testcasesTitle.contentModel == "Scribunto" and testcasesTitle.talkPageTitle and testcasesTitle.talkPageTitle.exists then local testcasesRunLinkDisplay = message('testcases-run-link-display') local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink, testcasesRunLink) else testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) end else local testcasesPreload if subjectSpace == 828 then testcasesPreload = message('module-testcases-preload') else testcasesPreload = message('template-testcases-preload') end local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload} local testcasesCreateDisplay = message('testcases-create-link-display') local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink) end local messageName if subjectSpace == 828 then messageName = 'experiment-blurb-module' else messageName = 'experiment-blurb-template' end return message(messageName, {sandboxLinks, testcasesLinks}) end function p.makeCategoriesBlurb(args, env) --[[ -- Generates the text "Please add categories to the /doc subpage." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'doc-link-display' --> '/doc' -- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.' --]] local docTitle = env.docTitle if not docTitle then return nil end local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display')) return message('add-categories-blurb', {docPathLink}) end function p.makeSubpagesBlurb(args, env) --[[ -- Generates the "Subpages of this template" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'template' -- 'module-pagetype' --> 'module' -- 'default-pagetype' --> 'page' -- 'subpages-link-display' --> 'Subpages of this $1' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle if not subjectSpace or not templateTitle then return nil end local pagetype if subjectSpace == 10 then pagetype = message('template-pagetype') elseif subjectSpace == 828 then pagetype = message('module-pagetype') else pagetype = message('default-pagetype') end local subpagesLink = makeWikilink( 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', message('subpages-link-display', {pagetype}) ) return message('subpages-blurb', {subpagesLink}) end ---------------------------------------------------------------------------- -- Tracking categories ---------------------------------------------------------------------------- function p.addTrackingCategories(env) --[[ -- Check if {{documentation}} is transcluded on a /doc or /testcases page. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'display-strange-usage-category' --> true -- 'doc-subpage' --> 'doc' -- 'testcases-subpage' --> 'testcases' -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' -- -- /testcases pages in the module namespace are not categorised, as they may have -- {{documentation}} transcluded automatically. --]] local title = env.title local subjectSpace = env.subjectSpace if not title or not subjectSpace then return nil end local subpage = title.subpageText local ret = '' if message('display-strange-usage-category', nil, 'boolean') and ( subpage == message('doc-subpage') or subjectSpace ~= 828 and subpage == message('testcases-subpage') ) then ret = ret .. makeCategoryLink(message('strange-usage-category')) end return ret end return p 2fd7faef98df56f55eede30c4ff07b2431823ee1 Template:(( 10 37 73 2022-10-03T21:35:27Z mw>Clump 0 Protected "[[Template:((]]": Highly visible page or template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)) wikitext text/x-wiki {{<noinclude> {{documentation}}[[Category:Workaround templates]] </noinclude> f8c63100e113b89d20396b75811d33e13b808f1a Module:Format link 828 86 188 2022-10-04T13:37:11Z wikipedia>Pppery 0 Avoid Lua erroring when we run out of expensive parser function calls Scribunto text/plain -------------------------------------------------------------------------------- -- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the {{format link}} template. -------------------------------------------------------------------------------- local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg local mArguments -- lazily initialise [[Module:Arguments]] local mError -- lazily initialise [[Module:Error]] local yesno -- lazily initialise [[Module:Yesno]] local p = {} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end local function maybeItalicize(s, shouldItalicize) -- Italicize s if s is a string and the shouldItalicize parameter is true. if s and shouldItalicize then return '<i>' .. s .. '</i>' else return s end end local function parseLink(link) -- Parse a link and return a table with the link's components. -- These components are: -- - link: the link, stripped of any initial colon (always present) -- - page: the page name (always present) -- - section: the page name (may be nil) -- - display: the display text, if manually entered after a pipe (may be nil) link = removeInitialColon(link) -- Find whether a faux display value has been added with the {{!}} magic -- word. local prePipe, display = link:match('^(.-)|(.*)$') link = prePipe or link -- Find the page, if it exists. -- For links like [[#Bar]], the page will be nil. local preHash, postHash = link:match('^(.-)#(.*)$') local page if not preHash then -- We have a link like [[Foo]]. page = link elseif preHash ~= '' then -- We have a link like [[Foo#Bar]]. page = preHash end -- Find the section, if it exists. local section if postHash and postHash ~= '' then section = postHash end return { link = link, page = page, section = section, display = display, } end local function formatDisplay(parsed, options) -- Formats a display string based on a parsed link table (matching the -- output of parseLink) and an options table (matching the input options for -- _formatLink). local page = maybeItalicize(parsed.page, options.italicizePage) local section = maybeItalicize(parsed.section, options.italicizeSection) if (not section) then return page elseif (not page) then return mw.ustring.format('§&nbsp;%s', section) else return mw.ustring.format('%s §&nbsp;%s', page, section) end end local function missingArgError(target) mError = require('Module:Error') return mError.error{message = 'Error: no link or target specified! ([[' .. target .. '#Errors|help]])' } end -------------------------------------------------------------------------------- -- Main functions -------------------------------------------------------------------------------- function p.formatLink(frame) -- The formatLink export function, for use in templates. yesno = require('Module:Yesno') local args = getArgs(frame) local link = args[1] or args.link local target = args[3] or args.target if not (link or target) then return missingArgError('Template:Format link') end return p._formatLink{ link = link, display = args[2] or args.display, target = target, italicizePage = yesno(args.italicizepage), italicizeSection = yesno(args.italicizesection), categorizeMissing = args.categorizemissing } end function p._formatLink(options) -- The formatLink export function, for use in modules. checkType('_formatLink', 1, options, 'table') local function check(key, expectedType) --for brevity checkTypeForNamedArg( '_formatLink', key, options[key], expectedType or 'string', true ) end check('link') check('display') check('target') check('italicizePage', 'boolean') check('italicizeSection', 'boolean') check('categorizeMissing') -- Normalize link and target and check that at least one is present if options.link == '' then options.link = nil end if options.target == '' then options.target = nil end if not (options.link or options.target) then return missingArgError('Module:Format link') end local parsed = parseLink(options.link) local display = options.display or parsed.display local catMissing = options.categorizeMissing local category = '' -- Find the display text if not display then display = formatDisplay(parsed, options) end -- Handle the target option if present if options.target then local parsedTarget = parseLink(options.target) parsed.link = parsedTarget.link parsed.page = parsedTarget.page end -- Test if page exists if a diagnostic category is specified if catMissing and (mw.ustring.len(catMissing) > 0) then local title = nil if parsed.page then title = mw.title.new(parsed.page) end if title and (not title.isExternal) then local success, exists = pcall(function() return title.exists end) if success and not exists then category = mw.ustring.format('[[Category:%s]]', catMissing) end end end -- Format the result as a link if parsed.link == display then return mw.ustring.format('[[:%s]]%s', parsed.link, category) else return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category) end end -------------------------------------------------------------------------------- -- Derived convenience functions -------------------------------------------------------------------------------- function p.formatPages(options, pages) -- Formats an array of pages using formatLink and the given options table, -- and returns it as an array. Nil values are not allowed. local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink{ link = page, categorizeMissing = options.categorizeMissing, italicizePage = options.italicizePage, italicizeSection = options.italicizeSection } end return ret end return p 1253bdd2683ee4badc33856bfd5499b09a7dca1f Template:Flatlist 10 442 1333 2022-10-15T00:38:28Z mw>Clump 0 Reverted edits by [[Special:Contribs/2600:6C55:6D00:1BF3:78C4:CB5F:986A:2409|2600:6C55:6D00:1BF3:78C4:CB5F:986A:2409]] ([[User talk:2600:6C55:6D00:1BF3:78C4:CB5F:986A:2409|talk]]) to last version by Clump wikitext text/x-wiki <onlyinclude><templatestyles src="Template:Flatlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}| {{{1}}} </div>}}</onlyinclude></div> {{Documentation}} 457fae85129828fe5719eedf96107aac37dc02f4 Template:Plainlist/doc 10 41 81 2022-10-21T06:39:40Z mw>ENeRZet 0 text editing wikitext text/x-wiki {{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{Uses TemplateStyles|Template:Plainlist/styles.css}} This template provides a [[:en:Web Content Accessibility Guidelines|WCAG]]/ISO-standards-compliant accessible alternative to {{tag|br|s}} separated lists, which should not be used. == Usage == {{tlx|plainlist}} starts a plain (i.e. unbulleted) list. It uses proper HTML list markup, which is more standards-compliant and more accessible than separating list items with {{tag|br|s}}. Detailed reasons for using this template can be found at [[:en:WP:UBLIST]]. == TemplateData == {{TemplateData header}} <templatedata> { "description": { "en": "Used to create plain (i.e. unbulleted) lists.", "cs": "Slouží k vytváření jednoduchých (tj. bez odrážek) seznamů." }, "format": "inline", "params": { "1": { "label": { "en": "Content", "cs": "Obsah" }, "description": { "en": "The list to wrap.", "cs": "Seznam k zabalení." }, "suggested": true, "type": "content" }, "class": { "label": { "en": "Extra Classes", "cs": "Extra třídy" }, "description": { "en": "Extra class names to add to the `class` attribute.", "cs": "Další názvy tříd, které se mají přidat do atributu `class`." }, "type": "string" } }, "paramOrder": [ "class", "1" ] } </templatedata> == See also == * {{tlx|Unbulleted list}} – Uses [[Module:List]] <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Formatting templates]] }}</includeonly> c5c829e1be67018c2403beee28b7f945f132c172 Module:Tree chart 828 209 596 2022-10-21T06:58:50Z wikipedia>Legoktm 0 Replace [[Module:No globals]] with require( "strict" ) Scribunto text/plain require('strict') local p = {} local cells = mw.loadData('Module:Tree chart/data') function p._main(cell_args) local ret = mw.html.create() local top = ret:tag('tr') :css{ height = '1px', ['text-align'] = 'center' } local bottom = ret:tag('tr') :css{ height = '1px', ['text-align'] = 'center' } for _, v in ipairs(cell_args) do if type(v) == 'string' then top:wikitext(cells[v].t) bottom:wikitext(cells[v].b) else top:tag('td') :attr{ colspan = v.colspan or cell_args.colspan or 6, rowspan = v.rowspan or cell_args.rowspan or 2 } :css{ padding = '0.2em', border = (v.border or cell_args.border or '2') .. 'px solid black' } :cssText(v.boxstyle or cell_args.boxstyle) :wikitext(v.text) end end return tostring(ret) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Tree chart', trim = false, removeBlanks = false}) local cell_args = { colspan = args.colspan, rowspan = args.rowspan, border = args.border, boxstyle = args.boxstyle } for _, val in ipairs(args) do local trimmedVal = val:match('^%s*(.-)%s*$') if trimmedVal == '' then trimmedVal = '$' end if cells[trimmedVal] then table.insert(cell_args, trimmedVal) else -- Unnamed params behave weirdly -- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it local rightTrimmedVal = val:gsub('%s+$','') table.insert(cell_args, { text = args[trimmedVal] or ('{{{'..trimmedVal..'}}}'), colspan = args['colspan_'..rightTrimmedVal], rowspan = args['rowspan_'..rightTrimmedVal], border = args['border_'..rightTrimmedVal], boxstyle = args['boxstyle_'..rightTrimmedVal] }) end end return p._main(cell_args) end return p 6ae1652b12114e8af9fa123efd3bd2abc164e6fd Module:Protection banner 828 97 210 2022-10-21T08:07:11Z wikipedia>WOSlinker 0 use require('strict') instead of require('Module:No globals') Scribunto text/plain -- This module implements {{pp-meta}} and its daughter templates such as -- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}. -- Initialise necessary modules. require('strict') local makeFileLink = require('Module:File link')._main local effectiveProtectionLevel = require('Module:Effective protection level')._main local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main local yesno = require('Module:Yesno') -- Lazily initialise modules and objects we don't always need. local getArgs, makeMessageBox, lang -- Set constants. local CONFIG_MODULE = 'Module:Protection banner/config' -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function makeCategoryLink(cat, sort) if cat then return string.format( '[[%s:%s|%s]]', mw.site.namespaces[14].name, cat, sort ) end end -- Validation function for the expiry and the protection date local function validateDate(dateString, dateType) if not lang then lang = mw.language.getContentLanguage() end local success, result = pcall(lang.formatDate, lang, 'U', dateString) if success then result = tonumber(result) if result then return result end end error(string.format( 'invalid %s: %s', dateType, tostring(dateString) ), 4) end local function makeFullUrl(page, query, display) return string.format( '[%s %s]', tostring(mw.uri.fullUrl(page, query)), display ) end -- Given a directed graph formatted as node -> table of direct successors, -- get a table of all nodes reachable from a given node (though always -- including the given node). local function getReachableNodes(graph, start) local toWalk, retval = {[start] = true}, {} while true do -- Can't use pairs() since we're adding and removing things as we're iterating local k = next(toWalk) -- This always gets the "first" key if k == nil then return retval end toWalk[k] = nil retval[k] = true for _,v in ipairs(graph[k]) do if not retval[v] then toWalk[v] = true end end end end -------------------------------------------------------------------------------- -- Protection class -------------------------------------------------------------------------------- local Protection = {} Protection.__index = Protection Protection.supportedActions = { edit = true, move = true, autoreview = true, upload = true } Protection.bannerConfigFields = { 'text', 'explanation', 'tooltip', 'alt', 'link', 'image' } function Protection.new(args, cfg, title) local obj = {} obj._cfg = cfg obj.title = title or mw.title.getCurrentTitle() -- Set action if not args.action then obj.action = 'edit' elseif Protection.supportedActions[args.action] then obj.action = args.action else error(string.format( 'invalid action: %s', tostring(args.action) ), 3) end -- Set level obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title) if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then -- Users need to be autoconfirmed to move pages anyway, so treat -- semi-move-protected pages as unprotected. obj.level = '*' end -- Set expiry local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title) if effectiveExpiry == 'infinity' then obj.expiry = 'indef' elseif effectiveExpiry ~= 'unknown' then obj.expiry = validateDate(effectiveExpiry, 'expiry date') end -- Set reason if args[1] then obj.reason = mw.ustring.lower(args[1]) if obj.reason:find('|') then error('reasons cannot contain the pipe character ("|")', 3) end end -- Set protection date if args.date then obj.protectionDate = validateDate(args.date, 'protection date') end -- Set banner config do obj.bannerConfig = {} local configTables = {} if cfg.banners[obj.action] then configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason] end if cfg.defaultBanners[obj.action] then configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level] configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default end configTables[#configTables + 1] = cfg.masterBanner for i, field in ipairs(Protection.bannerConfigFields) do for j, t in ipairs(configTables) do if t[field] then obj.bannerConfig[field] = t[field] break end end end end return setmetatable(obj, Protection) end function Protection:isUserScript() -- Whether the page is a user JavaScript or CSS page. local title = self.title return title.namespace == 2 and ( title.contentModel == 'javascript' or title.contentModel == 'css' ) end function Protection:isProtected() return self.level ~= '*' end function Protection:shouldShowLock() -- Whether we should output a banner/padlock return self:isProtected() and not self:isUserScript() end -- Whether this page needs a protection category. Protection.shouldHaveProtectionCategory = Protection.shouldShowLock function Protection:isTemporary() return type(self.expiry) == 'number' end function Protection:makeProtectionCategory() if not self:shouldHaveProtectionCategory() then return '' end local cfg = self._cfg local title = self.title -- Get the expiry key fragment. local expiryFragment if self.expiry == 'indef' then expiryFragment = self.expiry elseif type(self.expiry) == 'number' then expiryFragment = 'temp' end -- Get the namespace key fragment. local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace] if not namespaceFragment and title.namespace % 2 == 1 then namespaceFragment = 'talk' end -- Define the order that key fragments are tested in. This is done with an -- array of tables containing the value to be tested, along with its -- position in the cfg.protectionCategories table. local order = { {val = expiryFragment, keypos = 1}, {val = namespaceFragment, keypos = 2}, {val = self.reason, keypos = 3}, {val = self.level, keypos = 4}, {val = self.action, keypos = 5} } --[[ -- The old protection templates used an ad-hoc protection category system, -- with some templates prioritising namespaces in their categories, and -- others prioritising the protection reason. To emulate this in this module -- we use the config table cfg.reasonsWithNamespacePriority to set the -- reasons for which namespaces have priority over protection reason. -- If we are dealing with one of those reasons, move the namespace table to -- the end of the order table, i.e. give it highest priority. If not, the -- reason should have highest priority, so move that to the end of the table -- instead. --]] table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3)) --[[ -- Define the attempt order. Inactive subtables (subtables with nil "value" -- fields) are moved to the end, where they will later be given the key -- "all". This is to cut down on the number of table lookups in -- cfg.protectionCategories, which grows exponentially with the number of -- non-nil keys. We keep track of the number of active subtables with the -- noActive parameter. --]] local noActive, attemptOrder do local active, inactive = {}, {} for i, t in ipairs(order) do if t.val then active[#active + 1] = t else inactive[#inactive + 1] = t end end noActive = #active attemptOrder = active for i, t in ipairs(inactive) do attemptOrder[#attemptOrder + 1] = t end end --[[ -- Check increasingly generic key combinations until we find a match. If a -- specific category exists for the combination of key fragments we are -- given, that match will be found first. If not, we keep trying different -- key fragment combinations until we match using the key -- "all-all-all-all-all". -- -- To generate the keys, we index the key subtables using a binary matrix -- with indexes i and j. j is only calculated up to the number of active -- subtables. For example, if there were three active subtables, the matrix -- would look like this, with 0 corresponding to the key fragment "all", and -- 1 corresponding to other key fragments. -- -- j 1 2 3 -- i -- 1 1 1 1 -- 2 0 1 1 -- 3 1 0 1 -- 4 0 0 1 -- 5 1 1 0 -- 6 0 1 0 -- 7 1 0 0 -- 8 0 0 0 -- -- Values of j higher than the number of active subtables are set -- to the string "all". -- -- A key for cfg.protectionCategories is constructed for each value of i. -- The position of the value in the key is determined by the keypos field in -- each subtable. --]] local cats = cfg.protectionCategories for i = 1, 2^noActive do local key = {} for j, t in ipairs(attemptOrder) do if j > noActive then key[t.keypos] = 'all' else local quotient = i / 2 ^ (j - 1) quotient = math.ceil(quotient) if quotient % 2 == 1 then key[t.keypos] = t.val else key[t.keypos] = 'all' end end end key = table.concat(key, '|') local attempt = cats[key] if attempt then return makeCategoryLink(attempt, title.text) end end return '' end function Protection:isIncorrect() local expiry = self.expiry return not self:shouldHaveProtectionCategory() or type(expiry) == 'number' and expiry < os.time() end function Protection:isTemplateProtectedNonTemplate() local action, namespace = self.action, self.title.namespace return self.level == 'templateeditor' and ( (action ~= 'edit' and action ~= 'move') or (namespace ~= 10 and namespace ~= 828) ) end function Protection:makeCategoryLinks() local msg = self._cfg.msg local ret = {self:makeProtectionCategory()} if self:isIncorrect() then ret[#ret + 1] = makeCategoryLink( msg['tracking-category-incorrect'], self.title.text ) end if self:isTemplateProtectedNonTemplate() then ret[#ret + 1] = makeCategoryLink( msg['tracking-category-template'], self.title.text ) end return table.concat(ret) end -------------------------------------------------------------------------------- -- Blurb class -------------------------------------------------------------------------------- local Blurb = {} Blurb.__index = Blurb Blurb.bannerTextFields = { text = true, explanation = true, tooltip = true, alt = true, link = true } function Blurb.new(protectionObj, args, cfg) return setmetatable({ _cfg = cfg, _protectionObj = protectionObj, _args = args }, Blurb) end -- Private methods -- function Blurb:_formatDate(num) -- Formats a Unix timestamp into dd Month, YYYY format. lang = lang or mw.language.getContentLanguage() local success, date = pcall( lang.formatDate, lang, self._cfg.msg['expiry-date-format'] or 'j F Y', '@' .. tostring(num) ) if success then return date end end function Blurb:_getExpandedMessage(msgKey) return self:_substituteParameters(self._cfg.msg[msgKey]) end function Blurb:_substituteParameters(msg) if not self._params then local parameterFuncs = {} parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter parameterFuncs.EDITREQUEST = self._makeEditRequestParameter parameterFuncs.EXPIRY = self._makeExpiryParameter parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter parameterFuncs.IMAGELINK = self._makeImageLinkParameter parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter parameterFuncs.PAGETYPE = self._makePagetypeParameter parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter parameterFuncs.TALKPAGE = self._makeTalkPageParameter parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter parameterFuncs.VANDAL = self._makeVandalTemplateParameter self._params = setmetatable({}, { __index = function (t, k) local param if parameterFuncs[k] then param = parameterFuncs[k](self) end param = param or '' t[k] = param return param end }) end msg = msg:gsub('${(%u+)}', self._params) return msg end function Blurb:_makeCurrentVersionParameter() -- A link to the page history or the move log, depending on the kind of -- protection. local pagename = self._protectionObj.title.prefixedText if self._protectionObj.action == 'move' then -- We need the move log link. return makeFullUrl( 'Special:Log', {type = 'move', page = pagename}, self:_getExpandedMessage('current-version-move-display') ) else -- We need the history link. return makeFullUrl( pagename, {action = 'history'}, self:_getExpandedMessage('current-version-edit-display') ) end end function Blurb:_makeEditRequestParameter() local mEditRequest = require('Module:Submit an edit request') local action = self._protectionObj.action local level = self._protectionObj.level -- Get the edit request type. local requestType if action == 'edit' then if level == 'autoconfirmed' then requestType = 'semi' elseif level == 'extendedconfirmed' then requestType = 'extended' elseif level == 'templateeditor' then requestType = 'template' end end requestType = requestType or 'full' -- Get the display value. local display = self:_getExpandedMessage('edit-request-display') return mEditRequest._link{type = requestType, display = display} end function Blurb:_makeExpiryParameter() local expiry = self._protectionObj.expiry if type(expiry) == 'number' then return self:_formatDate(expiry) else return expiry end end function Blurb:_makeExplanationBlurbParameter() -- Cover special cases first. if self._protectionObj.title.namespace == 8 then -- MediaWiki namespace return self:_getExpandedMessage('explanation-blurb-nounprotect') end -- Get explanation blurb table keys local action = self._protectionObj.action local level = self._protectionObj.level local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject' -- Find the message in the explanation blurb table and substitute any -- parameters. local explanations = self._cfg.explanationBlurbs local msg if explanations[action][level] and explanations[action][level][talkKey] then msg = explanations[action][level][talkKey] elseif explanations[action][level] and explanations[action][level].default then msg = explanations[action][level].default elseif explanations[action].default and explanations[action].default[talkKey] then msg = explanations[action].default[talkKey] elseif explanations[action].default and explanations[action].default.default then msg = explanations[action].default.default else error(string.format( 'could not find explanation blurb for action "%s", level "%s" and talk key "%s"', action, level, talkKey ), 8) end return self:_substituteParameters(msg) end function Blurb:_makeImageLinkParameter() local imageLinks = self._cfg.imageLinks local action = self._protectionObj.action local level = self._protectionObj.level local msg if imageLinks[action][level] then msg = imageLinks[action][level] elseif imageLinks[action].default then msg = imageLinks[action].default else msg = imageLinks.edit.default end return self:_substituteParameters(msg) end function Blurb:_makeIntroBlurbParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('intro-blurb-expiry') else return self:_getExpandedMessage('intro-blurb-noexpiry') end end function Blurb:_makeIntroFragmentParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('intro-fragment-expiry') else return self:_getExpandedMessage('intro-fragment-noexpiry') end end function Blurb:_makePagetypeParameter() local pagetypes = self._cfg.pagetypes return pagetypes[self._protectionObj.title.namespace] or pagetypes.default or error('no default pagetype defined', 8) end function Blurb:_makeProtectionBlurbParameter() local protectionBlurbs = self._cfg.protectionBlurbs local action = self._protectionObj.action local level = self._protectionObj.level local msg if protectionBlurbs[action][level] then msg = protectionBlurbs[action][level] elseif protectionBlurbs[action].default then msg = protectionBlurbs[action].default elseif protectionBlurbs.edit.default then msg = protectionBlurbs.edit.default else error('no protection blurb defined for protectionBlurbs.edit.default', 8) end return self:_substituteParameters(msg) end function Blurb:_makeProtectionDateParameter() local protectionDate = self._protectionObj.protectionDate if type(protectionDate) == 'number' then return self:_formatDate(protectionDate) else return protectionDate end end function Blurb:_makeProtectionLevelParameter() local protectionLevels = self._cfg.protectionLevels local action = self._protectionObj.action local level = self._protectionObj.level local msg if protectionLevels[action][level] then msg = protectionLevels[action][level] elseif protectionLevels[action].default then msg = protectionLevels[action].default elseif protectionLevels.edit.default then msg = protectionLevels.edit.default else error('no protection level defined for protectionLevels.edit.default', 8) end return self:_substituteParameters(msg) end function Blurb:_makeProtectionLogParameter() local pagename = self._protectionObj.title.prefixedText if self._protectionObj.action == 'autoreview' then -- We need the pending changes log. return makeFullUrl( 'Special:Log', {type = 'stable', page = pagename}, self:_getExpandedMessage('pc-log-display') ) else -- We need the protection log. return makeFullUrl( 'Special:Log', {type = 'protect', page = pagename}, self:_getExpandedMessage('protection-log-display') ) end end function Blurb:_makeTalkPageParameter() return string.format( '[[%s:%s#%s|%s]]', mw.site.namespaces[self._protectionObj.title.namespace].talk.name, self._protectionObj.title.text, self._args.section or 'top', self:_getExpandedMessage('talk-page-link-display') ) end function Blurb:_makeTooltipBlurbParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('tooltip-blurb-expiry') else return self:_getExpandedMessage('tooltip-blurb-noexpiry') end end function Blurb:_makeTooltipFragmentParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('tooltip-fragment-expiry') else return self:_getExpandedMessage('tooltip-fragment-noexpiry') end end function Blurb:_makeVandalTemplateParameter() return mw.getCurrentFrame():expandTemplate{ title="vandal-m", args={self._args.user or self._protectionObj.title.baseText} } end -- Public methods -- function Blurb:makeBannerText(key) -- Validate input. if not key or not Blurb.bannerTextFields[key] then error(string.format( '"%s" is not a valid banner config field', tostring(key) ), 2) end -- Generate the text. local msg = self._protectionObj.bannerConfig[key] if type(msg) == 'string' then return self:_substituteParameters(msg) elseif type(msg) == 'function' then msg = msg(self._protectionObj, self._args) if type(msg) ~= 'string' then error(string.format( 'bad output from banner config function with key "%s"' .. ' (expected string, got %s)', tostring(key), type(msg) ), 4) end return self:_substituteParameters(msg) end end -------------------------------------------------------------------------------- -- BannerTemplate class -------------------------------------------------------------------------------- local BannerTemplate = {} BannerTemplate.__index = BannerTemplate function BannerTemplate.new(protectionObj, cfg) local obj = {} obj._cfg = cfg -- Set the image filename. local imageFilename = protectionObj.bannerConfig.image if imageFilename then obj._imageFilename = imageFilename else -- If an image filename isn't specified explicitly in the banner config, -- generate it from the protection status and the namespace. local action = protectionObj.action local level = protectionObj.level local namespace = protectionObj.title.namespace local reason = protectionObj.reason -- Deal with special cases first. if ( namespace == 10 or namespace == 828 or reason and obj._cfg.indefImageReasons[reason] ) and action == 'edit' and level == 'sysop' and not protectionObj:isTemporary() then -- Fully protected modules and templates get the special red "indef" -- padlock. obj._imageFilename = obj._cfg.msg['image-filename-indef'] else -- Deal with regular protection types. local images = obj._cfg.images if images[action] then if images[action][level] then obj._imageFilename = images[action][level] elseif images[action].default then obj._imageFilename = images[action].default end end end end return setmetatable(obj, BannerTemplate) end function BannerTemplate:renderImage() local filename = self._imageFilename or self._cfg.msg['image-filename-default'] or 'Transparent.gif' return makeFileLink{ file = filename, size = (self.imageWidth or 20) .. 'px', alt = self._imageAlt, link = self._imageLink, caption = self.imageCaption } end -------------------------------------------------------------------------------- -- Banner class -------------------------------------------------------------------------------- local Banner = setmetatable({}, BannerTemplate) Banner.__index = Banner function Banner.new(protectionObj, blurbObj, cfg) local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb. obj.imageWidth = 40 obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip. obj._reasonText = blurbObj:makeBannerText('text') obj._explanationText = blurbObj:makeBannerText('explanation') obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing. return setmetatable(obj, Banner) end function Banner:__tostring() -- Renders the banner. makeMessageBox = makeMessageBox or require('Module:Message box').main local reasonText = self._reasonText or error('no reason text set', 2) local explanationText = self._explanationText local mbargs = { page = self._page, type = 'protection', image = self:renderImage(), text = string.format( "'''%s'''%s", reasonText, explanationText and '<br />' .. explanationText or '' ) } return makeMessageBox('mbox', mbargs) end -------------------------------------------------------------------------------- -- Padlock class -------------------------------------------------------------------------------- local Padlock = setmetatable({}, BannerTemplate) Padlock.__index = Padlock function Padlock.new(protectionObj, blurbObj, cfg) local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb. obj.imageWidth = 20 obj.imageCaption = blurbObj:makeBannerText('tooltip') obj._imageAlt = blurbObj:makeBannerText('alt') obj._imageLink = blurbObj:makeBannerText('link') obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action] or cfg.padlockIndicatorNames.default or 'pp-default' return setmetatable(obj, Padlock) end function Padlock:__tostring() local frame = mw.getCurrentFrame() -- The nowiki tag helps prevent whitespace at the top of articles. return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{ name = 'indicator', args = {name = self._indicatorName}, content = self:renderImage() } end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} function p._exportClasses() -- This is used for testing purposes. return { Protection = Protection, Blurb = Blurb, BannerTemplate = BannerTemplate, Banner = Banner, Padlock = Padlock, } end function p._main(args, cfg, title) args = args or {} cfg = cfg or require(CONFIG_MODULE) local protectionObj = Protection.new(args, cfg, title) local ret = {} -- If a page's edit protection is equally or more restrictive than its -- protection from some other action, then don't bother displaying anything -- for the other action (except categories). if not yesno(args.catonly) and (protectionObj.action == 'edit' or args.demolevel or not getReachableNodes( cfg.hierarchy, protectionObj.level )[effectiveProtectionLevel('edit', protectionObj.title)]) then -- Initialise the blurb object local blurbObj = Blurb.new(protectionObj, args, cfg) -- Render the banner if protectionObj:shouldShowLock() then ret[#ret + 1] = tostring( (yesno(args.small) and Padlock or Banner) .new(protectionObj, blurbObj, cfg) ) end end -- Render the categories if yesno(args.category) ~= false then ret[#ret + 1] = protectionObj:makeCategoryLinks() end return table.concat(ret) end function p.main(frame, cfg) cfg = cfg or require(CONFIG_MODULE) -- Find default args, if any. local parent = frame.getParent and frame:getParent() local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')] -- Find user args, and use the parent frame if we are being called from a -- wrapper template. getArgs = getArgs or require('Module:Arguments').getArgs local userArgs = getArgs(frame, { parentOnly = defaultArgs, frameOnly = not defaultArgs }) -- Build the args table. User-specified args overwrite default args. local args = {} for k, v in pairs(defaultArgs or {}) do args[k] = v end for k, v in pairs(userArgs) do args[k] = v end return p._main(args, cfg) end return p 894f0884d4c2da1ce19d385b96f59af654b0946a Module:Italic title 828 195 550 2022-10-21T21:17:12Z wikipedia>Legoktm 0 Replace [[Module:No globals]] with require( "strict" ) Scribunto text/plain -- This module implements {{italic title}}. require('strict') local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg local yesno = require('Module:Yesno') -------------------------------------------------------------------------------- -- ItalicTitle class -------------------------------------------------------------------------------- local ItalicTitle = {} do ---------------------------------------------------------------------------- -- Class attributes and functions -- Things that belong to the class are here. Things that belong to each -- object are in the constructor. ---------------------------------------------------------------------------- -- Keys of title parts that can be italicized. local italicizableKeys = { namespace = true, title = true, dab = true, } ---------------------------------------------------------------------------- -- ItalicTitle constructor -- This contains all the dynamic attributes and methods. ---------------------------------------------------------------------------- function ItalicTitle.new() local obj = {} -- Function for checking self variable in methods. local checkSelf = libraryUtil.makeCheckSelfFunction( 'ItalicTitle', 'obj', obj, 'ItalicTitle object' ) -- Checks a key is present in a lookup table. -- Param: name - the function name. -- Param: argId - integer position of the key in the argument list. -- Param: key - the key. -- Param: lookupTable - the table to look the key up in. local function checkKey(name, argId, key, lookupTable) if not lookupTable[key] then error(string.format( "bad argument #%d to '%s' ('%s' is not a valid key)", argId, name, key ), 3) end end -- Set up object structure. local parsed = false local categories = {} local italicizedKeys = {} local italicizedSubstrings = {} -- Parses a title object into its namespace text, title, and -- disambiguation text. -- Param: options - a table of options with the following keys: -- title - the title object to parse -- ignoreDab - ignore any disambiguation parentheses -- Returns the current object. function obj:parseTitle(options) checkSelf(self, 'parseTitle') checkType('parseTitle', 1, options, 'table') checkTypeForNamedArg('parseTitle', 'title', options.title, 'table') local title = options.title -- Title and dab text local prefix, parentheses if not options.ignoreDab then prefix, parentheses = mw.ustring.match( title.text, '^(.+) %(([^%(%)]+)%)$' ) end if prefix and parentheses then self.title = prefix self.dab = parentheses else self.title = title.text end -- Namespace local namespace = mw.site.namespaces[title.namespace].name if namespace and #namespace >= 1 then self.namespace = namespace end -- Register the object as having parsed a title. parsed = true return self end -- Italicizes part of the title. -- Param: key - the key of the title part to be italicized. Possible -- keys are contained in the italicizableKeys table. -- Returns the current object. function obj:italicize(key) checkSelf(self, 'italicize') checkType('italicize', 1, key, 'string') checkKey('italicize', 1, key, italicizableKeys) italicizedKeys[key] = true return self end -- Un-italicizes part of the title. -- Param: key - the key of the title part to be un-italicized. Possible -- keys are contained in the italicizableKeys table. -- Returns the current object. function obj:unitalicize(key) checkSelf(self, 'unitalicize') checkType('unitalicize', 1, key, 'string') checkKey('unitalicize', 1, key, italicizableKeys) italicizedKeys[key] = nil return self end -- Italicizes a substring in the title. This only affects the main part -- of the title, not the namespace or the disambiguation text. -- Param: s - the substring to be italicized. -- Returns the current object. function obj:italicizeSubstring(s) checkSelf(self, 'italicizeSubstring') checkType('italicizeSubstring', 1, s, 'string') italicizedSubstrings[s] = true return self end -- Un-italicizes a substring in the title. This only affects the main -- part of the title, not the namespace or the disambiguation text. -- Param: s - the substring to be un-italicized. -- Returns the current object. function obj:unitalicizeSubstring(s) checkSelf(self, 'unitalicizeSubstring') checkType('unitalicizeSubstring', 1, s, 'string') italicizedSubstrings[s] = nil return self end -- Renders the object into a page name. If no title has yet been parsed, -- the current title is used. -- Returns string function obj:renderTitle() checkSelf(self, 'renderTitle') -- Italicizes a string -- Param: s - the string to italicize -- Returns string. local function italicize(s) assert(type(s) == 'string', 's was not a string') assert(s ~= '', 's was the empty string') return string.format('<i>%s</i>', s) end -- Escape characters in a string that are magic in Lua patterns. -- Param: pattern - the pattern to escape -- Returns string. local function escapeMagicCharacters(s) assert(type(s) == 'string', 's was not a string') return s:gsub('%p', '%%%0') end -- If a title hasn't been parsed yet, parse the current title. if not parsed then self:parseTitle{title = mw.title.getCurrentTitle()} end -- Italicize the different parts of the title and store them in a -- titleParts table to be joined together later. local titleParts = {} -- Italicize the italicizable keys. for key in pairs(italicizableKeys) do if self[key] then if italicizedKeys[key] then titleParts[key] = italicize(self[key]) else titleParts[key] = self[key] end end end -- Italicize substrings. If there are any substrings to be -- italicized then start from the raw title, as this overrides any -- italicization of the main part of the title. if next(italicizedSubstrings) then titleParts.title = self.title for s in pairs(italicizedSubstrings) do local pattern = escapeMagicCharacters(s) local italicizedTitle, nReplacements = titleParts.title:gsub( pattern, italicize ) titleParts.title = italicizedTitle -- If we didn't make any replacements then it means that we -- have been passed a bad substring or that the page has -- been moved to a bad title, so add a tracking category. if nReplacements < 1 then categories['Pages using italic title with no matching string'] = true end end end -- Assemble the title together from the parts. local ret = '' if titleParts.namespace then ret = ret .. titleParts.namespace .. ':' end ret = ret .. titleParts.title if titleParts.dab then ret = ret .. ' (' .. titleParts.dab .. ')' end return ret end -- Returns an expanded DISPLAYTITLE parser function called with the -- result of obj:renderTitle, plus any other optional arguments. -- Returns string function obj:renderDisplayTitle(...) checkSelf(self, 'renderDisplayTitle') return mw.getCurrentFrame():callParserFunction( 'DISPLAYTITLE', self:renderTitle(), ... ) end -- Returns an expanded DISPLAYTITLE parser function called with the -- result of obj:renderTitle, plus any other optional arguments, plus -- any tracking categories. -- Returns string function obj:render(...) checkSelf(self, 'render') local ret = self:renderDisplayTitle(...) for cat in pairs(categories) do ret = ret .. string.format( '[[Category:%s]]', cat ) end return ret end return obj end end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} local function getArgs(frame, wrapper) assert(type(wrapper) == 'string', 'wrapper was not a string') return require('Module:Arguments').getArgs(frame, { wrappers = wrapper }) end -- Main function for {{italic title}} function p._main(args) checkType('_main', 1, args, 'table') local italicTitle = ItalicTitle.new() italicTitle:parseTitle{ title = mw.title.getCurrentTitle(), ignoreDab = yesno(args.all, false) } if args.string then italicTitle:italicizeSubstring(args.string) else italicTitle:italicize('title') end return italicTitle:render(args[1]) end function p.main(frame) return p._main(getArgs(frame, 'Template:Italic title')) end function p._dabonly(args) return ItalicTitle.new() :italicize('dab') :render(args[1]) end function p.dabonly(frame) return p._dabonly(getArgs(frame, 'Template:Italic dab')) end return p 9b49016c8f526f680e9ecdaf36ec4ceafda2a2f8 Module:Nihongo 828 255 734 2022-10-22T09:05:07Z wikipedia>WOSlinker 0 use require('strict') instead of require('Module:No globals') Scribunto text/plain require('strict'); --[[--------------------------< E R R O R _ M E S S A G E S >-------------------------------------------------- error messaging; keys to this table are the template base names: 'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc ]] local err_msg = { ['nihongo'] = 'Japanese or romaji text required', ['hanyu'] = 'Chinese or pinyin text required', } local err_cat = { ['nihongo'] = '[[Category:Nihongo template errors]]', ['hanyu'] = '[[Category:Hanyu template errors]]', } --[[--------------------------< C O N F I G U R A T I O N >---------------------------------------------------- configuration setting for the various templates. keys to this table are the template names without spacing ]] local cfg = { ['nihongo'] = { tag = 'ja', system = 'hepburn', system_link = '[[Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo3'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo krt'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo foot'] = { tag = 'ja', system = 'hepburn', system_link = '[[Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['hanyu'] = { tag = 'zh', system = 'pinyin', system_link = '[[Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu3'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu hrt'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu foot'] = { tag = 'zh', system = 'pinyin', system_link = '[[Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, } --[[--------------------------< E R R O R _ M E S S A G E >---------------------------------------------------- Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese> or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors ]] local function error_message (template) local msg = {'<span class="error" style="font-size:100%">error: {{'}; table.insert (msg, template); table.insert (msg, '}}: '); table.insert (msg, cfg[template].err_msg); table.insert (msg, ' ([[Template:'); table.insert (msg, template); table.insert (msg, '|help]])</span>'); if 0 == mw.title.getCurrentTitle().namespace then table.insert (msg, cfg[template].err_cat); end return table.concat (msg); end --[[--------------------------< R E N D E R E R >-------------------------------------------------------------- Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{} from set/unset parameters: args[1] (english text) has a value of 8 (set) or 0 (unset) args[2] (native text) has a value of 4 args[3] (romanized text) has a value of 2 args[4] (extra) has a value of 1 index, the sum of these values, gets the appropriate format string from formatting{} table with associated values from the formatting[index][2] table ]] local function renderer (args, formatting, extra2) local output; local index = 0; -- index into formatting{} local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1) for i=1, 5 do -- spin through args[1] – args[4] index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{} end output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil; if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{} output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced end -- (nihongo and nihongo3) or removed (nihongo foot) return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close end --[[--------------------------< R O M A N I Z E D _ K E R N >-------------------------------------------------- Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses (<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>) <ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced) <romanized> is the return from lang_module._transl() so is not wrapped in parentheses ]] local function romanized_kern (ret_string, romanized) if not romanized or ('' == romanized) then -- if romanized not set return ret_string; -- then we're done end local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned end if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned end return ret_string; -- done end --[[--------------------------< C O M M O N >------------------------------------------------------------------ Common support for {{nihongo}} and {{hanyu}} render order: is translated (English), native, romanized <template> is used to select the appropriate cfg table ]] local function common (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix end if romanized then romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized) {'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized) {'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >---------- Common support for {{nihongo3}} and {{hanyu3}} render order: is romanized, native, translated (English) <template> is used to select the appropriate cfg table ]] local function common_romanized_native_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english) {'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >---------- Common support for {{nihongo krt}} and {{hanyu krt}} render order: is native, romanized, translated (English) <template> is used to select the appropriate cfg table ]] local function common_native_romanized_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>%s', {native}}, -- 4 - native {'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra) {'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized) {'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english) {'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra) {'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english) {'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ F O O T >-------------------------------------------------------- Common support for {{nihongo foot}} and {{hanyu foot}} render order: is English<ref>native, romanized</ref> <template> is used to select the appropriate cfg table ]] local function common_foot (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local post = args[6] or args.post; local group = args.group; local ref_name = args.ref_name local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix end if romanized then romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { {'%s', {extra}}, -- 1 - extra {'%s', {romanized}}, -- 2 - romanized {'%s, %s', {romanized, extra}}, -- 3 - romanized, extra {'%s', {native}}, -- 4 - native {'%s, %s', {native, extra}}, -- 5 - native, extra {'%s, %s', {native, romanized}}, -- 6 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra -- from here english is used in the mapping but not rendered by renderer so not included in the table {'', {''}}, -- 8 - english {'%s', {extra}}, -- 9 - extra {'%s', {romanized}}, -- 10 - romanized {'%s, %s', {romanized, extra}}, -- 11 - romanized, extra {'%s', {native}}, -- 12 - native {'%s, %s', {native, extra}}, -- 13 - native, extra {'%s, %s', {native, romanized}}, -- 14 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra } if english and post then -- rewrite english to include |post= english = english .. post; -- if english has a value append post else just post elseif post then english = post; -- english not set, use post elseif not english then -- neither are set english = ''; -- make english an empty string for concatenation end if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty) local content = renderer (args, formatting, extra2); content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag else return english; -- nothing to be inside ref tag so just return english end end --[=[-------------------------< N I H O N G O >---------------------------------------------------------------- Implement {{nihongo}} using Module:Lang for language and transliteration markup {{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function nihongo (frame) return common (frame, 'nihongo') end --[=[-------------------------< N I H O N G O 3 >-------------------------------------------------------------- Implement {{nihongo3}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo3 (frame) return common_romanized_native_translated (frame, 'nihongo3') end --[=[-------------------------< N I H O N G O _ K R T >-------------------------------------------------------- Implement {{nihongo krt}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo_krt (frame) return common_native_romanized_translated (frame, 'nihongo krt') end --[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------ Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup {{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function nihongo_foot (frame) return common_foot (frame, 'nihongo foot') end --[=[-------------------------< H A N Y U >-------------------------------------------------------------------- Implement {{hanyu}} using Module:Lang for language and transliteration markup {{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function hanyu (frame) return common (frame, 'hanyu') end --[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------ Implement {{hanyu3}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu3 (frame) return common_romanized_native_translated (frame, 'hanyu3') end --[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------ Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu_hrt (frame) return common_native_romanized_translated (frame, 'hanyu hrt') end --[=[-------------------------< H A N Y U _ F O O T >---------------------------------------------------------- Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup {{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function hanyu_foot (frame) return common_foot (frame, 'hanyu foot') end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { nihongo = nihongo, nihongo3 = nihongo3, nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line nihongo_krt = nihongo_krt, nihongo_foot = nihongo_foot, hanyu = hanyu, hanyu3 = hanyu3, hanyu_hrt = hanyu_hrt, hanyu_foot = hanyu_foot, } 7ad11952c5404f68ef3dc04de743da59f35238c9 Module:Section link 828 149 345 2022-10-22T09:09:53Z wikipedia>WOSlinker 0 use require('strict') instead of require('Module:No globals') Scribunto text/plain -- This module implements {{section link}}. require('strict'); local checkType = require('libraryUtil').checkType local p = {} local function makeSectionLink(page, section, display) display = display or section page = page or '' -- MediaWiki doesn't allow these in `page`, so only need to do for `section` if type(section) == 'string' then section = string.gsub(section, "{", "&#x7B;") section = string.gsub(section, "}", "&#x7D;") end return string.format('[[%s#%s|%s]]', page, section, display) end local function normalizeTitle(title) title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '') title = mw.ustring.gsub(title, "%b<>", "") return mw.title.new(title).prefixedText end function p._main(page, sections, options, title) -- Validate input. checkType('_main', 1, page, 'string', true) checkType('_main', 3, options, 'table', true) if sections == nil then sections = {} elseif type(sections) == 'string' then sections = {sections} elseif type(sections) ~= 'table' then error(string.format( "type error in argument #2 to '_main' " .. "(string, table or nil expected, got %s)", type(sections) ), 2) end options = options or {} title = title or mw.title.getCurrentTitle() -- Deal with blank page names elegantly if page and not page:find('%S') then page = nil options.nopage = true end -- Make the link(s). local isShowingPage = not options.nopage if #sections <= 1 then local linkPage = page or '' local section = sections[1] or 'Notes' local display = '§&nbsp;' .. section if isShowingPage then page = page or title.prefixedText if options.display and options.display ~= '' then if normalizeTitle(options.display) == normalizeTitle(page) then display = options.display .. ' ' .. display else error(string.format( 'Display title "%s" was ignored since it is ' .. "not equivalent to the page's actual title", options.display ), 0) end else display = page .. ' ' .. display end end return makeSectionLink(linkPage, section, display) else -- Multiple sections. First, make a list of the links to display. local ret = {} for i, section in ipairs(sections) do ret[i] = makeSectionLink(page, section) end -- Assemble the list of links into a string with mw.text.listToText. -- We use the default separator for mw.text.listToText, but a custom -- conjunction. There is also a special case conjunction if we only -- have two links. local conjunction if #sections == 2 then conjunction = '&#8203; and ' else conjunction = ', and ' end ret = mw.text.listToText(ret, nil, conjunction) -- Add the intro text. local intro = '§§&nbsp;' if isShowingPage then intro = (page or title.prefixedText) .. ' ' .. intro end ret = intro .. ret return ret end end function p.main(frame) local yesno = require('Module:Yesno') local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Section link', valueFunc = function (key, value) value = value:match('^%s*(.-)%s*$') -- Trim whitespace -- Allow blank first parameters, as the wikitext template does this. if value ~= '' or key == 1 then return value end end }) for k, v in pairs(args) do -- replace underscores in the positional parameter values if 'number' == type(k) then if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters else args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores end end end -- Sort the arguments. local page local sections, options = {}, {} for k, v in pairs(args) do if k == 1 then -- Doing this in the loop because of a bug in [[Module:Arguments]] -- when using pairs with deleted arguments. page = mw.text.decode(v, true) elseif type(k) == 'number' then sections[k] = v else options[k] = v end end options.nopage = yesno (options.nopage); -- make boolean -- Extract section from page, if present if page then local p, s = page:match('^(.-)#(.*)$') if p then page, sections[1] = p, s end end -- Compress the sections array. local function compressArray(t) local nums, ret = {}, {} for num in pairs(t) do nums[#nums + 1] = num end table.sort(nums) for i, num in ipairs(nums) do ret[i] = t[num] end return ret end sections = compressArray(sections) return p._main(page, sections, options) end return p 5cc61d43dc601ca43e9472500fc5cd09ca7cea44 Module:Message box 828 11 140 2022-10-23T04:26:44Z wikipedia>Legoktm 0 Replace [[Module:No globals]] with require( "strict" ) Scribunto text/plain require('strict') local getArgs local yesno = require('Module:Yesno') local lang = mw.language.getContentLanguage() local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox else -- default to ombox obj.cfg = cfg.ombox end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace else obj.cfg = cfg.ombox -- other namespaces or invalid input end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end table.insert(self.classes, class) end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end if yesno(args.plainlinks) ~= false then self:addClass('plainlinks') end for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText if self.isSmall then local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk) talkText = string.format('([[%s|talk]])', talkLink) else talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end -- set templatestyles self.base_templatestyles = cfg.templatestyles self.templatestyles = args.templatestyles end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.invalidTypeError then local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort) end if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end local frame = mw.getCurrentFrame() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.base_templatestyles }, }) -- Add support for a single custom templatestyles sheet. Undocumented as -- need should be limited and many templates using mbox are substed; we -- don't want to spread templatestyles sheets around to arbitrary places if self.templatestyles then root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.templatestyles }, }) end -- Create the box table. local boxTable = root:tag('table') boxTable:attr('id', self.id or nil) for i, class in ipairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('span') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :addClass('mbox-invalid-type') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) bdb0ecc9f26f26b9c0ce12a066a183ac9d4f0705 Module:Tmpl 828 416 1267 2022-10-23T14:49:59Z mw>WOSlinker 0 use require('strict') instead of require('Module:No globals') Scribunto text/plain -- This is a helper module for {{tmpl}} require('strict') -- The trailing `[^0-9]?` ensures that `$10` doesn't potentially change -- from being treated as `${1}0` to being treated as `${10}` -- if the number of supported parameters is ever expanded: local PATTERN = "%$([1-9])[^0-9]?" local this = {} function this.renderTmpl(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local input = pargs[0] or '' local result = {} local prevPos = 1 do local startPos, _, k while true do startPos, _, k = string.find(input, PATTERN, prevPos) if (not startPos) then break end table.insert(result, string.sub(input, prevPos, startPos - 1)) local n = tonumber(k) local r = pargs[n] if (r) then table.insert(result, r) else table.insert(result, '$' .. n) end prevPos = startPos + #k + 1 end end table.insert(result, string.sub(input, prevPos)) return table.concat(result) end return this a44958c165a7b935145f1c840d1ec428886bf193 Template:Nihongo/doc 10 263 750 2022-10-23T19:43:23Z wikipedia>Mx. Granger 0 removing - will be deleted wikitext text/x-wiki {{Documentation subpage}} <!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). --> {{High-use}} {{COinS safe|n}} {{Lua|Module:Nihongo}} {{TOCright}} == Usage == This template marks the <code>[[kanji]]</code> segment as being in Japanese kanji and/or kana, which helps user agents (web browsers and so on) to display it correctly. {{details|topic=when to use this template|Wikipedia:Manual of Style (Japan-related articles)}} '''Syntax:''' {|class=wikitable |Without lead=yes |With lead=yes |- |<code><nowiki>{{Nihongo|</nowiki>&lt;{{var|english}}>&#124;&lt;{{var|kanji/kana}}>&#124;&lt;{{var|rōmaji}}>&#124;&lt;{{var|extra}}>&#124;&lt;{{var|extra2}}>}}</code> |<code><nowiki>{{Nihongo|</nowiki>&lt;{{var|english}}>&#124;&lt;{{var|kanji/kana}}>&#124;&lt;{{var|rōmaji}}>&#124;lead=yes&#124;extra=&lt;{{var|extra}}>&#124;extra2=&lt;{{var|extra2}}>}}</code> |} '''Parameters:''' * &lt;{{var|english}}>. Optional. The word as translated into English. Note that this will sometimes be the actual Japanese word due to it being adopted into English. * &lt;{{var|kanji/kana}}>. Required when &lt;{{var|rōmaji}}> is empty or omitted. The word as written using Japanese script (kanji, kana). * &lt;{{var|rōmaji}}>. Required when &lt;{{var|kanji/kana}}> is empty. Transliteration of the Japanese word, using Hepburn Romanization. * lead=yes. Optional. This should be used for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing. * &lt;{{var|extra}}>. Optional. Can be used to add a gloss (particularly if there is no English form). Can also be expressed as a named parameter, <code>extra=</code> * &lt;{{var|extra2}}>. Optional. Can also be expressed as a named parameter, <code>extra2=</code>. It is only useful in ";" definitions (extra2 will be displayed without bold, whereas text following the template will get the bold). === Examples === ;Regular use: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}}</nowiki></code> |- |'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}} |} ;Use in lead: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code> |- |'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}} |} ;Without <code>English</code>: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā}}</nowiki></code> |- |'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā}} |} ;Without <code>English</code>, use in lead: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code> |- |'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā|lead=yes}} |} ;With <code>extra</code> to add a literal translation: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}}</nowiki></code> |- |'''Gives'''|| {{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}} |} ;With <code>extra2</code>: {| CLASS="wikitable" |'''Code''' || <code><nowiki>; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}}</nowiki></code><BR /> <code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code> |- |'''Gives'''|| ; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}} : Mendicant priest of the Fuke sect of Zen Buddhism. |} {{hatnote|Note: literal translations and linguistic glosses go in [[MOS:SINGLE|single quotation marks]], not double.}} ;Without <code>extra2</code>: {| CLASS="wikitable" |'''Code''' || <code><nowiki>; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness'</nowiki></code><BR /> <code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code> |- |'''Gives'''|| <!-- -->; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness' <!-- -->: Mendicant priest of the Fuke sect of Zen Buddhism. |} === User style === [[Help:User style|User style]] can be set by adding code similar to <syntaxhighlight lang="css"> @media screen, tv { *[lang="ja"] { color: green; } }</syntaxhighlight> to [[Special:Mypage/common.css|common.css]]. ==Error messaging== This template emits one error message of its own: :<span class="error" style="font-size:100%">error: <nowiki>{{nihongo}}</nowiki>: Japanese or romaji text required</span> One of the positional parameters <code>&lt;{{var|kanji/kana}}></code> (<code><nowiki>{{{2}}}</nowiki></code>), the 'Japanese' referred to in the error message or <code>&lt;{{var|rōmaji}}></code> (<code><nowiki>{{{3}}}</nowiki></code>) is required for proper operation of this template. Articles with these errors are collected in {{clc|Nihongo template errors}}. This error often occurs because the template is malformed: :<code><nowiki>{{Nihongo|東京タワー}}</nowiki></code> instead of <code><nowiki>{{Nihongo||東京タワー}}</nowiki></code>; {{lang|ja|東京タワー}} is in <code><nowiki>{{{1}}}</nowiki></code> (<code>&lt;{{var|english}}></code>) instead of <code><nowiki>{{{2}}}</nowiki></code> (<code>&lt;{{var|kanji/kana}}></code>). To resolve this error, add the missing pipe (<code>|</code>) or consider using {{tlx|lang}} or {{tlx|transl}} Because this template uses {{tld|lang}} and {{tlx|transl}} which emit their own error messages, see the help text for those at: :{{cl|Lang and lang-xx template errors}} – for error messages emitted by {{tld|lang}} :{{cl|Transl template errors}} – for error messages emitted by {{tld|transl}} ==Limitations== This cannot be used within a Wikilink in an article or in any template or other page that is [[WP:Transclusion|transcluded]] into an article. == See also == * {{tlp|Lang-ja|...}},{{tlp|lang|ja|...}}, similar templates in the [[:Category:Lang-x templates|Lang-x template]] for marking up Japanese text * {{tl|Nihongo3}}, essentially the same as this template, but gives rōmaji first and English inside the parentheses * {{tl|Nihongo krt}}, essentially the same as this template, but gives kanji first with rōmaji and English inside the parentheses * {{tl|Nihongo foot}}, same as this version, but puts everything but the English into a footnote * {{tl|Nihongo2}}, also displays the kanji properly, but without adding anything in parentheses, without rōmaji and without the extra parameters * {{tlp|in lang|ja}}, to label sources written in Japanese * {{tl|Japanese}}, to request expert assistance with Japanese script == Template data == {{TemplateDataHeader}} <templatedata> { "description": "This template is used to display Japanese text, applying the correct code and formatting.", "params": { "1": { "label": "English text", "type": "string", "description": "The word as translated into English. Note this will sometimes be the actual Japanese word if it has been adopted into English." }, "2": { "label": "Kanji/kana text", "type": "string", "required": true, "description": "The word as written in Japanese (kanji, kana, Roman letters, and possibly other marks)." }, "3": { "label": "Romanized (rōmaji) text", "type": "string", "description": "Transliteration of the Japanese word, using Hepburn Romanization." }, "4": { "label": "Extra text inside parentheses", "type": "string", "description": "Adds extra text inside the parentheses. ", "aliases": [ "extra" ] }, "5": { "label": "Extra text outside parentheses", "type": "string", "description": "Adds extra text outside the parentheses. It is only useful in \";\" definitions (it will be displayed without bold, whereas text following the template, will be bolded). Literal translations and linguistic glosses must use single quotation marks, not double.", "aliases": [ "extra2" ] }, "lead": { "label": "Lead formatting", "type": "string", "description": "If set to yes, changes formatting style for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing.", "suggestedvalues": [ "yes" ] } }, "paramOrder": [ "1", "2", "3", "lead", "4", "5" ], "format": "inline" } </templatedata> <includeonly>{{Sandbox other|| <!-- Categories go below this line, please; interwikis go to Wikidata, thank you! --> [[Category:Japonic multilingual support templates|{{PAGENAME}}]] [[Category:WikiProject Japan templates|Nihongo]] }}</includeonly> 03b074eb3b2d0663c7e41ac1fa436fb26704810f Module:Yesno 828 12 391 132 2022-10-28T05:41:15Z meta>Agent Isai 0 1 revision imported from [[:metawikimedia:Module:Yesno]]: Required for local usage Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end f767643e7d12126d020d88d662a3dd057817b9dc Module:Arguments 828 13 393 134 2022-10-28T05:41:15Z meta>Agent Isai 0 1 revision imported from [[:metawikimedia:Module:Arguments]]: Required for local usage Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 3134ecce8429b810d445e29eae115e2ae4c36c53 Module:No globals 828 168 397 2022-10-28T05:42:58Z meta>Agent Isai 0 1 revision imported from [[:metawikimedia:Module:No_globals]]: Required for local usage Scribunto text/plain local mt = getmetatable(_G) or {} function mt.__index (t, k) if k ~= 'arg' then -- perf optimization here and below: do not load Module:TNT unless there is an error error(require('Module:TNT').format('I18n/No globals', 'err-read', tostring(k)), 2) end return nil end function mt.__newindex(t, k, v) if k ~= 'arg' then error(require('Module:TNT').format('I18n/No globals', 'err-write', tostring(k)), 2) end rawset(t, k, v) end setmetatable(_G, mt) efcb47c74e7e2bb9a4ad8764d99a0afce8fed410 Template:Documentation 10 15 389 238 2022-11-09T19:51:20Z meta>Agent Isai 0 1 revision imported from [[:wikipedia:Template:Documentation]]: Importing from [[w:|English Wikipedia]] to sync templates wikitext text/x-wiki {{#invoke:Documentation|main}} bb08b6773a4c1e1d528cefda2d7c305d8b5193ec Module:Documentation 828 25 399 240 2022-11-09T19:51:21Z meta>Agent Isai 0 1 revision imported from [[:wikipedia:Module:Documentation]]: Importing from [[w:|English Wikipedia]] to sync templates Scribunto text/plain -- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs local messageBox = require('Module:Message box') -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local i18n = mw.loadData('Module:Documentation/i18n') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but are made available in the p -- table for testing purposes. ---------------------------------------------------------------------------- local function message(cfgKey, valArray, expectType) --[[ -- Gets a message from the cfg table and formats it if appropriate. -- The function raises an error if the value from the cfg table is not -- of the type expectType. The default type for expectType is 'string'. -- If the table valArray is present, strings such as $1, $2 etc. in the -- message are substituted with values from the table keys [1], [2] etc. -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." --]] local msg = cfg[cfgKey] expectType = expectType or 'string' if type(msg) ~= expectType then error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4) end local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal) return ret end p.message = message local function makeWikilink(page, display) if display then return mw.ustring.format('[[%s|%s]]', page, display) else return mw.ustring.format('[[%s]]', page) end end p.makeWikilink = makeWikilink local function makeCategoryLink(cat, sort) local catns = mw.site.namespaces[14].name return makeWikilink(catns .. ':' .. cat, sort) end p.makeCategoryLink = makeCategoryLink local function makeUrlLink(url, display) return mw.ustring.format('[%s %s]', url, display) end p.makeUrlLink = makeUrlLink local function makeToolbar(...) local ret = {} local lim = select('#', ...) if lim < 1 then return nil end for i = 1, lim do ret[#ret + 1] = select(i, ...) end return '<small>(' .. table.concat(ret, ' &#124; ') .. ')</small>' end p.makeToolbar = makeToolbar ---------------------------------------------------------------------------- -- Argument processing ---------------------------------------------------------------------------- local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame, { valueFunc = function (key, value) if type(value) == 'string' then value = value:match('^%s*(.-)%s*$') -- Remove whitespace. if key == 'heading' or value ~= '' then return value else return nil end else return value end end }) return p[funcName](args) end end ---------------------------------------------------------------------------- -- Load TemplateStyles ---------------------------------------------------------------------------- p.main = function(frame) local parent = frame.getParent(frame) local output = p._main(parent.args) return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output end ---------------------------------------------------------------------------- -- Main function ---------------------------------------------------------------------------- function p._main(args) --[[ -- This function defines logic flow for the module. -- @args - table of arguments passed by the user -- -- Messages: -- 'main-div-id' --> 'template-documentation' -- 'main-div-classes' --> 'template-documentation iezoomfix' --]] local env = p.getEnvironment(args) local root = mw.html.create() root :wikitext(p.protectionTemplate(env)) :wikitext(p.sandboxNotice(args, env)) -- This div tag is from {{documentation/start box}}, but moving it here -- so that we don't have to worry about unclosed tags. :tag('div') :attr('id', message('main-div-id')) :addClass(message('main-div-class')) :wikitext(p._startBox(args, env)) :wikitext(p._content(args, env)) :done() :wikitext(p._endBox(args, env)) :wikitext(p.addTrackingCategories(env)) return tostring(root) end ---------------------------------------------------------------------------- -- Environment settings ---------------------------------------------------------------------------- function p.getEnvironment(args) --[[ -- Returns a table with information about the environment, including title objects and other namespace- or -- path-related data. -- @args - table of arguments passed by the user -- -- Title objects include: -- env.title - the page we are making documentation for (usually the current title) -- env.templateTitle - the template (or module, file, etc.) -- env.docTitle - the /doc subpage. -- env.sandboxTitle - the /sandbox subpage. -- env.testcasesTitle - the /testcases subpage. -- env.printTitle - the print version of the template, located at the /Print subpage. -- -- Data includes: -- env.protectionLevels - the protection levels table of the title object. -- env.subjectSpace - the number of the title's subject namespace. -- env.docSpace - the number of the namespace the title puts its documentation in. -- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace. -- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template. -- -- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value -- returned will be nil. --]] local env, envFuncs = {}, {} -- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value -- returned by that function is memoized in the env table so that we don't call any of the functions -- more than once. (Nils won't be memoized.) setmetatable(env, { __index = function (t, key) local envFunc = envFuncs[key] if envFunc then local success, val = pcall(envFunc) if success then env[key] = val -- Memoise the value. return val end end return nil end }) function envFuncs.title() -- The title object for the current page, or a test page passed with args.page. local title local titleArg = args.page if titleArg then title = mw.title.new(titleArg) else title = mw.title.getCurrentTitle() end return title end function envFuncs.templateTitle() --[[ -- The template (or module, etc.) title object. -- Messages: -- 'sandbox-subpage' --> 'sandbox' -- 'testcases-subpage' --> 'testcases' --]] local subjectSpace = env.subjectSpace local title = env.title local subpage = title.subpageText if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then return mw.title.makeTitle(subjectSpace, title.baseText) else return mw.title.makeTitle(subjectSpace, title.text) end end function envFuncs.docTitle() --[[ -- Title object of the /doc subpage. -- Messages: -- 'doc-subpage' --> 'doc' --]] local title = env.title local docname = args[1] -- User-specified doc page. local docpage if docname then docpage = docname else docpage = env.docpageBase .. '/' .. message('doc-subpage') end return mw.title.new(docpage) end function envFuncs.sandboxTitle() --[[ -- Title object for the /sandbox subpage. -- Messages: -- 'sandbox-subpage' --> 'sandbox' --]] return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage')) end function envFuncs.testcasesTitle() --[[ -- Title object for the /testcases subpage. -- Messages: -- 'testcases-subpage' --> 'testcases' --]] return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) end function envFuncs.printTitle() --[[ -- Title object for the /Print subpage. -- Messages: -- 'print-subpage' --> 'Print' --]] return env.templateTitle:subPageTitle(message('print-subpage')) end function envFuncs.protectionLevels() -- The protection levels table of the title object. return env.title.protectionLevels end function envFuncs.subjectSpace() -- The subject namespace number. return mw.site.namespaces[env.title.namespace].subject.id end function envFuncs.docSpace() -- The documentation namespace number. For most namespaces this is the same as the -- subject namespace. However, pages in the Article, File, MediaWiki or Category -- namespaces must have their /doc, /sandbox and /testcases pages in talk space. local subjectSpace = env.subjectSpace if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then return subjectSpace + 1 else return subjectSpace end end function envFuncs.docpageBase() -- The base page of the /doc, /sandbox, and /testcases subpages. -- For some namespaces this is the talk page, rather than the template page. local templateTitle = env.templateTitle local docSpace = env.docSpace local docSpaceText = mw.site.namespaces[docSpace].name -- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon. return docSpaceText .. ':' .. templateTitle.text end function envFuncs.compareUrl() -- Diff link between the sandbox and the main template using [[Special:ComparePages]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.fullUrl( 'Special:ComparePages', {page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} ) return tostring(compareUrl) else return nil end end return env end ---------------------------------------------------------------------------- -- Auxiliary templates ---------------------------------------------------------------------------- function p.sandboxNotice(args, env) --[=[ -- Generates a sandbox notice for display above sandbox pages. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' -- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page' -- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page' -- 'sandbox-notice-pagetype-other' --> 'sandbox page' -- 'sandbox-notice-compare-link-display' --> 'diff' -- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.' -- 'sandbox-notice-testcases-link-display' --> 'test cases' -- 'sandbox-category' --> 'Template sandboxes' --]=] local title = env.title local sandboxTitle = env.sandboxTitle local templateTitle = env.templateTitle local subjectSpace = env.subjectSpace if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then return nil end -- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text". local omargs = {} omargs.image = message('sandbox-notice-image') -- Get the text. We start with the opening blurb, which is something like -- "This is the template sandbox for [[Template:Foo]] (diff)." local text = '' local frame = mw.getCurrentFrame() local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed. local pagetype if subjectSpace == 10 then pagetype = message('sandbox-notice-pagetype-template') elseif subjectSpace == 828 then pagetype = message('sandbox-notice-pagetype-module') else pagetype = message('sandbox-notice-pagetype-other') end local templateLink = makeWikilink(templateTitle.prefixedText) local compareUrl = env.compareUrl if isPreviewing or not compareUrl then text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) else local compareDisplay = message('sandbox-notice-compare-link-display') local compareLink = makeUrlLink(compareUrl, compareDisplay) text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) end -- Get the test cases page blurb if the page exists. This is something like -- "See also the companion subpage for [[Template:Foo/testcases|test cases]]." local testcasesTitle = env.testcasesTitle if testcasesTitle and testcasesTitle.exists then if testcasesTitle.contentModel == "Scribunto" then local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink}) else local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink}) end end -- Add the sandbox to the sandbox category. text = text .. makeCategoryLink(message('sandbox-category')) omargs.text = text omargs.class = message('sandbox-class') return messageBox.main('ombox', omargs) end function p.protectionTemplate(env) -- Generates the padlock icon in the top right. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'protection-template' --> 'pp-template' -- 'protection-template-args' --> {docusage = 'yes'} local title = env.title local protectionLevels local protectionTemplate = message('protection-template') local namespace = title.namespace if not (protectionTemplate and (namespace == 10 or namespace == 828)) then -- Don't display the protection template if we are not in the template or module namespaces. return nil end protectionLevels = env.protectionLevels if not protectionLevels then return nil end local editLevels = protectionLevels.edit local moveLevels = protectionLevels.move if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then -- The page is full-move protected, or full, template, or semi-protected. local frame = mw.getCurrentFrame() return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')} else return nil end end ---------------------------------------------------------------------------- -- Start box ---------------------------------------------------------------------------- p.startBox = makeInvokeFunc('_startBox') function p._startBox(args, env) --[[ -- This function generates the start box. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make -- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox -- which generate the box HTML. --]] env = env or p.getEnvironment(args) local links local content = args.content if not content then -- No need to include the links if the documentation is on the template page itself. local linksData = p.makeStartBoxLinksData(args, env) if linksData then links = p.renderStartBoxLinks(linksData) end end -- Generate the start box html. local data = p.makeStartBoxData(args, env, links) if data then return p.renderStartBox(data) else -- User specified no heading. return nil end end function p.makeStartBoxLinksData(args, env) --[[ -- Does initial processing of data to make the [view] [edit] [history] [purge] links. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'view-link-display' --> 'view' -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'purge-link-display' --> 'purge' -- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'docpage-preload' --> 'Template:Documentation/preload' -- 'create-link-display' --> 'create' --]] local subjectSpace = env.subjectSpace local title = env.title local docTitle = env.docTitle if not title or not docTitle then return nil end if docTitle.isRedirect then docTitle = docTitle.redirectTarget end local data = {} data.title = title data.docTitle = docTitle -- View, display, edit, and purge links if /doc exists. data.viewLinkDisplay = i18n['view-link-display'] data.editLinkDisplay = i18n['edit-link-display'] data.historyLinkDisplay = i18n['history-link-display'] data.purgeLinkDisplay = i18n['purge-link-display'] -- Create link if /doc doesn't exist. local preload = args.preload if not preload then if subjectSpace == 6 then -- File namespace preload = message('file-docpage-preload') elseif subjectSpace == 828 then -- Module namespace preload = message('module-preload') else preload = message('docpage-preload') end end data.preload = preload data.createLinkDisplay = i18n['create-link-display'] return data end function p.renderStartBoxLinks(data) --[[ -- Generates the [view][edit][history][purge] or [create] links from the data table. -- @data - a table of data generated by p.makeStartBoxLinksData --]] local function escapeBrackets(s) -- Escapes square brackets with HTML entities. return s :gsub('%[', '&#91;') -- Replace square brackets with HTML entities. :gsub('%]', '&#93;') end local ret local docTitle = data.docTitle local title = data.title if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) ret = '[%s] [%s] [%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) else local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) ret = '[%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, createLink) end return ret end function p.makeStartBoxData(args, env, links) --[=[ -- Does initial processing of data to pass to the start-box render function, p.renderStartBox. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' -- 'template-namespace-heading' --> 'Template documentation' -- 'module-namespace-heading' --> 'Module documentation' -- 'file-namespace-heading' --> 'Summary' -- 'other-namespaces-heading' --> 'Documentation' -- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks' -- 'start-box-link-id' --> 'doc_editlinks' -- 'testcases-create-link-display' --> 'create' --]=] local subjectSpace = env.subjectSpace if not subjectSpace then -- Default to an "other namespaces" namespace, so that we get at least some output -- if an error occurs. subjectSpace = 2 end local data = {} -- Heading local heading = args.heading -- Blank values are not removed. if heading == '' then -- Don't display the start box if the heading arg is defined but blank. return nil end if heading then data.heading = heading elseif subjectSpace == 10 then -- Template namespace data.heading = i18n['template-namespace-heading'] elseif subjectSpace == 828 then -- Module namespace data.heading = i18n['module-namespace-heading'] elseif subjectSpace == 6 then -- File namespace data.heading = i18n['file-namespace-heading'] else data.heading = i18n['other-namespaces-heading'] end -- Data for the [view][edit][history][purge] or [create] links. if links then data.linksClass = message('start-box-linkclasses') data.linksId = message('start-box-link-id') data.links = links end return data end function p.renderStartBox(data) -- Renders the start box html. -- @data - a table of data generated by p.makeStartBoxData. local sbox = mw.html.create('div') sbox :addClass(message('header-div-class')) :tag('div') :addClass(message('heading-div-class')) :wikitext(data.heading) local links = data.links if links then sbox :tag('div') :addClass(data.linksClass) :attr('id', data.linksId) :wikitext(links) end return tostring(sbox) end ---------------------------------------------------------------------------- -- Documentation content ---------------------------------------------------------------------------- p.content = makeInvokeFunc('_content') function p._content(args, env) -- Displays the documentation contents -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment env = env or p.getEnvironment(args) local docTitle = env.docTitle local content = args.content if not content and docTitle and docTitle.exists then content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle} end -- The line breaks below are necessary so that "=== Headings ===" at the start and end -- of docs are interpreted correctly. local cbox = mw.html.create('div') cbox :addClass(message('content-div-class')) :wikitext('\n' .. (content or '') .. '\n') return tostring(cbox) end p.contentTitle = makeInvokeFunc('_contentTitle') function p._contentTitle(args, env) env = env or p.getEnvironment(args) local docTitle = env.docTitle if not args.content and docTitle and docTitle.exists then return docTitle.prefixedText else return '' end end ---------------------------------------------------------------------------- -- End box ---------------------------------------------------------------------------- p.endBox = makeInvokeFunc('_endBox') function p._endBox(args, env) --[=[ -- This function generates the end box (also known as the link box). -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment --]=] -- Get environment data. env = env or p.getEnvironment(args) local subjectSpace = env.subjectSpace local docTitle = env.docTitle if not subjectSpace or not docTitle then return nil end -- Check whether we should output the end box at all. Add the end -- box by default if the documentation exists or if we are in the -- user, module or template namespaces. local linkBox = args['link box'] if linkBox == 'off' or not ( docTitle.exists or subjectSpace == 2 or subjectSpace == 828 or subjectSpace == 10 ) then return nil end -- Assemble the footer text field. local text = '' if linkBox then text = text .. linkBox else text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then -- We are in the user, template or module namespaces. -- Add sandbox and testcases links. -- "Editors can experiment in this template's sandbox and testcases pages." text = text .. (p.makeExperimentBlurb(args, env) or '') text = text .. '<br />' if not args.content and not args[1] then -- "Please add categories to the /doc subpage." -- Don't show this message with inline docs or with an explicitly specified doc page, -- as then it is unclear where to add the categories. text = text .. (p.makeCategoriesBlurb(args, env) or '') end text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates. if printBlurb then text = text .. '<br />' .. printBlurb end end end local ebox = mw.html.create('div') ebox :addClass(message('footer-div-class')) :wikitext(text) return tostring(ebox) end function p.makeDocPageBlurb(args, env) --[=[ -- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'transcluded-from-blurb' --> -- 'The above [[w:Wikipedia:Template documentation|documentation]] -- is [[w:Wikipedia:Transclusion|transcluded]] from $1.' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'create-link-display' --> 'create' -- 'create-module-doc-blurb' --> -- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].' --]=] local docTitle = env.docTitle if not docTitle or args.content then return nil end local ret if docTitle.exists then -- /doc exists; link to it. local docLink = makeWikilink(docTitle.prefixedText) local editUrl = docTitle:fullUrl{action = 'edit'} local editDisplay = i18n['edit-link-display'] local editLink = makeUrlLink(editUrl, editDisplay) local historyUrl = docTitle:fullUrl{action = 'history'} local historyDisplay = i18n['history-link-display'] local historyLink = makeUrlLink(historyUrl, historyDisplay) ret = message('transcluded-from-blurb', {docLink}) .. ' ' .. makeToolbar(editLink, historyLink) .. '<br />' elseif env.subjectSpace == 828 then -- /doc does not exist; ask to create it. local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} local createDisplay = i18n['create-link-display'] local createLink = makeUrlLink(createUrl, createDisplay) ret = message('create-module-doc-blurb', {createLink}) .. '<br />' end return ret end function p.makeExperimentBlurb(args, env) --[[ -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'sandbox' -- 'sandbox-edit-link-display' --> 'edit' -- 'compare-link-display' --> 'diff' -- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'sandbox-create-link-display' --> 'create' -- 'mirror-edit-summary' --> 'Create sandbox version of $1' -- 'mirror-link-display' --> 'mirror' -- 'mirror-link-preload' --> 'Template:Documentation/mirror' -- 'sandbox-link-display' --> 'sandbox' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display'--> 'edit' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'testcases-create-link-display' --> 'create' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display' --> 'edit' -- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases' -- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases' -- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.' -- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle local testcasesTitle = env.testcasesTitle local templatePage = templateTitle.prefixedText if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then return nil end -- Make links. local sandboxLinks, testcasesLinks if sandboxTitle.exists then local sandboxPage = sandboxTitle.prefixedText local sandboxDisplay = message('sandbox-link-display') local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'} local sandboxEditDisplay = message('sandbox-edit-link-display') local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay) local compareUrl = env.compareUrl local compareLink if compareUrl then local compareDisplay = message('compare-link-display') compareLink = makeUrlLink(compareUrl, compareDisplay) end sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink) else local sandboxPreload if subjectSpace == 828 then sandboxPreload = message('module-sandbox-preload') else sandboxPreload = message('template-sandbox-preload') end local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload} local sandboxCreateDisplay = message('sandbox-create-link-display') local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) local mirrorPreload = message('mirror-link-preload') local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} local mirrorDisplay = message('mirror-link-display') local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink) end if testcasesTitle.exists then local testcasesPage = testcasesTitle.prefixedText local testcasesDisplay = message('testcases-link-display') local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'} local testcasesEditDisplay = message('testcases-edit-link-display') local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) else local testcasesPreload if subjectSpace == 828 then testcasesPreload = message('module-testcases-preload') else testcasesPreload = message('template-testcases-preload') end local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload} local testcasesCreateDisplay = message('testcases-create-link-display') local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink) end local messageName if subjectSpace == 828 then messageName = 'experiment-blurb-module' else messageName = 'experiment-blurb-template' end return message(messageName, {sandboxLinks, testcasesLinks}) end function p.makeCategoriesBlurb(args, env) --[[ -- Generates the text "Please add categories to the /doc subpage." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'doc-link-display' --> '/doc' -- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.' --]] local docTitle = env.docTitle if not docTitle then return nil end local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display')) return message('add-categories-blurb', {docPathLink}) end function p.makeSubpagesBlurb(args, env) --[[ -- Generates the "Subpages of this template" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'template' -- 'module-pagetype' --> 'module' -- 'default-pagetype' --> 'page' -- 'subpages-link-display' --> 'Subpages of this $1' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle if not subjectSpace or not templateTitle then return nil end local pagetype if subjectSpace == 10 then pagetype = message('template-pagetype') elseif subjectSpace == 828 then pagetype = message('module-pagetype') else pagetype = message('default-pagetype') end local subpagesLink = makeWikilink( 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', message('subpages-link-display', {pagetype}) ) return message('subpages-blurb', {subpagesLink}) end function p.makePrintBlurb(args, env) --[=[ -- Generates the blurb displayed when there is a print version of the template available. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'print-link-display' --> '/Print' -- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]' -- .. ' of this template exists at $1.' -- .. ' If you make a change to this template, please update the print version as well.' -- 'display-print-category' --> true -- 'print-category' --> 'Templates with print versions' --]=] local printTitle = env.printTitle if not printTitle then return nil end local ret if printTitle.exists then local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display')) ret = message('print-blurb', {printLink}) local displayPrintCategory = message('display-print-category', nil, 'boolean') if displayPrintCategory then ret = ret .. makeCategoryLink(message('print-category')) end end return ret end ---------------------------------------------------------------------------- -- Tracking categories ---------------------------------------------------------------------------- function p.addTrackingCategories(env) --[[ -- Check if {{documentation}} is transcluded on a /doc or /testcases page. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'display-strange-usage-category' --> true -- 'doc-subpage' --> 'doc' -- 'testcases-subpage' --> 'testcases' -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' -- -- /testcases pages in the module namespace are not categorised, as they may have -- {{documentation}} transcluded automatically. --]] local title = env.title local subjectSpace = env.subjectSpace if not title or not subjectSpace then return nil end local subpage = title.subpageText local ret = '' if message('display-strange-usage-category', nil, 'boolean') and ( subpage == message('doc-subpage') or subjectSpace ~= 828 and subpage == message('testcases-subpage') ) then ret = ret .. makeCategoryLink(message('strange-usage-category')) end return ret end return p a029650bff998bd1a25784b49e99f984f068d85d 49 2023-02-14T16:27:01Z mw>Uzume 0 cherry pick Module wikitext support from [[w:en:Module:Documentation]] Scribunto text/plain -- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs local messageBox = require('Module:Message box') -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local i18n = mw.loadData('Module:Documentation/i18n') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but are made available in the p -- table for testing purposes. ---------------------------------------------------------------------------- local function message(cfgKey, valArray, expectType) --[[ -- Gets a message from the cfg table and formats it if appropriate. -- The function raises an error if the value from the cfg table is not -- of the type expectType. The default type for expectType is 'string'. -- If the table valArray is present, strings such as $1, $2 etc. in the -- message are substituted with values from the table keys [1], [2] etc. -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." --]] local msg = cfg[cfgKey] expectType = expectType or 'string' if type(msg) ~= expectType then error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4) end local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal) return ret end p.message = message local function makeWikilink(page, display) if display then return mw.ustring.format('[[%s|%s]]', page, display) else return mw.ustring.format('[[%s]]', page) end end p.makeWikilink = makeWikilink local function makeCategoryLink(cat, sort) local catns = mw.site.namespaces[14].name return makeWikilink(catns .. ':' .. cat, sort) end p.makeCategoryLink = makeCategoryLink local function makeUrlLink(url, display) return mw.ustring.format('[%s %s]', url, display) end p.makeUrlLink = makeUrlLink local function makeToolbar(...) local ret = {} local lim = select('#', ...) if lim < 1 then return nil end for i = 1, lim do ret[#ret + 1] = select(i, ...) end return '<small style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>' end p.makeToolbar = makeToolbar ---------------------------------------------------------------------------- -- Argument processing ---------------------------------------------------------------------------- local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame, { valueFunc = function (key, value) if type(value) == 'string' then value = value:match('^%s*(.-)%s*$') -- Remove whitespace. if key == 'heading' or value ~= '' then return value else return nil end else return value end end }) return p[funcName](args) end end ---------------------------------------------------------------------------- -- Load TemplateStyles ---------------------------------------------------------------------------- p.main = function(frame) local parent = frame.getParent(frame) local output = p._main(parent.args) return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output end ---------------------------------------------------------------------------- -- Main function ---------------------------------------------------------------------------- function p._main(args) --[[ -- This function defines logic flow for the module. -- @args - table of arguments passed by the user -- -- Messages: -- 'main-div-id' --> 'template-documentation' -- 'main-div-classes' --> 'template-documentation iezoomfix' --]] local env = p.getEnvironment(args) local root = mw.html.create() root :wikitext(p._getModuleWikitext(args, env)) :wikitext(p.protectionTemplate(env)) :wikitext(p.sandboxNotice(args, env)) -- This div tag is from {{documentation/start box}}, but moving it here -- so that we don't have to worry about unclosed tags. :tag('div') :attr('id', message('main-div-id')) :addClass(message('main-div-class')) :wikitext(p._startBox(args, env)) :wikitext(p._content(args, env)) :done() :wikitext(p._endBox(args, env)) :wikitext(p.addTrackingCategories(env)) return tostring(root) end ---------------------------------------------------------------------------- -- Environment settings ---------------------------------------------------------------------------- function p.getEnvironment(args) --[[ -- Returns a table with information about the environment, including title objects and other namespace- or -- path-related data. -- @args - table of arguments passed by the user -- -- Title objects include: -- env.title - the page we are making documentation for (usually the current title) -- env.templateTitle - the template (or module, file, etc.) -- env.docTitle - the /doc subpage. -- env.sandboxTitle - the /sandbox subpage. -- env.testcasesTitle - the /testcases subpage. -- env.printTitle - the print version of the template, located at the /Print subpage. -- -- Data includes: -- env.protectionLevels - the protection levels table of the title object. -- env.subjectSpace - the number of the title's subject namespace. -- env.docSpace - the number of the namespace the title puts its documentation in. -- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace. -- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template. -- -- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value -- returned will be nil. --]] local env, envFuncs = {}, {} -- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value -- returned by that function is memoized in the env table so that we don't call any of the functions -- more than once. (Nils won't be memoized.) setmetatable(env, { __index = function (t, key) local envFunc = envFuncs[key] if envFunc then local success, val = pcall(envFunc) if success then env[key] = val -- Memoise the value. return val end end return nil end }) function envFuncs.title() -- The title object for the current page, or a test page passed with args.page. local title local titleArg = args.page if titleArg then title = mw.title.new(titleArg) else title = mw.title.getCurrentTitle() end return title end function envFuncs.templateTitle() --[[ -- The template (or module, etc.) title object. -- Messages: -- 'sandbox-subpage' --> 'sandbox' -- 'testcases-subpage' --> 'testcases' --]] local subjectSpace = env.subjectSpace local title = env.title local subpage = title.subpageText if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then return mw.title.makeTitle(subjectSpace, title.baseText) else return mw.title.makeTitle(subjectSpace, title.text) end end function envFuncs.docTitle() --[[ -- Title object of the /doc subpage. -- Messages: -- 'doc-subpage' --> 'doc' --]] local title = env.title local docname = args[1] -- User-specified doc page. local docpage if docname then docpage = docname else docpage = env.docpageBase .. '/' .. message('doc-subpage') end return mw.title.new(docpage) end function envFuncs.sandboxTitle() --[[ -- Title object for the /sandbox subpage. -- Messages: -- 'sandbox-subpage' --> 'sandbox' --]] return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage')) end function envFuncs.testcasesTitle() --[[ -- Title object for the /testcases subpage. -- Messages: -- 'testcases-subpage' --> 'testcases' --]] return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) end function envFuncs.printTitle() --[[ -- Title object for the /Print subpage. -- Messages: -- 'print-subpage' --> 'Print' --]] return env.templateTitle:subPageTitle(message('print-subpage')) end function envFuncs.protectionLevels() -- The protection levels table of the title object. return env.title.protectionLevels end function envFuncs.subjectSpace() -- The subject namespace number. return mw.site.namespaces[env.title.namespace].subject.id end function envFuncs.docSpace() -- The documentation namespace number. For most namespaces this is the same as the -- subject namespace. However, pages in the Article, File, MediaWiki or Category -- namespaces must have their /doc, /sandbox and /testcases pages in talk space. local subjectSpace = env.subjectSpace if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then return subjectSpace + 1 else return subjectSpace end end function envFuncs.docpageBase() -- The base page of the /doc, /sandbox, and /testcases subpages. -- For some namespaces this is the talk page, rather than the template page. local templateTitle = env.templateTitle local docSpace = env.docSpace local docSpaceText = mw.site.namespaces[docSpace].name -- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon. return docSpaceText .. ':' .. templateTitle.text end function envFuncs.compareUrl() -- Diff link between the sandbox and the main template using [[Special:ComparePages]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.fullUrl( 'Special:ComparePages', {page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} ) return tostring(compareUrl) else return nil end end return env end ---------------------------------------------------------------------------- -- Auxiliary templates ---------------------------------------------------------------------------- p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext') function p._getModuleWikitext(args, env) local currentTitle = mw.title.getCurrentTitle() if currentTitle.contentModel ~= 'Scribunto' then return end pcall(require, currentTitle.prefixedText) -- if it fails, we don't care local moduleWikitext = package.loaded["Module:Module wikitext"] if moduleWikitext then return moduleWikitext.main() end end function p.sandboxNotice(args, env) --[=[ -- Generates a sandbox notice for display above sandbox pages. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' -- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page' -- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page' -- 'sandbox-notice-pagetype-other' --> 'sandbox page' -- 'sandbox-notice-compare-link-display' --> 'diff' -- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.' -- 'sandbox-notice-testcases-link-display' --> 'test cases' -- 'sandbox-category' --> 'Template sandboxes' --]=] local title = env.title local sandboxTitle = env.sandboxTitle local templateTitle = env.templateTitle local subjectSpace = env.subjectSpace if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then return nil end -- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text". local omargs = {} omargs.image = message('sandbox-notice-image') -- Get the text. We start with the opening blurb, which is something like -- "This is the template sandbox for [[Template:Foo]] (diff)." local text = '' local frame = mw.getCurrentFrame() local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed. local pagetype if subjectSpace == 10 then pagetype = message('sandbox-notice-pagetype-template') elseif subjectSpace == 828 then pagetype = message('sandbox-notice-pagetype-module') else pagetype = message('sandbox-notice-pagetype-other') end local templateLink = makeWikilink(templateTitle.prefixedText) local compareUrl = env.compareUrl if isPreviewing or not compareUrl then text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) else local compareDisplay = message('sandbox-notice-compare-link-display') local compareLink = makeUrlLink(compareUrl, compareDisplay) text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) end -- Get the test cases page blurb if the page exists. This is something like -- "See also the companion subpage for [[Template:Foo/testcases|test cases]]." local testcasesTitle = env.testcasesTitle if testcasesTitle and testcasesTitle.exists then if testcasesTitle.contentModel == "Scribunto" then local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink}) else local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink}) end end -- Add the sandbox to the sandbox category. text = text .. makeCategoryLink(message('sandbox-category')) omargs.text = text omargs.class = message('sandbox-class') local ret = '<div style="clear: both;"></div>' ret = ret .. messageBox.main('ombox', omargs) return ret end function p.protectionTemplate(env) -- Generates the padlock icon in the top right. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'protection-template' --> 'pp-template' -- 'protection-template-args' --> {docusage = 'yes'} local title = env.title local protectionLevels local protectionTemplate = message('protection-template') local namespace = title.namespace if not (protectionTemplate and (namespace == 10 or namespace == 828)) then -- Don't display the protection template if we are not in the template or module namespaces. return nil end protectionLevels = env.protectionLevels if not protectionLevels then return nil end local editLevels = protectionLevels.edit local moveLevels = protectionLevels.move if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then -- The page is full-move protected, or full, template, or semi-protected. local frame = mw.getCurrentFrame() return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')} else return nil end end ---------------------------------------------------------------------------- -- Start box ---------------------------------------------------------------------------- p.startBox = makeInvokeFunc('_startBox') function p._startBox(args, env) --[[ -- This function generates the start box. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make -- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox -- which generate the box HTML. --]] env = env or p.getEnvironment(args) local links local content = args.content if not content then -- No need to include the links if the documentation is on the template page itself. local linksData = p.makeStartBoxLinksData(args, env) if linksData then links = p.renderStartBoxLinks(linksData) end end -- Generate the start box html. local data = p.makeStartBoxData(args, env, links) if data then return p.renderStartBox(data) else -- User specified no heading. return nil end end function p.makeStartBoxLinksData(args, env) --[[ -- Does initial processing of data to make the [view] [edit] [history] [purge] links. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'view-link-display' --> 'view' -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'purge-link-display' --> 'purge' -- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'docpage-preload' --> 'Template:Documentation/preload' -- 'create-link-display' --> 'create' --]] local subjectSpace = env.subjectSpace local title = env.title local docTitle = env.docTitle if not title or not docTitle then return nil end if docTitle.isRedirect then docTitle = docTitle.redirectTarget end local data = {} data.title = title data.docTitle = docTitle -- View, display, edit, and purge links if /doc exists. data.viewLinkDisplay = i18n['view-link-display'] data.editLinkDisplay = i18n['edit-link-display'] data.historyLinkDisplay = i18n['history-link-display'] data.purgeLinkDisplay = i18n['purge-link-display'] -- Create link if /doc doesn't exist. local preload = args.preload if not preload then if subjectSpace == 6 then -- File namespace preload = message('file-docpage-preload') elseif subjectSpace == 828 then -- Module namespace preload = message('module-preload') else preload = message('docpage-preload') end end data.preload = preload data.createLinkDisplay = i18n['create-link-display'] return data end function p.renderStartBoxLinks(data) --[[ -- Generates the [view][edit][history][purge] or [create] links from the data table. -- @data - a table of data generated by p.makeStartBoxLinksData --]] local function escapeBrackets(s) -- Escapes square brackets with HTML entities. s = s:gsub('%[', '&#91;') -- Replace square brackets with HTML entities. s = s:gsub('%]', '&#93;') return s end local ret local docTitle = data.docTitle local title = data.title if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) ret = '[%s] [%s] [%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) else local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) ret = '[%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, createLink) end return ret end function p.makeStartBoxData(args, env, links) --[=[ -- Does initial processing of data to pass to the start-box render function, p.renderStartBox. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' -- 'template-namespace-heading' --> 'Template documentation' -- 'module-namespace-heading' --> 'Module documentation' -- 'file-namespace-heading' --> 'Summary' -- 'other-namespaces-heading' --> 'Documentation' -- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks' -- 'start-box-link-id' --> 'doc_editlinks' -- 'testcases-create-link-display' --> 'create' --]=] local subjectSpace = env.subjectSpace if not subjectSpace then -- Default to an "other namespaces" namespace, so that we get at least some output -- if an error occurs. subjectSpace = 2 end local data = {} -- Heading local heading = args.heading -- Blank values are not removed. if heading == '' then -- Don't display the start box if the heading arg is defined but blank. return nil end if heading then data.heading = heading elseif subjectSpace == 10 then -- Template namespace data.heading = i18n['template-namespace-heading'] elseif subjectSpace == 828 then -- Module namespace data.heading = i18n['module-namespace-heading'] elseif subjectSpace == 6 then -- File namespace data.heading = i18n['file-namespace-heading'] else data.heading = i18n['other-namespaces-heading'] end -- Data for the [view][edit][history][purge] or [create] links. if links then data.linksClass = message('start-box-linkclasses') data.linksId = message('start-box-link-id') data.links = links end return data end function p.renderStartBox(data) -- Renders the start box html. -- @data - a table of data generated by p.makeStartBoxData. local sbox = mw.html.create('div') sbox :addClass(message('header-div-class')) :tag('div') :addClass(message('heading-div-class')) :wikitext(data.heading) local links = data.links if links then sbox :tag('div') :addClass(data.linksClass) :attr('id', data.linksId) :wikitext(links) end return tostring(sbox) end ---------------------------------------------------------------------------- -- Documentation content ---------------------------------------------------------------------------- p.content = makeInvokeFunc('_content') function p._content(args, env) -- Displays the documentation contents -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment env = env or p.getEnvironment(args) local docTitle = env.docTitle local content = args.content if not content and docTitle and docTitle.exists then content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle} end -- The line breaks below are necessary so that "=== Headings ===" at the start and end -- of docs are interpreted correctly. local cbox = mw.html.create('div') cbox :addClass(message('content-div-class')) :wikitext('\n' .. (content or '') .. '\n') return tostring(cbox) end p.contentTitle = makeInvokeFunc('_contentTitle') function p._contentTitle(args, env) env = env or p.getEnvironment(args) local docTitle = env.docTitle if not args.content and docTitle and docTitle.exists then return docTitle.prefixedText else return '' end end ---------------------------------------------------------------------------- -- End box ---------------------------------------------------------------------------- p.endBox = makeInvokeFunc('_endBox') function p._endBox(args, env) --[=[ -- This function generates the end box (also known as the link box). -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment --]=] -- Get environment data. env = env or p.getEnvironment(args) local subjectSpace = env.subjectSpace local docTitle = env.docTitle if not subjectSpace or not docTitle then return nil end -- Check whether we should output the end box at all. Add the end -- box by default if the documentation exists or if we are in the -- user, module or template namespaces. local linkBox = args['link box'] if linkBox == 'off' or not ( docTitle.exists or subjectSpace == 2 or subjectSpace == 828 or subjectSpace == 10 ) then return nil end -- Assemble the footer text field. local text = '' if linkBox then text = text .. linkBox else text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then -- We are in the user, template or module namespaces. -- Add sandbox and testcases links. -- "Editors can experiment in this template's sandbox and testcases pages." text = text .. (p.makeExperimentBlurb(args, env) or '') text = text .. '<br />' if not args.content and not args[1] then -- "Please add categories to the /doc subpage." -- Don't show this message with inline docs or with an explicitly specified doc page, -- as then it is unclear where to add the categories. text = text .. (p.makeCategoriesBlurb(args, env) or '') end text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates. if printBlurb then text = text .. '<br />' .. printBlurb end end end local ebox = mw.html.create('div') ebox :addClass(message('footer-div-class')) :wikitext(text) return tostring(ebox) end function p.makeDocPageBlurb(args, env) --[=[ -- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'transcluded-from-blurb' --> -- 'The above [[w:Wikipedia:Template documentation|documentation]] -- is [[w:Wikipedia:Transclusion|transcluded]] from $1.' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'create-link-display' --> 'create' -- 'create-module-doc-blurb' --> -- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].' --]=] local docTitle = env.docTitle if not docTitle or args.content then return nil end local ret if docTitle.exists then -- /doc exists; link to it. local docLink = makeWikilink(docTitle.prefixedText) local editUrl = docTitle:fullUrl{action = 'edit'} local editDisplay = i18n['edit-link-display'] local editLink = makeUrlLink(editUrl, editDisplay) local historyUrl = docTitle:fullUrl{action = 'history'} local historyDisplay = i18n['history-link-display'] local historyLink = makeUrlLink(historyUrl, historyDisplay) ret = message('transcluded-from-blurb', {docLink}) .. ' ' .. makeToolbar(editLink, historyLink) .. '<br />' elseif env.subjectSpace == 828 then -- /doc does not exist; ask to create it. local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} local createDisplay = i18n['create-link-display'] local createLink = makeUrlLink(createUrl, createDisplay) ret = message('create-module-doc-blurb', {createLink}) .. '<br />' end return ret end function p.makeExperimentBlurb(args, env) --[[ -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'sandbox' -- 'sandbox-edit-link-display' --> 'edit' -- 'compare-link-display' --> 'diff' -- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'sandbox-create-link-display' --> 'create' -- 'mirror-edit-summary' --> 'Create sandbox version of $1' -- 'mirror-link-display' --> 'mirror' -- 'mirror-link-preload' --> 'Template:Documentation/mirror' -- 'sandbox-link-display' --> 'sandbox' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display'--> 'edit' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'testcases-create-link-display' --> 'create' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display' --> 'edit' -- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases' -- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases' -- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.' -- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle local testcasesTitle = env.testcasesTitle local templatePage = templateTitle.prefixedText if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then return nil end -- Make links. local sandboxLinks, testcasesLinks if sandboxTitle.exists then local sandboxPage = sandboxTitle.prefixedText local sandboxDisplay = message('sandbox-link-display') local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'} local sandboxEditDisplay = message('sandbox-edit-link-display') local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay) local compareUrl = env.compareUrl local compareLink if compareUrl then local compareDisplay = message('compare-link-display') compareLink = makeUrlLink(compareUrl, compareDisplay) end sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink) else local sandboxPreload if subjectSpace == 828 then sandboxPreload = message('module-sandbox-preload') else sandboxPreload = message('template-sandbox-preload') end local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload} local sandboxCreateDisplay = message('sandbox-create-link-display') local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) local mirrorPreload = message('mirror-link-preload') local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} local mirrorDisplay = message('mirror-link-display') local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink) end if testcasesTitle.exists then local testcasesPage = testcasesTitle.prefixedText local testcasesDisplay = message('testcases-link-display') local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'} local testcasesEditDisplay = message('testcases-edit-link-display') local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) else local testcasesPreload if subjectSpace == 828 then testcasesPreload = message('module-testcases-preload') else testcasesPreload = message('template-testcases-preload') end local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload} local testcasesCreateDisplay = message('testcases-create-link-display') local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink) end local messageName if subjectSpace == 828 then messageName = 'experiment-blurb-module' else messageName = 'experiment-blurb-template' end return message(messageName, {sandboxLinks, testcasesLinks}) end function p.makeCategoriesBlurb(args, env) --[[ -- Generates the text "Please add categories to the /doc subpage." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'doc-link-display' --> '/doc' -- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.' --]] local docTitle = env.docTitle if not docTitle then return nil end local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display')) return message('add-categories-blurb', {docPathLink}) end function p.makeSubpagesBlurb(args, env) --[[ -- Generates the "Subpages of this template" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'template' -- 'module-pagetype' --> 'module' -- 'default-pagetype' --> 'page' -- 'subpages-link-display' --> 'Subpages of this $1' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle if not subjectSpace or not templateTitle then return nil end local pagetype if subjectSpace == 10 then pagetype = message('template-pagetype') elseif subjectSpace == 828 then pagetype = message('module-pagetype') else pagetype = message('default-pagetype') end local subpagesLink = makeWikilink( 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', message('subpages-link-display', {pagetype}) ) return message('subpages-blurb', {subpagesLink}) end function p.makePrintBlurb(args, env) --[=[ -- Generates the blurb displayed when there is a print version of the template available. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'print-link-display' --> '/Print' -- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]' -- .. ' of this template exists at $1.' -- .. ' If you make a change to this template, please update the print version as well.' -- 'display-print-category' --> true -- 'print-category' --> 'Templates with print versions' --]=] local printTitle = env.printTitle if not printTitle then return nil end local ret if printTitle.exists then local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display')) ret = message('print-blurb', {printLink}) local displayPrintCategory = message('display-print-category', nil, 'boolean') if displayPrintCategory then ret = ret .. makeCategoryLink(message('print-category')) end end return ret end ---------------------------------------------------------------------------- -- Tracking categories ---------------------------------------------------------------------------- function p.addTrackingCategories(env) --[[ -- Check if {{documentation}} is transcluded on a /doc or /testcases page. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'display-strange-usage-category' --> true -- 'doc-subpage' --> 'doc' -- 'testcases-subpage' --> 'testcases' -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' -- -- /testcases pages in the module namespace are not categorised, as they may have -- {{documentation}} transcluded automatically. --]] local title = env.title local subjectSpace = env.subjectSpace if not title or not subjectSpace then return nil end local subpage = title.subpageText local ret = '' if message('display-strange-usage-category', nil, 'boolean') and ( subpage == message('doc-subpage') or subjectSpace ~= 828 and subpage == message('testcases-subpage') ) then ret = ret .. makeCategoryLink(message('strange-usage-category')) end return ret end return p 0e23eec0d3c20c23afcd28849e240b9083dbcf88 Module:Documentation/config 828 26 401 242 2022-11-09T19:51:21Z meta>Agent Isai 0 1 revision imported from [[:wikipedia:Module:Documentation/config]]: Importing from [[w:|English Wikipedia]] to sync templates Scribunto text/plain ---------------------------------------------------------------------------------------------------- -- -- Configuration for Module:Documentation -- -- Here you can set the values of the parameters and messages used in Module:Documentation to -- localise it to your wiki and your language. Unless specified otherwise, values given here -- should be string values. ---------------------------------------------------------------------------------------------------- local _format = require('Module:TNT').format local function format(id) return _format('I18n/Documentation', id) end local cfg = {} -- Do not edit this line. cfg['templatestyles-scr'] = 'Module:Documentation/styles.css' ---------------------------------------------------------------------------------------------------- -- Protection template configuration ---------------------------------------------------------------------------------------------------- -- cfg['protection-template'] -- The name of the template that displays the protection icon (a padlock on enwiki). cfg['protection-template'] = 'PP-template' -- cfg['protection-reason-edit'] -- The protection reason for edit-protected templates to pass to -- [[Module:Protection banner]]. cfg['protection-reason-edit'] = 'template' --[[ -- cfg['protection-template-args'] -- Any arguments to send to the protection template. This should be a Lua table. -- For example, if the protection template is "pp-template", and the wikitext template invocation -- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}". --]] cfg['protection-template-args'] = {docusage = 'yes'} --[[ ---------------------------------------------------------------------------------------------------- -- Sandbox notice configuration -- -- On sandbox pages the module can display a template notifying users that the current page is a -- sandbox, and the location of test cases pages, etc. The module decides whether the page is a -- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the -- messages that the notices contains. ---------------------------------------------------------------------------------------------------- --]] -- cfg['sandbox-notice-image'] -- The image displayed in the sandbox notice. cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]' --[[ -- cfg['sandbox-notice-pagetype-template'] -- cfg['sandbox-notice-pagetype-module'] -- cfg['sandbox-notice-pagetype-other'] -- The page type of the sandbox page. The message that is displayed depends on the current subject -- namespace. This message is used in either cfg['sandbox-notice-blurb'] or -- cfg['sandbox-notice-diff-blurb']. --]] cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template') cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module') cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other') --[[ -- cfg['sandbox-notice-blurb'] -- cfg['sandbox-notice-diff-blurb'] -- cfg['sandbox-notice-diff-display'] -- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence -- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page -- type, which is either cfg['sandbox-notice-pagetype-template'], -- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what -- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between -- the sandbox and the main template. The display value of the diff link is set by -- cfg['sandbox-notice-compare-link-display']. --]] cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb') cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb') cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display') --[[ -- cfg['sandbox-notice-testcases-blurb'] -- cfg['sandbox-notice-testcases-link-display'] -- cfg['sandbox-notice-testcases-run-blurb'] -- cfg['sandbox-notice-testcases-run-link-display'] -- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit. $1 is a link to the test cases page. -- cfg['sandbox-notice-testcases-link-display'] is the display value for that link. -- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test -- cases page, and $2 is a link to the page to run it. -- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test -- cases. --]] cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb') cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display') cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb') cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display') -- cfg['sandbox-category'] -- A category to add to all template sandboxes. cfg['sandbox-category'] = 'Template sandboxes' ---------------------------------------------------------------------------------------------------- -- Start box configuration ---------------------------------------------------------------------------------------------------- -- cfg['documentation-icon-wikitext'] -- The wikitext for the icon shown at the top of the template. cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' ---------------------------------------------------------------------------------------------------- -- Link box (end box) configuration ---------------------------------------------------------------------------------------------------- -- cfg['transcluded-from-blurb'] -- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page. cfg['transcluded-from-blurb'] = format('transcluded-from-blurb') --[[ -- cfg['create-module-doc-blurb'] -- Notice displayed in the module namespace when the documentation subpage does not exist. -- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the -- display cfg['create-link-display']. --]] cfg['create-module-doc-blurb'] = format('create-module-doc-blurb') ---------------------------------------------------------------------------------------------------- -- Experiment blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['experiment-blurb-template'] -- cfg['experiment-blurb-module'] -- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages. -- It is only shown in the template and module namespaces. With the default English settings, it -- might look like this: -- -- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages. -- -- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links. -- -- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending -- on what namespace we are in. -- -- Parameters: -- -- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display']) -- -- If the sandbox doesn't exist, it is in the format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display']) -- -- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload'] -- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display'] -- loads a default edit summary of cfg['mirror-edit-summary']. -- -- $2 is a link to the test cases page. If the test cases page exists, it is in the following format: -- -- cfg['testcases-link-display'] (cfg['testcases-edit-link-display']) -- -- If the test cases page doesn't exist, it is in the format: -- -- cfg['testcases-link-display'] (cfg['testcases-create-link-display']) -- -- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the -- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current -- namespace. --]] cfg['experiment-blurb-template'] = format('experiment-blurb-template') cfg['experiment-blurb-module'] = format('experiment-blurb-module') ---------------------------------------------------------------------------------------------------- -- Sandbox link configuration ---------------------------------------------------------------------------------------------------- -- cfg['sandbox-subpage'] -- The name of the template subpage typically used for sandboxes. cfg['sandbox-subpage'] = 'sandbox' -- cfg['template-sandbox-preload'] -- Preload file for template sandbox pages. cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox' -- cfg['module-sandbox-preload'] -- Preload file for Lua module sandbox pages. cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox' -- cfg['sandbox-link-display'] -- The text to display for "sandbox" links. cfg['sandbox-link-display'] = format('sandbox-link-display') -- cfg['sandbox-edit-link-display'] -- The text to display for sandbox "edit" links. cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display') -- cfg['sandbox-create-link-display'] -- The text to display for sandbox "create" links. cfg['sandbox-create-link-display'] = format('sandbox-create-link-display') -- cfg['compare-link-display'] -- The text to display for "compare" links. cfg['compare-link-display'] = format('compare-link-display') -- cfg['mirror-edit-summary'] -- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the -- template page. cfg['mirror-edit-summary'] = 'Create sandbox version of $1' -- cfg['mirror-link-display'] -- The text to display for "mirror" links. cfg['mirror-link-display'] = format('mirror-link-display') -- cfg['mirror-link-preload'] -- The page to preload when a user clicks the "mirror" link. cfg['mirror-link-preload'] = 'Template:Documentation/mirror' ---------------------------------------------------------------------------------------------------- -- Test cases link configuration ---------------------------------------------------------------------------------------------------- -- cfg['testcases-subpage'] -- The name of the template subpage typically used for test cases. cfg['testcases-subpage'] = 'testcases' -- cfg['template-testcases-preload'] -- Preload file for template test cases pages. cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases' -- cfg['module-testcases-preload'] -- Preload file for Lua module test cases pages. cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases' -- cfg['testcases-link-display'] -- The text to display for "testcases" links. cfg['testcases-link-display'] = format('testcases-link-display') -- cfg['testcases-edit-link-display'] -- The text to display for test cases "edit" links. cfg['testcases-edit-link-display'] = format('testcases-edit-link-display') -- cfg['testcases-create-link-display'] -- The text to display for test cases "create" links. cfg['testcases-create-link-display'] = format('testcases-create-link-display') ---------------------------------------------------------------------------------------------------- -- Add categories blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['add-categories-blurb'] -- Text to direct users to add categories to the /doc subpage. Not used if the "content" or -- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a -- link to the /doc subpage with a display value of cfg['doc-link-display']. --]] cfg['add-categories-blurb'] = format('add-categories-blurb') -- cfg['doc-link-display'] -- The text to display when linking to the /doc subpage. cfg['doc-link-display'] = '/doc' ---------------------------------------------------------------------------------------------------- -- Subpages link configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['subpages-blurb'] -- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a -- display value of cfg['subpages-link-display']. In the English version this blurb is simply -- the link followed by a period, and the link display provides the actual text. --]] cfg['subpages-blurb'] = format('subpages-blurb') --[[ -- cfg['subpages-link-display'] -- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'], -- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in -- the template namespace, the module namespace, or another namespace. --]] cfg['subpages-link-display'] = format('subpages-link-display') -- cfg['template-pagetype'] -- The pagetype to display for template pages. cfg['template-pagetype'] = format('template-pagetype') -- cfg['module-pagetype'] -- The pagetype to display for Lua module pages. cfg['module-pagetype'] = format('module-pagetype') -- cfg['default-pagetype'] -- The pagetype to display for pages other than templates or Lua modules. cfg['default-pagetype'] = format('default-pagetype') ---------------------------------------------------------------------------------------------------- -- Doc link configuration ---------------------------------------------------------------------------------------------------- -- cfg['doc-subpage'] -- The name of the subpage typically used for documentation pages. cfg['doc-subpage'] = 'doc' -- cfg['file-docpage-preload'] -- Preload file for documentation page in the file namespace. cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace' -- cfg['docpage-preload'] -- Preload file for template documentation pages in all namespaces. cfg['docpage-preload'] = 'Template:Documentation/preload' -- cfg['module-preload'] -- Preload file for Lua module documentation pages. cfg['module-preload'] = 'Template:Documentation/preload-module-doc' ---------------------------------------------------------------------------------------------------- -- Print version configuration ---------------------------------------------------------------------------------------------------- -- cfg['print-subpage'] -- The name of the template subpage used for print versions. cfg['print-subpage'] = 'Print' -- cfg['print-link-display'] -- The text to display when linking to the /Print subpage. cfg['print-link-display'] = '/Print' -- cfg['print-blurb'] -- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display']. cfg['print-blurb'] = format('print-blurb') -- cfg['display-print-category'] -- Set to true to enable output of cfg['print-category'] if a /Print subpage exists. -- This should be a boolean value (either true or false). cfg['display-print-category'] = true -- cfg['print-category'] -- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists. cfg['print-category'] = 'Templates with print versions' ---------------------------------------------------------------------------------------------------- -- HTML and CSS configuration ---------------------------------------------------------------------------------------------------- -- cfg['main-div-id'] -- The "id" attribute of the main HTML "div" tag. cfg['main-div-id'] = 'template-documentation' -- cfg['main-div-classes'] -- The CSS classes added to the main HTML "div" tag. cfg['main-div-class'] = 'ts-doc-doc' cfg['header-div-class'] = 'ts-doc-header' cfg['heading-div-class'] = 'ts-doc-heading' cfg['content-div-class'] = 'ts-doc-content' cfg['footer-div-class'] = 'ts-doc-footer plainlinks' cfg['sandbox-class'] = 'ts-doc-sandbox' -- cfg['start-box-linkclasses'] -- The CSS classes used for the [view][edit][history] or [create] links in the start box. cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks' -- cfg['start-box-link-id'] -- The HTML "id" attribute for the links in the start box. cfg['start-box-link-id'] = 'doc_editlinks' ---------------------------------------------------------------------------------------------------- -- Tracking category configuration ---------------------------------------------------------------------------------------------------- -- cfg['display-strange-usage-category'] -- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage -- or a /testcases subpage. This should be a boolean value (either true or false). cfg['display-strange-usage-category'] = true -- cfg['strange-usage-category'] -- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a -- /doc subpage or a /testcases subpage. cfg['strange-usage-category'] = 'Wikipedia pages with strange ((documentation)) usage' --[[ ---------------------------------------------------------------------------------------------------- -- End configuration -- -- Don't edit anything below this line. ---------------------------------------------------------------------------------------------------- --]] return cfg 79bc957b39b5b752fa4c2e2e80a35faa01901425 51 2023-03-11T18:43:06Z mw>Pppery 0 Disable a silly category Scribunto text/plain ---------------------------------------------------------------------------------------------------- -- -- Configuration for Module:Documentation -- -- Here you can set the values of the parameters and messages used in Module:Documentation to -- localise it to your wiki and your language. Unless specified otherwise, values given here -- should be string values. ---------------------------------------------------------------------------------------------------- local _format = require('Module:TNT').format local function format(id) return _format('I18n/Documentation', id) end local cfg = {} -- Do not edit this line. cfg['templatestyles-scr'] = 'Module:Documentation/styles.css' ---------------------------------------------------------------------------------------------------- -- Protection template configuration ---------------------------------------------------------------------------------------------------- -- cfg['protection-template'] -- The name of the template that displays the protection icon (a padlock on enwiki). cfg['protection-template'] = 'pp-template' -- cfg['protection-reason-edit'] -- The protection reason for edit-protected templates to pass to -- [[Module:Protection banner]]. cfg['protection-reason-edit'] = 'template' --[[ -- cfg['protection-template-args'] -- Any arguments to send to the protection template. This should be a Lua table. -- For example, if the protection template is "pp-template", and the wikitext template invocation -- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}". --]] cfg['protection-template-args'] = {docusage = 'yes'} --[[ ---------------------------------------------------------------------------------------------------- -- Sandbox notice configuration -- -- On sandbox pages the module can display a template notifying users that the current page is a -- sandbox, and the location of test cases pages, etc. The module decides whether the page is a -- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the -- messages that the notices contains. ---------------------------------------------------------------------------------------------------- --]] -- cfg['sandbox-notice-image'] -- The image displayed in the sandbox notice. cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]' --[[ -- cfg['sandbox-notice-pagetype-template'] -- cfg['sandbox-notice-pagetype-module'] -- cfg['sandbox-notice-pagetype-other'] -- The page type of the sandbox page. The message that is displayed depends on the current subject -- namespace. This message is used in either cfg['sandbox-notice-blurb'] or -- cfg['sandbox-notice-diff-blurb']. --]] cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template') cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module') cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other') --[[ -- cfg['sandbox-notice-blurb'] -- cfg['sandbox-notice-diff-blurb'] -- cfg['sandbox-notice-diff-display'] -- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence -- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page -- type, which is either cfg['sandbox-notice-pagetype-template'], -- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what -- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between -- the sandbox and the main template. The display value of the diff link is set by -- cfg['sandbox-notice-compare-link-display']. --]] cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb') cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb') cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display') --[[ -- cfg['sandbox-notice-testcases-blurb'] -- cfg['sandbox-notice-testcases-link-display'] -- cfg['sandbox-notice-testcases-run-blurb'] -- cfg['sandbox-notice-testcases-run-link-display'] -- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit. $1 is a link to the test cases page. -- cfg['sandbox-notice-testcases-link-display'] is the display value for that link. -- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test -- cases page, and $2 is a link to the page to run it. -- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test -- cases. --]] cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb') cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display') cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb') cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display') -- cfg['sandbox-category'] -- A category to add to all template sandboxes. cfg['sandbox-category'] = 'Template sandboxes' ---------------------------------------------------------------------------------------------------- -- Start box configuration ---------------------------------------------------------------------------------------------------- -- cfg['documentation-icon-wikitext'] -- The wikitext for the icon shown at the top of the template. cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' ---------------------------------------------------------------------------------------------------- -- Link box (end box) configuration ---------------------------------------------------------------------------------------------------- -- cfg['transcluded-from-blurb'] -- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page. cfg['transcluded-from-blurb'] = format('transcluded-from-blurb') --[[ -- cfg['create-module-doc-blurb'] -- Notice displayed in the module namespace when the documentation subpage does not exist. -- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the -- display cfg['create-link-display']. --]] cfg['create-module-doc-blurb'] = format('create-module-doc-blurb') ---------------------------------------------------------------------------------------------------- -- Experiment blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['experiment-blurb-template'] -- cfg['experiment-blurb-module'] -- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages. -- It is only shown in the template and module namespaces. With the default English settings, it -- might look like this: -- -- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages. -- -- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links. -- -- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending -- on what namespace we are in. -- -- Parameters: -- -- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display']) -- -- If the sandbox doesn't exist, it is in the format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display']) -- -- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload'] -- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display'] -- loads a default edit summary of cfg['mirror-edit-summary']. -- -- $2 is a link to the test cases page. If the test cases page exists, it is in the following format: -- -- cfg['testcases-link-display'] (cfg['testcases-edit-link-display']) -- -- If the test cases page doesn't exist, it is in the format: -- -- cfg['testcases-link-display'] (cfg['testcases-create-link-display']) -- -- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the -- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current -- namespace. --]] cfg['experiment-blurb-template'] = format('experiment-blurb-template') cfg['experiment-blurb-module'] = format('experiment-blurb-module') ---------------------------------------------------------------------------------------------------- -- Sandbox link configuration ---------------------------------------------------------------------------------------------------- -- cfg['sandbox-subpage'] -- The name of the template subpage typically used for sandboxes. cfg['sandbox-subpage'] = 'sandbox' -- cfg['template-sandbox-preload'] -- Preload file for template sandbox pages. cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox' -- cfg['module-sandbox-preload'] -- Preload file for Lua module sandbox pages. cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox' -- cfg['sandbox-link-display'] -- The text to display for "sandbox" links. cfg['sandbox-link-display'] = format('sandbox-link-display') -- cfg['sandbox-edit-link-display'] -- The text to display for sandbox "edit" links. cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display') -- cfg['sandbox-create-link-display'] -- The text to display for sandbox "create" links. cfg['sandbox-create-link-display'] = format('sandbox-create-link-display') -- cfg['compare-link-display'] -- The text to display for "compare" links. cfg['compare-link-display'] = format('compare-link-display') -- cfg['mirror-edit-summary'] -- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the -- template page. cfg['mirror-edit-summary'] = 'Create sandbox version of $1' -- cfg['mirror-link-display'] -- The text to display for "mirror" links. cfg['mirror-link-display'] = format('mirror-link-display') -- cfg['mirror-link-preload'] -- The page to preload when a user clicks the "mirror" link. cfg['mirror-link-preload'] = 'Template:Documentation/mirror' ---------------------------------------------------------------------------------------------------- -- Test cases link configuration ---------------------------------------------------------------------------------------------------- -- cfg['testcases-subpage'] -- The name of the template subpage typically used for test cases. cfg['testcases-subpage'] = 'testcases' -- cfg['template-testcases-preload'] -- Preload file for template test cases pages. cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases' -- cfg['module-testcases-preload'] -- Preload file for Lua module test cases pages. cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases' -- cfg['testcases-link-display'] -- The text to display for "testcases" links. cfg['testcases-link-display'] = format('testcases-link-display') -- cfg['testcases-edit-link-display'] -- The text to display for test cases "edit" links. cfg['testcases-edit-link-display'] = format('testcases-edit-link-display') -- cfg['testcases-create-link-display'] -- The text to display for test cases "create" links. cfg['testcases-create-link-display'] = format('testcases-create-link-display') ---------------------------------------------------------------------------------------------------- -- Add categories blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['add-categories-blurb'] -- Text to direct users to add categories to the /doc subpage. Not used if the "content" or -- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a -- link to the /doc subpage with a display value of cfg['doc-link-display']. --]] cfg['add-categories-blurb'] = format('add-categories-blurb') -- cfg['doc-link-display'] -- The text to display when linking to the /doc subpage. cfg['doc-link-display'] = '/doc' ---------------------------------------------------------------------------------------------------- -- Subpages link configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['subpages-blurb'] -- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a -- display value of cfg['subpages-link-display']. In the English version this blurb is simply -- the link followed by a period, and the link display provides the actual text. --]] cfg['subpages-blurb'] = format('subpages-blurb') --[[ -- cfg['subpages-link-display'] -- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'], -- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in -- the template namespace, the module namespace, or another namespace. --]] cfg['subpages-link-display'] = format('subpages-link-display') -- cfg['template-pagetype'] -- The pagetype to display for template pages. cfg['template-pagetype'] = format('template-pagetype') -- cfg['module-pagetype'] -- The pagetype to display for Lua module pages. cfg['module-pagetype'] = format('module-pagetype') -- cfg['default-pagetype'] -- The pagetype to display for pages other than templates or Lua modules. cfg['default-pagetype'] = format('default-pagetype') ---------------------------------------------------------------------------------------------------- -- Doc link configuration ---------------------------------------------------------------------------------------------------- -- cfg['doc-subpage'] -- The name of the subpage typically used for documentation pages. cfg['doc-subpage'] = 'doc' -- cfg['file-docpage-preload'] -- Preload file for documentation page in the file namespace. cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace' -- cfg['docpage-preload'] -- Preload file for template documentation pages in all namespaces. cfg['docpage-preload'] = 'Template:Documentation/preload' -- cfg['module-preload'] -- Preload file for Lua module documentation pages. cfg['module-preload'] = 'Template:Documentation/preload-module-doc' ---------------------------------------------------------------------------------------------------- -- Print version configuration ---------------------------------------------------------------------------------------------------- -- cfg['print-subpage'] -- The name of the template subpage used for print versions. cfg['print-subpage'] = 'Print' -- cfg['print-link-display'] -- The text to display when linking to the /Print subpage. cfg['print-link-display'] = '/Print' -- cfg['print-blurb'] -- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display']. cfg['print-blurb'] = format('print-blurb') -- cfg['display-print-category'] -- Set to true to enable output of cfg['print-category'] if a /Print subpage exists. -- This should be a boolean value (either true or false). cfg['display-print-category'] = true -- cfg['print-category'] -- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists. cfg['print-category'] = 'Templates with print versions' ---------------------------------------------------------------------------------------------------- -- HTML and CSS configuration ---------------------------------------------------------------------------------------------------- -- cfg['main-div-id'] -- The "id" attribute of the main HTML "div" tag. cfg['main-div-id'] = 'template-documentation' -- cfg['main-div-classes'] -- The CSS classes added to the main HTML "div" tag. cfg['main-div-class'] = 'ts-doc-doc' cfg['header-div-class'] = 'ts-doc-header' cfg['heading-div-class'] = 'ts-doc-heading' cfg['content-div-class'] = 'ts-doc-content' cfg['footer-div-class'] = 'ts-doc-footer plainlinks' cfg['sandbox-class'] = 'ts-doc-sandbox' -- cfg['start-box-linkclasses'] -- The CSS classes used for the [view][edit][history] or [create] links in the start box. cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks' -- cfg['start-box-link-id'] -- The HTML "id" attribute for the links in the start box. cfg['start-box-link-id'] = 'doc_editlinks' ---------------------------------------------------------------------------------------------------- -- Tracking category configuration ---------------------------------------------------------------------------------------------------- -- cfg['display-strange-usage-category'] -- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage -- or a /testcases subpage. This should be a boolean value (either true or false). cfg['display-strange-usage-category'] = false -- cfg['strange-usage-category'] -- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a -- /doc subpage or a /testcases subpage. cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage' --[[ ---------------------------------------------------------------------------------------------------- -- End configuration -- -- Don't edit anything below this line. ---------------------------------------------------------------------------------------------------- --]] return cfg 224f3664a83268936f1b9935eafc0055a97071ac Module:Message box 828 11 395 140 2022-11-09T19:55:49Z meta>Agent Isai 0 Fix Scribunto text/plain require('Module:No globals') local getArgs local yesno = require('Module:Yesno') local lang = mw.language.getContentLanguage() local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox else -- default to ombox obj.cfg = cfg.ombox end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace else obj.cfg = cfg.ombox -- other namespaces or invalid input end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end table.insert(self.classes, class) end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end if yesno(args.plainlinks) ~= false then self:addClass('plainlinks') end for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText if self.isSmall then local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. '#' .. talk) talkText = string.format('([[%s|talk]])', talkLink) else talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <span class='date-container'><i>(<span class='date'>%s</span>)</i></span>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end -- set templatestyles self.base_templatestyles = cfg.templatestyles self.templatestyles = args.templatestyles end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.invalidTypeError then local allSort = (self.title.namespace == 0 and 'Main:' or '') .. self.title.prefixedText self:addCat('all', 'Wikipedia message box parameter needs fixing', allSort) end if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end local frame = mw.getCurrentFrame() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.base_templatestyles }, }) -- Add support for a single custom templatestyles sheet. Undocumented as -- need should be limited and many templates using mbox are substed; we -- don't want to spread templatestyles sheets around to arbitrary places if self.templatestyles then root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = self.templatestyles }, }) end -- Create the box table. local boxTable = root:tag('table') boxTable:attr('id', self.id or nil) for i, class in ipairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):addClass('mbox-image-div') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('span') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):addClass('mbox-image-div') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :addClass('mbox-invalid-type') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) fd6a8b1a0ac5916465cdf2eb099825f1d006cfba 21 2023-03-11T18:31:56Z mw>Pppery 0 - Scribunto text/plain -- This is a meta-module for producing message box templates, including -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}. -- Load necessary modules. require('strict') local getArgs local yesno = require('Module:Yesno') -- Get a language object for formatDate and ucfirst. local lang = mw.language.getContentLanguage() -- Define constants local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} local TEMPLATE_STYLES = 'Module:Message box/%s.css' -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} obj.boxType = boxType -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] obj.boxType = DEMOSPACES[demospace] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox obj.boxType = 'tmbox' else -- default to ombox obj.cfg = cfg.ombox obj.boxType = 'ombox' end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace obj.boxType = 'ambox' elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace obj.boxType = 'imbox' elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace obj.boxType = 'cmbox' else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace obj.boxType = 'tmbox' else obj.cfg = cfg.ombox -- other namespaces or invalid input obj.boxType = 'ombox' end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end self.classes[class] = 1 end function MessageBox:removeClass(class) if not class then return nil end self.classes[class] = nil end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end local plainlinks = yesno(args.plainlinks) if plainlinks == true then self:addClass('plainlinks') elseif plainlinks == false then self:removeClass('plainlinks') end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell if cfg.imageEmptyCellStyle then self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px' end -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end -- Add TemplateStyles root:wikitext(mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = TEMPLATE_STYLES:format(self.boxType) }, }) -- Create the box table. local boxTable -- Check for fmbox because not all interface messages have mw-parser-output -- which is necessary for TemplateStyles. Add the wrapper class if it is and -- then start the actual mbox, else start the mbox. if self.boxType == 'fmbox' then boxTable = root:tag('div') :addClass('mw-parser-output') :tag('table') else boxTable = root:tag('table') end boxTable:attr('id', self.id or nil) for class, _ in pairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):css('width', '52px') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') :cssText(self.imageEmptyCellStyle or nil) end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) and not self.isSmall then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('small') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):css('width', '52px') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :css('text-align', 'center') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) fcf2586b774e6db72e0a2837019f5b445124ddc4 Template:Literal translation 10 232 688 2022-11-12T17:32:00Z wikipedia>Est. 2021 0 as per talk, for consistency with lang-xx templates; tested in sandbox and testcases wikitext text/x-wiki {{#if:{{{sortable|}}} |<span style="display:none;">{{{1|}}}</span> }}{{#if:{{{i|}}} |<nowiki/>'' }}{{abbr|style=font-size:85%|{{#switch:{{{lk|}}} |yes|on = [[Literal translation|lit.]] |#default = lit. }}|literal translation}}{{#if:{{{i|}}} |''<nowiki/> }}{{#if:{{{1|}}} | {{thinsp}}<nowiki>'</nowiki>{{{1}}}{{#if:{{str endswith|{{{1}}}|''}}|{{'}}|&#39;}} }}{{#if:{{{2|}}} | {{sp}} or <nowiki>'</nowiki>{{{2}}}{{#if:{{str endswith|{{{2}}}|''}}|{{'}}|&#39;}} }}{{#if:{{{3|}}} | {{sp}} or <nowiki>'</nowiki>{{{3}}}{{#if:{{str endswith|{{{3}}}|''}}|{{'}}|&#39;}} }}{{#if:{{{4|}}} | {{sp}} or <nowiki>'</nowiki>{{{4}}}{{#if:{{str endswith|{{{4}}}|''}}|{{'}}|&#39;}} }}<noinclude> {{Documentation}} </noinclude> 1a7e9904a6e7bb60117c687c5c373fb9cf76c44c Module:Uses TemplateStyles 828 29 57 2022-11-19T16:11:44Z mw>Waldyrious 0 fix interwiki link Scribunto text/plain -- This module implements the {{Uses TemplateStyles}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local TNT = require('Module:TNT') local p = {} local function format(msg, ...) -- Content sourced from [[commons:Data:I18n/Uses TemplateStyles.tab]] return TNT.format('I18n/Uses TemplateStyles', msg, ...) end local function getConfig() return mw.loadData('Module:Uses TemplateStyles/config') end function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args, cfg) local tStyles = mTableTools.compressSparseArray(args) local box = p.renderBox(tStyles) local trackingCategories = p.renderTrackingCategories(args, tStyles) return box .. trackingCategories end function p.renderBox(tStyles) local boxArgs = {} if #tStyles < 1 then boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist')) else local cfg = getConfig() local tStylesLinks = {} for i, ts in ipairs(tStyles) do local link = string.format('[[:%s]]', ts) local sandboxLink = nil local tsTitle = mw.title.new(ts) if tsTitle and cfg['sandbox_title'] then local tsSandboxTitle = mw.title.new(string.format( '%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText)) if tsSandboxTitle and tsSandboxTitle.exists then sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText) end end tStylesLinks[i] = sandboxLink or link end local tStylesList = mList.makeList('bulleted', tStylesLinks) boxArgs.text = format( mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') .. '\n' .. tStylesList end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt')) return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, tStyles, titleObj) if yesno(args.nocat) then return '' end local cfg = getConfig() local cats = {} -- Error category if #tStyles < 1 and cfg['error_category'] then cats[#cats + 1] = cfg['error_category'] end -- TemplateStyles category titleObj = titleObj or mw.title.getCurrentTitle() if (titleObj.namespace == 10 or titleObj.namespace == 828) and not cfg['subpage_blacklist'][titleObj.subpageText] then local category = args.category or cfg['default_category'] if category then cats[#cats + 1] = category end if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil local addedLevelCat = false local addedPadlockCat = false for i, ts in ipairs(tStyles) do local tsTitleObj = mw.title.new(ts) local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil if cfg['protection_conflict_category'] and tsProt ~= currentProt and not addedLevelCat then addedLevelCat = true cats[#cats + 1] = cfg['protection_conflict_category'] end if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then local content = tsTitleObj:getContent() if not content:find(cfg['padlock_pattern']) then cats[#cats + 1] = cfg['missing_padlock_category'] addedPadlockCat = true end end end end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p d8c03c62b4a547f8918259e8509680e55bda1c90 Template:Uselang 10 423 1285 2022-11-24T16:30:47Z mw>Tacsipacsi 0 move documentation to subpage, simplify code – {{int:lang}} is never <Lang>, it uses the fallback chain, ultimately falling back to "en" wikitext text/x-wiki {{#if: {{{lang|}}} | {{{lang|}}} | {{int:Lang}} }}<noinclude>{{documentation}}</noinclude> 41c26d61caeb65fae8bd137d6b11adbfce457574 Template:Plainlist/styles.css 10 39 306 77 2022-12-11T06:59:53Z wikipedia>Izno 0 add this reset from mobile.css sanitized-css text/css /* {{pp-template|small=yes}} */ .plainlist ol, .plainlist ul { line-height: inherit; list-style: none; margin: 0; padding: 0; /* Reset Minerva default */ } .plainlist ol li, .plainlist ul li { margin-bottom: 0; } 51706efa229ff8794c0d94f260a208e7c5e6ec30 Template:Plainlist 10 8 180 15 2022-12-12T22:45:26Z wikipedia>Izno 0 add tstyles here wikitext text/x-wiki <templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}| {{{1}}} </div>}}<noinclude></div> {{documentation}} </noinclude> 582fe7098c25c1ecfc0ad32f62ecd674ebe2bdf0 Module:Shortcut 828 156 359 2022-12-13T23:41:34Z wikipedia>Izno 0 use module:list for plainlist, move templatestyles to module space Scribunto text/plain -- This module implements {{shortcut}}. -- Set constants local CONFIG_MODULE = 'Module:Shortcut/config' -- Load required modules local checkType = require('libraryUtil').checkType local yesno = require('Module:Yesno') local p = {} local function message(msg, ...) return mw.message.newRawMessage(msg, ...):plain() end local function makeCategoryLink(cat) return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat) end function p._main(shortcuts, options, frame, cfg) checkType('_main', 1, shortcuts, 'table') checkType('_main', 2, options, 'table', true) options = options or {} frame = frame or mw.getCurrentFrame() cfg = cfg or mw.loadData(CONFIG_MODULE) local templateMode = options.template and yesno(options.template) local redirectMode = options.redirect and yesno(options.redirect) local isCategorized = not options.category or yesno(options.category) ~= false -- Validate shortcuts for i, shortcut in ipairs(shortcuts) do if type(shortcut) ~= 'string' or #shortcut < 1 then error(message(cfg['invalid-shortcut-error'], i), 2) end end -- Make the list items. These are the shortcuts plus any extra lines such -- as options.msg. local listItems = {} for i, shortcut in ipairs(shortcuts) do local templatePath, prefix if templateMode then -- Namespace detection local titleObj = mw.title.new(shortcut, 10) if titleObj.namespace == 10 then templatePath = titleObj.fullText else templatePath = shortcut end prefix = options['pre' .. i] or options.pre or '' end if options.target and yesno(options.target) then listItems[i] = templateMode and string.format("&#123;&#123;%s[[%s|%s]]&#125;&#125;", prefix, templatePath, shortcut) or string.format("[[%s]]", shortcut) else listItems[i] = frame:expandTemplate{ title = 'No redirect', args = templateMode and {templatePath, shortcut} or {shortcut, shortcut} } if templateMode then listItems[i] = string.format("&#123;&#123;%s%s&#125;&#125;", prefix, listItems[i]) end end end table.insert(listItems, options.msg) -- Return an error if we have nothing to display if #listItems < 1 then local msg = cfg['no-content-error'] msg = string.format('<strong class="error">%s</strong>', msg) if isCategorized and cfg['no-content-error-category'] then msg = msg .. makeCategoryLink(cfg['no-content-error-category']) end return msg end local root = mw.html.create() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Shortcut/styles.css'} }) -- Anchors local anchorDiv = root :tag('div') :addClass('module-shortcutanchordiv') for i, shortcut in ipairs(shortcuts) do local anchor = mw.uri.anchorEncode(shortcut) anchorDiv:tag('span'):attr('id', anchor) end -- Shortcut heading local shortcutHeading do local nShortcuts = #shortcuts if nShortcuts > 0 then local headingMsg = options['shortcut-heading'] or redirectMode and cfg['redirect-heading'] or cfg['shortcut-heading'] shortcutHeading = message(headingMsg, nShortcuts) shortcutHeading = frame:preprocess(shortcutHeading) end end -- Shortcut box local shortcutList = root :tag('div') :addClass('module-shortcutboxplain noprint') :attr('role', 'note') if options.float and options.float:lower() == 'left' then shortcutList:addClass('module-shortcutboxleft') end if options.clear and options.clear ~= '' then shortcutList:css('clear', options.clear) end if shortcutHeading then shortcutList :tag('div') :addClass('module-shortcutlist') :wikitext(shortcutHeading) end local ubl = require('Module:List').unbulleted(listItems) shortcutList:wikitext(ubl) return tostring(root) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame) -- Separate shortcuts from options local shortcuts, options = {}, {} for k, v in pairs(args) do if type(k) == 'number' then shortcuts[k] = v else options[k] = v end end -- Compress the shortcut array, which may contain nils. local function compressArray(t) local nums, ret = {}, {} for k in pairs(t) do nums[#nums + 1] = k end table.sort(nums) for i, num in ipairs(nums) do ret[i] = t[num] end return ret end shortcuts = compressArray(shortcuts) return p._main(shortcuts, options, frame) end return p 03fd46a265e549852a9ed3d3a9249b247d84cb4f Module:Italic title/doc 828 198 558 2022-12-16T02:06:33Z wikipedia>Izno 0 add lua wikitext text/x-wiki {{High-risk| approximately 844000 }} {{module rating|protected}} {{Lua|Module:Yesno|Module:Arguments}} This module implements {{tl|italic title}} and {{tl|italic dab}}. Please see the template pages for documentation. 5dea766bbc5c3c2d91e2b8df9e54d506aef23b35 Template:Ombox 10 146 1273 339 2022-12-17T17:51:51Z mw>Clump 0 Reverted edits by [[Special:Contribs/2001:44C8:4226:7A84:1:0:8319:25AC|2001:44C8:4226:7A84:1:0:8319:25AC]] ([[User talk:2001:44C8:4226:7A84:1:0:8319:25AC|talk]]) to last version by Clump wikitext text/x-wiki <onlyinclude>{{#invoke:Message box|ombox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> f5c3203172e44c84d587cc7824db31d90604ddcb Template:Mbox 10 246 716 2022-12-18T05:46:16Z wikipedia>TadejM 0 wikitext text/x-wiki {{#invoke:Message box|mbox}}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 5bfb2becf8bed35974b47e3ff8660dc14bee40c7 Template:)) 10 38 75 2022-12-18T08:36:48Z mw>Rebulka 0 překlad a editace wikitext text/x-wiki }}<noinclude> {{documentation}}[[Category:Workaround templates]] </noinclude> e2331ab1b2f6b7061b29f929a502a016b6d54a54 Template:Hlist/styles.css 10 136 308 2022-12-26T18:00:17Z wikipedia>Izno 0 actually remove that block, someone can dig for authorship sanitized-css text/css /* {{pp-protected|reason=match parent|small=yes}} */ /* * hlist styles are defined in core and Minerva and differ in Minerva. The * current definitions here (2023-01-01) are sufficient to override Minerva * without use of the hlist-separated class. The most problematic styles were * related to margin, padding, and the bullet. Check files listed at * [[MediaWiki talk:Common.css/to do#hlist-separated]] */ /* * TODO: When the majority of readership supports it (or some beautiful world * in which grade C support is above the minimum threshold), use :is() */ .hlist dl, .hlist ol, .hlist ul { margin: 0; padding: 0; } /* Display list items inline */ .hlist dd, .hlist dt, .hlist li { /* * don't trust the note that says margin doesn't work with inline * removing margin: 0 makes dds have margins again * We also want to reset margin-right in Minerva */ margin: 0; display: inline; } /* Display requested top-level lists inline */ .hlist.inline, .hlist.inline dl, .hlist.inline ol, .hlist.inline ul, /* Display nested lists inline */ .hlist dl dl, .hlist dl ol, .hlist dl ul, .hlist ol dl, .hlist ol ol, .hlist ol ul, .hlist ul dl, .hlist ul ol, .hlist ul ul { display: inline; } /* Hide empty list items */ .hlist .mw-empty-li { display: none; } /* TODO: :not() can maybe be used here to remove the later rule. naive test * seems to work. more testing needed. like so: *.hlist dt:not(:last-child)::after { * content: ": "; *} *.hlist dd:not(:last-child)::after, *.hlist li:not(:last-child)::after { * content: " · "; * font-weight: bold; *} */ /* Generate interpuncts */ .hlist dt::after { content: ": "; } .hlist dd::after, .hlist li::after { content: " · "; font-weight: bold; } .hlist dd:last-child::after, .hlist dt:last-child::after, .hlist li:last-child::after { content: none; } /* Add parentheses around nested lists */ .hlist dd dd:first-child::before, .hlist dd dt:first-child::before, .hlist dd li:first-child::before, .hlist dt dd:first-child::before, .hlist dt dt:first-child::before, .hlist dt li:first-child::before, .hlist li dd:first-child::before, .hlist li dt:first-child::before, .hlist li li:first-child::before { content: " ("; font-weight: normal; } .hlist dd dd:last-child::after, .hlist dd dt:last-child::after, .hlist dd li:last-child::after, .hlist dt dd:last-child::after, .hlist dt dt:last-child::after, .hlist dt li:last-child::after, .hlist li dd:last-child::after, .hlist li dt:last-child::after, .hlist li li:last-child::after { content: ")"; font-weight: normal; } /* Put ordinals in front of ordered list items */ .hlist ol { counter-reset: listitem; } .hlist ol > li { counter-increment: listitem; } .hlist ol > li::before { content: " " counter(listitem) "\a0"; } .hlist dd ol > li:first-child::before, .hlist dt ol > li:first-child::before, .hlist li ol > li:first-child::before { content: " (" counter(listitem) "\a0"; } 8c9dd9c9c00f30eead17fe10f51d183333e81f33 Module:List 828 30 164 59 2022-12-29T17:57:56Z wikipedia>Izno 0 add templatestyles for hlist Scribunto text/plain local libUtil = require('libraryUtil') local checkType = libUtil.checkType local mTableTools = require('Module:TableTools') local p = {} local listTypes = { ['bulleted'] = true, ['unbulleted'] = true, ['horizontal'] = true, ['ordered'] = true, ['horizontal_ordered'] = true } function p.makeListData(listType, args) -- Constructs a data table to be passed to p.renderList. local data = {} -- Classes and TemplateStyles data.classes = {} data.templatestyles = '' if listType == 'horizontal' or listType == 'horizontal_ordered' then table.insert(data.classes, 'hlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Hlist/styles.css' } } elseif listType == 'unbulleted' then table.insert(data.classes, 'plainlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plainlist/styles.css' } } end table.insert(data.classes, args.class) -- Main div style data.style = args.style -- Indent for horizontal lists if listType == 'horizontal' or listType == 'horizontal_ordered' then local indent = tonumber(args.indent) indent = indent and indent * 1.6 or 0 if indent > 0 then data.marginLeft = indent .. 'em' end end -- List style types for ordered lists -- This could be "1, 2, 3", "a, b, c", or a number of others. The list style -- type is either set by the "type" attribute or the "list-style-type" CSS -- property. if listType == 'ordered' or listType == 'horizontal_ordered' then data.listStyleType = args.list_style_type or args['list-style-type'] data.type = args['type'] -- Detect invalid type attributes and attempt to convert them to -- list-style-type CSS properties. if data.type and not data.listStyleType and not tostring(data.type):find('^%s*[1AaIi]%s*$') then data.listStyleType = data.type data.type = nil end end -- List tag type if listType == 'ordered' or listType == 'horizontal_ordered' then data.listTag = 'ol' else data.listTag = 'ul' end -- Start number for ordered lists data.start = args.start if listType == 'horizontal_ordered' then -- Apply fix to get start numbers working with horizontal ordered lists. local startNum = tonumber(data.start) if startNum then data.counterReset = 'listitem ' .. tostring(startNum - 1) end end -- List style -- ul_style and ol_style are included for backwards compatibility. No -- distinction is made for ordered or unordered lists. data.listStyle = args.list_style -- List items -- li_style is included for backwards compatibility. item_style was included -- to be easier to understand for non-coders. data.itemStyle = args.item_style or args.li_style data.items = {} for _, num in ipairs(mTableTools.numKeys(args)) do local item = {} item.content = args[num] item.style = args['item' .. tostring(num) .. '_style'] or args['item_style' .. tostring(num)] item.value = args['item' .. tostring(num) .. '_value'] or args['item_value' .. tostring(num)] table.insert(data.items, item) end return data end function p.renderList(data) -- Renders the list HTML. -- Return the blank string if there are no list items. if type(data.items) ~= 'table' or #data.items < 1 then return '' end -- Render the main div tag. local root = mw.html.create('div') for _, class in ipairs(data.classes or {}) do root:addClass(class) end root:css{['margin-left'] = data.marginLeft} if data.style then root:cssText(data.style) end -- Render the list tag. local list = root:tag(data.listTag or 'ul') list :attr{start = data.start, type = data.type} :css{ ['counter-reset'] = data.counterReset, ['list-style-type'] = data.listStyleType } if data.listStyle then list:cssText(data.listStyle) end -- Render the list items for _, t in ipairs(data.items or {}) do local item = list:tag('li') if data.itemStyle then item:cssText(data.itemStyle) end if t.style then item:cssText(t.style) end item :attr{value = t.value} :wikitext(t.content) end return data.templatestyles .. tostring(root) end function p.renderTrackingCategories(args) local isDeprecated = false -- Tracks deprecated parameters. for k, v in pairs(args) do k = tostring(k) if k:find('^item_style%d+$') or k:find('^item_value%d+$') then isDeprecated = true break end end local ret = '' if isDeprecated then ret = ret .. '[[Category:List templates with deprecated parameters]]' end return ret end function p.makeList(listType, args) if not listType or not listTypes[listType] then error(string.format( "bad argument #1 to 'makeList' ('%s' is not a valid list type)", tostring(listType) ), 2) end checkType('makeList', 2, args, 'table') local data = p.makeListData(listType, args) local list = p.renderList(data) local trackingCategories = p.renderTrackingCategories(args) return list .. trackingCategories end for listType in pairs(listTypes) do p[listType] = function (frame) local mArguments = require('Module:Arguments') local origArgs = mArguments.getArgs(frame, { valueFunc = function (key, value) if not value or not mw.ustring.find(value, '%S') then return nil end if mw.ustring.find(value, '^%s*[%*#;:]') then return value else return value:match('^%s*(.-)%s*$') end return nil end }) -- Copy all the arguments to a new table, for faster indexing. local args = {} for k, v in pairs(origArgs) do args[k] = v end return p.makeList(listType, args) end end return p 7a4f36a6e9cd56370bdd8207d23694124821dc1a Module:Navbox/configuration 828 95 206 2022-12-29T18:14:27Z wikipedia>Izno 0 get these in Scribunto text/plain return { aria_label = 'Navbox', nowrap_item = '%s<span class="nowrap">%s</span>', templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' } }, hlist_templatestyles = 'Hlist/styles.css', plainlist_templatestyles = 'Plainlist/styles.css', -- do not localize marker table marker = { oddeven = '\127_ODDEVEN_\127', restart = '\127_ODDEVEN0_\127', regex = '\127_ODDEVEN(%d?)_\127' }, category = { orphan = '[[Category:Navbox orphans]]', horizontal_lists = 'Navigational boxes without horizontal lists', background_colors = 'Navboxes using background colours', illegible = 'Potentially illegible navboxes', borders = 'Navboxes using borders', }, keyword = { border_subgroup = 'subgroup', border_child = 'child', border_none = 'none', evenodd_swap = 'swap', navbar_off = 'off', navbar_plain = 'plain', nocat_false = 'false', nowrapitems_yes = 'yes', orphan_yes = 'yes', state_collapsed = 'collapsed', state_off = 'off', state_plain = 'plain', subpage_doc = 'doc', subpage_sandbox = 'sandbox', subpage_testcases = 'testcases', tracking_no = 'no' }, class = { autocollapse = 'autocollapse', collapsible = 'mw-collapsible', collapsed = 'mw-collapsed', -- Warning navbox = 'navbox', -- WMF currently hides 'navbox' from mobile, -- so you probably shouldn't change the navbox class. navbox_abovebelow = 'navbox-abovebelow', navbox_group = 'navbox-group', navbox_image = 'navbox-image', navbox_inner = 'navbox-inner', navbox_list = 'navbox-list', navbox_list_with_group = 'navbox-list-with-group', navbox_part = 'navbox-', -- do not l10n navbox_styles = 'navbox-styles', navbox_subgroup = 'navbox-subgroup', navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below navbox_odd_part = 'odd', -- do not l10n navbox_even_part = 'even', -- do not l10n nomobile = 'nomobile', nowraplinks = 'nowraplinks', noviewer = 'noviewer' -- used to remove images from MediaViewer }, pattern = { listnum = '^list(%d+)$', class = 'class', sandbox = '/sandbox$', navbox = 'Template:Navbox', nowrap = '^<span class="nowrap">', style = 'style$', navbox_title = '<th[^>]*"navbox%-title"', hlist = 'hlist', plainlist = 'plainlist', }, arg = { above = 'above', aboveclass = 'aboveclass', abovestyle = 'abovestyle', basestyle = 'basestyle', bodyclass = 'bodyclass', bodystyle = 'bodystyle', border = 'border', below = 'below', belowclass = 'belowclass', belowstyle = 'belowstyle', evenodd = 'evenodd', evenstyle = 'evenstyle', group1 = 'group1', group2 = 'group2', group_and_num = 'group%d', groupstyle_and_num = 'group%dstyle', groupclass = 'groupclass', groupstyle = 'groupstyle', groupwidth = 'groupwidth', innerstyle = 'innerstyle', image = 'image', imageclass = 'imageclass', imageleft = 'imageleft', imageleftstyle = 'imageleftstyle', imagesetyle = 'imagestyle', list_and_num = 'list%d', listclass_and_num = 'list%dclass', liststyle_and_num = 'list%dstyle', list1padding = 'list1padding', listclass = 'listclass', listpadding = 'listpadding', liststyle = 'liststyle', name = 'name', navbar = 'navbar', navboxclass = 'navboxclass', nocat = 'nocat', nowrapitems = 'nowrapitems', oddstyle = 'oddstyle', orphan = 'orphan', state = 'state', style = 'style', templatestyles = 'templatestyles', child_templatestyles = 'child templatestyles', title = 'title', titleclass = 'titleclass', titlestyle = 'titlestyle', tracking = 'tracking' }, -- names of navbar arguments navbar = { name = 1, fontstyle = 'fontstyle', mini = 'mini' } } 4148736fd32a93636c0413e73ed38afaef065ec9 Module:Navbar/configuration 828 92 200 2022-12-29T18:18:21Z wikipedia>Izno 0 add hlist/styles.css Scribunto text/plain return { ['templatestyles'] = 'Module:Navbar/styles.css', ['hlist_templatestyles'] = 'Hlist/styles.css', ['box_text'] = 'This box: ', -- default text box when not plain or mini ['title_namespace'] = 'Template', -- namespace to default to for title ['invalid_title'] = 'Invalid title ', ['classes'] = { -- set a line to nil if you don't want it ['navbar'] = 'navbar', ['plainlinks'] = 'plainlinks', -- plainlinks ['horizontal_list'] = 'hlist', -- horizontal list class ['mini'] = 'navbar-mini', -- class indicating small links in the navbar ['this_box'] = 'navbar-boxtext', ['brackets'] = 'navbar-brackets', -- 'collapsible' is the key for a class to indicate the navbar is -- setting up the collapsible element in addition to the normal -- navbar. ['collapsible'] = 'navbar-collapse', ['collapsible_title_mini'] = 'navbar-ct-mini', ['collapsible_title_full'] = 'navbar-ct-full' } } b007c336b17ec4bcd4d5a9dca9f8cba301662b55 Module:Navbar 828 91 198 2022-12-29T18:20:02Z wikipedia>Izno 0 add templatestyles for hlist Scribunto text/plain local p = {} local cfg = mw.loadData('Module:Navbar/configuration') local function get_title_arg(is_collapsible, template) local title_arg = 1 if is_collapsible then title_arg = 2 end if template then title_arg = 'template' end return title_arg end local function choose_links(template, args) -- The show table indicates the default displayed items. -- view, talk, edit, hist, move, watch -- TODO: Move to configuration. local show = {true, true, true, false, false, false} if template then show[2] = false show[3] = false local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6} -- TODO: Consider removing TableTools dependency. for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do local num = index[v] if num then show[num] = true end end end local remove_edit_link = args.noedit if remove_edit_link then show[3] = false end return show end local function add_link(link_description, ul, is_mini, font_style) local l if link_description.url then l = {'[', '', ']'} else l = {'[[', '|', ']]'} end ul:tag('li') :addClass('nv-' .. link_description.full) :wikitext(l[1] .. link_description.link .. l[2]) :tag(is_mini and 'abbr' or 'span') :attr('title', link_description.html_title) :cssText(font_style) :wikitext(is_mini and link_description.mini or link_description.full) :done() :wikitext(l[3]) :done() end local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style) local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace) if not title then error(cfg.invalid_title .. title_text) end local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '' -- TODO: Get link_descriptions and show into the configuration module. -- link_descriptions should be easier... local link_descriptions = { { ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template', ['link'] = title.fullText, ['url'] = false }, { ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template', ['link'] = talkpage, ['url'] = false }, { ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template', ['link'] = title:fullUrl('action=edit'), ['url'] = true }, { ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template', ['link'] = title:fullUrl('action=history'), ['url'] = true }, { ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template', ['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true }, { ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template', ['link'] = title:fullUrl('action=watch'), ['url'] = true } } local ul = mw.html.create('ul') if has_brackets then ul:addClass(cfg.classes.brackets) :cssText(font_style) end for i, _ in ipairs(displayed_links) do if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end end return ul:done() end function p._navbar(args) -- TODO: We probably don't need both fontstyle and fontcolor... local font_style = args.fontstyle local font_color = args.fontcolor local is_collapsible = args.collapsible local is_mini = args.mini local is_plain = args.plain local collapsible_class = nil if is_collapsible then collapsible_class = cfg.classes.collapsible if not is_plain then is_mini = 1 end if font_color then font_style = (font_style or '') .. '; color: ' .. font_color .. ';' end end local navbar_style = args.style local div = mw.html.create():tag('div') div :addClass(cfg.classes.navbar) :addClass(cfg.classes.plainlinks) :addClass(cfg.classes.horizontal_list) :addClass(collapsible_class) -- we made the determination earlier :cssText(navbar_style) if is_mini then div:addClass(cfg.classes.mini) end local box_text = (args.text or cfg.box_text) .. ' ' -- the concatenated space guarantees the box text is separated if not (is_mini or is_plain) then div :tag('span') :addClass(cfg.classes.box_text) :cssText(font_style) :wikitext(box_text) end local template = args.template local displayed_links = choose_links(template, args) local has_brackets = args.brackets local title_arg = get_title_arg(is_collapsible, template) local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle()) local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style) div:node(list) if is_collapsible then local title_text_class if is_mini then title_text_class = cfg.classes.collapsible_title_mini else title_text_class = cfg.classes.collapsible_title_full end div:done() :tag('div') :addClass(title_text_class) :cssText(font_style) :wikitext(args[1]) end local frame = mw.getCurrentFrame() -- hlist -> navbar is best-effort to preserve old Common.css ordering. return frame:extensionTag{ name = 'templatestyles', args = { src = cfg.hlist_templatestyles } } .. frame:extensionTag{ name = 'templatestyles', args = { src = cfg.templatestyles } } .. tostring(div:done()) end function p.navbar(frame) return p._navbar(require('Module:Arguments').getArgs(frame)) end return p 79f907e59eaa8bbf8dd50bb751933ebeaaa7eb17 Template:Chart top 10 206 590 2023-01-11T14:32:15Z wikipedia>Plastikspork 0 Add |title= wikitext text/x-wiki {| class="collapsible {{#ifeq:{{Yesno-no|{{{collapsed|{{{collapse|}}}}}}}}|yes|collapsed|expanded}}" style="{{#switch:{{{align|}}}{{{float|}}} | left = margin: 0.3em 1em 0.3em 0; float:left; clear:{{{clear|left}}}; min-width:{{{min-width|{{{width|33em}}}}}}; | right = margin: 0.3em 0 0.3em 1em; float:right; clear:{{{clear|right}}}; min-width:{{{min-width|{{{width|33em}}}}}}; | #default = margin: 0.3em auto auto; clear:{{{clear|none}}}; min-width:{{{min-width|{{{width|60em}}}}}}; }} width:{{{width|auto}}}; font-size:85%; border:1px solid #aaa" ! style="padding:0.2em 0.3em 0.2em {{#if:{{{template_name|}}}|0.3em|4.3em}};{{#if:{{{background|}}}|background:{{{background|}}}|background:none}}; width:{{{width|auto}}}" | {{#if:{{{template_name|}}} |{{Navbar-collapsible|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}|{{{template_name}}}}} |{{{title|{{{1|Family of {{PAGENAME}}}}}}}} }} |- | style="text-align:{{{text-align|center}}}" | {{#invoke:Check for unknown parameters|check|unknown=[[Category:Pages using chart top with unknown parameters|_VALUE_{{PAGENAME}}]]|preview=Page using [[Template:Chart top]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | align | background | clear | collapse | collapsed | float | min-width | template_name | text-align | title | width }}<noinclude> |} {{documentation}}</noinclude> ad95734f767d68a3d7d70174fbc23ed2e147382e Template:Large 10 212 602 2023-01-16T01:12:34Z wikipedia>Jonesey95 0 use this template's own documentation wikitext text/x-wiki <span style="font-size:120%">{{{1}}}</span><noinclude> {{Documentation}} </noinclude> 8ba6ec8c3178e22dc1f05aa239df8a2b052be668 Template:Template other 10 4 6 2023-01-21T02:26:58Z w>Otonashi Ayana 0 1 revision imported wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Template}} | template | other }} }} | template = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 06fb13d264df967b5232141067eb7d2b67372d76 Template:Infobox 10 3 4 2023-01-21T02:31:54Z w>Otonashi Ayana 0 1 revision imported from [[:dev:Template:Infobox]] wikitext text/x-wiki {{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude> {{documentation}} <!-- Categories go in the /doc subpage, and interwikis go in Wikidata. --> </noinclude> 817a9f5b6524eced06a57bd1d5fd7179f9369bf2 Module:Infobox 828 5 8 2023-01-21T02:31:58Z w>Otonashi Ayana 0 1 revision imported from [[:dev:Module:Infobox]] Scribunto text/plain local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass }) root :tag('tr') :addClass(rowArgs.rowclass) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args.headerclass) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args.headerstyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data then root:wikitext( '[[Category:Pages using infobox templates with ignored data cells]]' ) end elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args.labelstyle) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args.title then return end has_rows = true has_list_class({args.titleclass}) root :tag('caption') :addClass('infobox-title') :addClass(args.titleclass) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args.titlestyle) :wikitext(args.title) end local function renderAboveRow() if not args.above then return end has_rows = true has_list_class({ args.aboveclass }) root :tag('tr') :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args.aboveclass) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args.abovestyle) :wikitext(fixChildBoxes(args.above,'th')) end local function renderBelowRow() if not args.below then return end has_rows = true has_list_class({ args.belowclass }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args.belowclass) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args.belowstyle) :wikitext(fixChildBoxes(args.below,'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args.subheader then args.subheader1 = args.subheader end if args.subheaderrowclass then args.subheaderrowclass1 = args.subheaderrowclass end local subheadernums = getArgNums('subheader') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['subheader' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args.subheaderstyle, rowcellstyle = args['subheaderstyle' .. tostring(num)], class = args.subheaderclass, rowclass = args['subheaderrowclass' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args.image then args.image1 = args.image end if args.caption then args.caption1 = args.caption end local imagenums = getArgNums('image') for k, num in ipairs(imagenums) do local caption = args['caption' .. tostring(num)] local data = mw.html.create():wikitext(args['image' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args.captionstyle) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args.imagestyle, class = args.imageclass, rowclass = args['imagerowclass' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args.autoheaders then return end local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['header' .. tostring(num)] then if lastheader then args['header' .. tostring(lastheader)] = nil end lastheader = num elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['data' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['header' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['header' .. tostring(num)], label = args['label' .. tostring(num)], data = args['data' .. tostring(num)], datastyle = args.datastyle, class = args['class' .. tostring(num)], rowclass = args['rowclass' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['rowstyle' .. tostring(num)], rowcellstyle = args['rowcellstyle' .. tostring(num)] }) end end local function renderNavBar() if not args.name then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then root:wikitext(require('Module:Italic title')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.decat == turns off tracking categories. local function renderTrackingCategories() if args.decat == 'yes' then return end if args.child == 'yes' then if args.title then root:wikitext( '[[Category:Pages using embedded infobox templates with the title parameter]]' ) end elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Category:Articles using infobox templates with no data rows]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args.bodyclass) -- @deprecated next; target .infobox-<name> :cssText(args.bodystyle) has_list_class({ args.bodyclass }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args.title) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('autoheaders') preprocessSingleArg('child') preprocessSingleArg('bodyclass') preprocessSingleArg('subbox') preprocessSingleArg('bodystyle') preprocessSingleArg('title') preprocessSingleArg('titleclass') preprocessSingleArg('titlestyle') preprocessSingleArg('above') preprocessSingleArg('aboveclass') preprocessSingleArg('abovestyle') preprocessArgs({ {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}} }, 10) preprocessSingleArg('subheaderstyle') preprocessSingleArg('subheaderclass') preprocessArgs({ {prefix = 'image', depend = {'caption', 'imagerowclass'}} }, 10) preprocessSingleArg('captionstyle') preprocessSingleArg('imagestyle') preprocessSingleArg('imageclass') preprocessArgs({ {prefix = 'header'}, {prefix = 'data', depend = {'label'}}, {prefix = 'rowclass'}, {prefix = 'rowstyle'}, {prefix = 'rowcellstyle'}, {prefix = 'class'} }, 50) preprocessSingleArg('headerclass') preprocessSingleArg('headerstyle') preprocessSingleArg('labelstyle') preprocessSingleArg('datastyle') preprocessSingleArg('below') preprocessSingleArg('belowclass') preprocessSingleArg('belowstyle') preprocessSingleArg('name') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['italic title'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p 0ddb7e5c8426d67cd589b710efb9912ddfb67fea Template:Infobox character 10 2 2 2023-01-21T17:09:30Z w>Otonashi Ayana 0 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{name}}}'''<br>{{{jname|}}} | header1 = Character Information | image = [[File:{{{image}}}|x350px]] | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{firstAppearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> <pre> {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = | age = | firstAppearance = | seiyu = | relations = }}</pre> 73810c458f02cc86aa3dfad3221d8354e30dc4e8 Module:Infobox/styles.css 828 6 10 2023-01-21T20:07:03Z w>Otonashi Ayana 0 text text/plain /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; } .infobox-3cols-child { margin: auto; } .infobox .navbar { font-size: 100%; } /* T281642 */ body.skin-minerva .infobox-header, body.skin-minerva .infobox-subheader, body.skin-minerva .infobox-above, body.skin-minerva .infobox-title, body.skin-minerva .infobox-image, body.skin-minerva .infobox-full-data, body.skin-minerva .infobox-below { text-align: center; } @media screen and (max-width:840px){ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; /* @noflip */ margin-left: auto; margin-right:auto; padding: 0.2em; margin-bottom:1em; } .infobox-image{ text-align:center; } } 96007587f0b8d711d3fb79a06ec4a51c7eeb4007 Template:Sandbox other 10 24 47 2023-01-22T23:53:41Z mw>Tacsipacsi 0 Undo revision 5731780 by [[Special:Contributions/2001:D08:1810:6E83:1:2:5E36:2856|2001:D08:1810:6E83:1:2:5E36:2856]] ([[User talk:2001:D08:1810:6E83:1:2:5E36:2856|talk]]): test edit wikitext text/x-wiki <onlyinclude>{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}</onlyinclude> {{documentation}} 44919af6b57ac865d8ec53eabfcb2cb9de35f157 Template:Notice 10 256 736 2023-01-25T22:32:14Z wikipedia>Izno 0 per tper wikitext text/x-wiki {{Mbox | name = Notice | demospace = {{{demospace|}}} | style = {{#if:{{{style|}}} |{{{style}}} }} | subst = <includeonly>{{subst:substcheck}}</includeonly> | type = notice | image = {{#if:{{{image|}}} |[[File:{{{image}}}|40px|Notice|alt={{{imagealt|}}}]]}} | small = {{{small|}}} | smallimage = {{#if:{{{image|}}} |[[File:{{{image}}}|30px|Notice|alt={{{imagealt|}}}]]}} | imageright = {{#if:{{{imageright|}}} |{{{imageright}}} |{{#if:{{{shortcut|{{{shortcut1|}}}}}} |{{Ombox/shortcut|{{{shortcut|{{{shortcut1|}}}}}}|{{{shortcut2|}}}|{{{shortcut3|}}}|{{{shortcut4|}}}|{{{shortcut5|}}}}}}} }} | textstyle = {{{textstyle|text-align: {{#if:{{{center|}}}|center|{{{align|left}}}}};}}} | text = {{#if:{{{header|{{{heading|{{{title|}}}}}}}}} |<div style="{{{headstyle|text-align: {{#if:{{{center|}}}|center|left}};}}}">'''{{{header|{{{heading|{{{title|}}}}}}}}}'''</div>}}<!-- -->{{{text|{{{content|{{{reason|{{{1}}}}}}}}}}}} }}<noinclude> {{Documentation}} </noinclude> 2cbdbb721ca517005f6827650eef5b0f17537a43 Module:TNT 828 27 53 2023-02-02T01:14:59Z mw>ExE Boss 0 Only use the `zzz123` workaround for integer‑only parameter names Scribunto text/plain -- -- INTRO: (!!! DO NOT RENAME THIS PAGE !!!) -- This module allows any template or module to be copy/pasted between -- wikis without any translation changes. All translation text is stored -- in the global Data:*.tab pages on Commons, and used everywhere. -- -- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- ATTENTION: -- Please do NOT rename this module - it has to be identical on all wikis. -- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT -- Please do not modify it anywhere else, as it may get copied and override your changes. -- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT -- -- DESCRIPTION: -- The "msg" function uses a Commons dataset to translate a message -- with a given key (e.g. source-table), plus optional arguments -- to the wiki markup in the current content language. -- Use lang=xx to set language. Example: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- uses a translation message with id = "source-table" --> -- | param1 }} <!-- optional parameter --> -- -- -- The "doc" function will generate the <templatedata> parameter documentation for templates. -- This way all template parameters can be stored and localized in a single Commons dataset. -- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab -- if the current page is Template:Graph:Lines/doc -- local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Forward declaration of the local functions local sanitizeDataset, loadData, link, formatMessage function p.msg(frame) local dataset, id local params = {} local lang = nil for k, v in pairs(frame.args) do if k == 1 then dataset = mw.text.trim(v) elseif k == 2 then id = mw.text.trim(v) elseif type(k) == 'number' then params[k - 2] = mw.text.trim(v) elseif k == 'lang' and v ~= '_' then lang = mw.text.trim(v) end end return formatMessage(dataset, id, params, lang) end -- Identical to p.msg() above, but used from other lua modules -- Parameters: name of dataset, message key, optional arguments -- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.format(dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('format', 1, dataset, 'string') checkType('format', 2, key, 'string') return formatMessage(dataset, key, {...}) end -- Identical to p.msg() above, but used from other lua modules with the language param -- Parameters: language code, name of dataset, message key, optional arguments -- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.formatInLanguage(lang, dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('formatInLanguage', 1, lang, 'string') checkType('formatInLanguage', 2, dataset, 'string') checkType('formatInLanguage', 3, key, 'string') return formatMessage(dataset, key, {...}, lang) end -- Obsolete function that adds a 'c:' prefix to the first param. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' function p.link(frame) return link(frame.args[1]) end function p.doc(frame) local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1]) return frame:extensionTag('templatedata', p.getTemplateData(dataset)) .. formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) end function p.getTemplateData(dataset) -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages local data = loadData(dataset) local names = {} for _, field in ipairs(data.schema.fields) do table.insert(names, field.name) end local numOnly = true local params = {} local paramOrder = {} for _, row in ipairs(data.data) do local newVal = {} local name = nil for pos, columnName in ipairs(names) do if columnName == 'name' then name = row[pos] else newVal[columnName] = row[pos] end end if name then if ( (type(name) ~= "number") and ( (type(name) ~= "string") or not string.match(name, "^%d+$") ) ) then numOnly = false end params[name] = newVal table.insert(paramOrder, name) end end -- Work around json encoding treating {"1":{...}} as an [{...}] if numOnly then params['zzz123']='' end local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description, }) if numOnly then json = string.gsub(json,'"zzz123":"",?', "") end return json end -- Local functions sanitizeDataset = function(dataset) if not dataset then return nil end dataset = mw.text.trim(dataset) if dataset == '' then return nil elseif string.sub(dataset,-4) ~= '.tab' then return dataset .. '.tab' else return dataset end end loadData = function(dataset, lang) dataset = sanitizeDataset(dataset) if not dataset then error(formatMessage(i18nDataset, 'error_no_dataset', {})) end -- Give helpful error to thirdparties who try and copy this module. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error(string.format([['''Missing JsonConfig extension, or not properly configured; Cannot load https://commons.wikimedia.org/wiki/Data:%s. See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset)) end local data = mw.ext.data.get(dataset, lang) if data == false then if dataset == i18nDataset then -- Prevent cyclical calls error('Missing Commons dataset ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) end end return data end -- Given a dataset name, convert it to a title with the 'commons:data:' prefix link = function(dataset) return 'c:Data:' .. mw.text.trim(dataset or '') end formatMessage = function(dataset, key, params, lang) for _, row in pairs(loadData(dataset, lang).data) do local id, msg = unpack(row) if id == key then local result = mw.message.newRawMessage(msg, unpack(params or {})) return result:plain() end end if dataset == i18nDataset then -- Prevent cyclical calls error('Invalid message key "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end return p e8ec673cd9d57a37a2bc326979c7980f1657fc3a Template:Dated maintenance category (articles) 10 137 310 2023-02-03T03:07:34Z wikipedia>UtherSRG 0 UtherSRG moved page [[Template:DMCA]] to [[Template:Dated maintenance category (articles)]]: [[Special:Permalink/1137158761|Requested]] by Robertsky at [[WP:RM/TR]]: Per RM discussion. See [[Template_talk:DMCA#Requested_move_26_January_2023]]. Template protected at template editor/admin level wikitext text/x-wiki {{Dated maintenance category |onlyarticles=yes |1={{{1|}}} |2={{{2|}}} |3={{{3|}}} |4={{{4|}}} |5={{{5|}}} }}<noinclude> {{documentation|Template:Dated maintenance category/doc}} </noinclude> 6bbc57c75cc28708a0e71dd658224d5945d80d68 Template:DMCA 10 70 146 2023-02-03T21:12:07Z wikipedia>Paine Ellsworth 0 add [[WP:RCAT|rcat template]] wikitext text/x-wiki #REDIRECT [[Template:Dated maintenance category (articles)]] {{Redirect category shell| {{R from move}} {{R from modification}} {{R from template shortcut}} }} 711d3f1c53fa704297f675a8dcf1a56719c5b654 Template:Distinguish 10 143 333 2023-02-04T21:16:13Z wikipedia>Hog Farm 0 [[Wikipedia:Templates for discussion/Log/2023 February 4#Template:Distinguish]] closed as keep ([[WP:XFDC#4.0.13|XFDcloser]]) wikitext text/x-wiki {{#invoke:Distinguish|distinguish}}<noinclude><!-- splitting these lines causes {{Documentation}} template to terminate green shading when Distinguish is used in /doc pages. --> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis to Wikidata, not here! --> </noinclude> f949a4cbfd6eb0ab77b832e69059a40a964b1fd8 Module:Exponential search 828 248 720 2023-02-10T20:10:53Z wikipedia>Uzume 0 strict Scribunto text/plain -- This module provides a generic exponential search algorithm. require[[strict]] local checkType = require('libraryUtil').checkType local floor = math.floor local function midPoint(lower, upper) return floor(lower + (upper - lower) / 2) end local function search(testFunc, i, lower, upper) if testFunc(i) then if i + 1 == upper then return i end lower = i if upper then i = midPoint(lower, upper) else i = i * 2 end return search(testFunc, i, lower, upper) else upper = i i = midPoint(lower, upper) return search(testFunc, i, lower, upper) end end return function (testFunc, init) checkType('Exponential search', 1, testFunc, 'function') checkType('Exponential search', 2, init, 'number', true) if init and (init < 1 or init ~= floor(init) or init == math.huge) then error(string.format( "invalid init value '%s' detected in argument #2 to " .. "'Exponential search' (init value must be a positive integer)", tostring(init) ), 2) end init = init or 2 if not testFunc(1) then return nil end return search(testFunc, init, 1, nil) end a9037be0c44536be79b2d7a26155bfb907368ae7 Module:Lua banner 828 121 274 2023-02-16T14:39:53Z wikipedia>Uzume 0 [[Module:Citation]] has been blanked since [[Wikipedia:Templates for discussion/Log/2018 May 13#Module:Citation]]; remove special handling Scribunto text/plain -- This module implements the {{lua}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local p = {} function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args) local modules = mTableTools.compressSparseArray(args) local box = p.renderBox(modules) local trackingCategories = p.renderTrackingCategories(args, modules) return box .. trackingCategories end function p.renderBox(modules) local boxArgs = {} if #modules < 1 then boxArgs.text = '<strong class="error">Error: no modules specified</strong>' else local moduleLinks = {} for i, module in ipairs(modules) do moduleLinks[i] = string.format('[[:%s]]', module) local maybeSandbox = mw.title.new(module .. '/sandbox') if maybeSandbox.exists then moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) end end local moduleList = mList.makeList('bulleted', moduleLinks) local title = mw.title.getCurrentTitle() if title.subpageText == "doc" then title = title.basePageTitle end if title.contentModel == "Scribunto" then boxArgs.text = 'This module depends on the following other modules:' .. moduleList else boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList end end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]' return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, modules, titleObj) if yesno(args.nocat) then return '' end local cats = {} -- Error category if #modules < 1 then cats[#cats + 1] = 'Lua templates with errors' end -- Lua templates category titleObj = titleObj or mw.title.getCurrentTitle() local subpageBlacklist = { doc = true, sandbox = true, sandbox2 = true, testcases = true } if not subpageBlacklist[titleObj.subpageText] then local protCatName if titleObj.namespace == 10 then local category = args.category if not category then local categories = { ['Module:String'] = 'Templates based on the String Lua module', ['Module:Math'] = 'Templates based on the Math Lua module', ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', ['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module' } category = modules[1] and categories[modules[1]] category = category or 'Lua-based templates' end cats[#cats + 1] = category protCatName = "Templates using under-protected Lua modules" elseif titleObj.namespace == 828 then protCatName = "Modules depending on under-protected modules" end if not args.noprotcat and protCatName then local protLevels = { autoconfirmed = 1, extendedconfirmed = 2, templateeditor = 3, sysop = 4 } local currentProt if titleObj.id ~= 0 then -- id is 0 (page does not exist) if am previewing before creating a template. currentProt = titleObj.protectionLevels["edit"][1] end if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end for i, module in ipairs(modules) do if module ~= "WP:libraryUtil" then local moduleProt = mw.title.new(module).protectionLevels["edit"][1] if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end if moduleProt < currentProt then cats[#cats + 1] = protCatName break end end end end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p 03ec1b34a40121efc562c0c64a67ebbf57d56dff Template:Template display 10 127 286 2023-02-17T19:32:49Z wikipedia>Jonesey95 0 link wikitext text/x-wiki <includeonly>{{#invoke:Message box|ombox|type=notice |image={{#switch:{{{1}}}|adaptive=[[File:Different devices simple.svg|65x65px|link=|alt=]]|nomobile=[[File:Handheld devices no.svg|55px|link=|alt=]]|nodesktop=[[File:Desktop devices no.svg|55px|link=|alt=]]}} |text={{#switch:{{{1}}} | adaptive = This template is [[Adaptive web design|responsive]] and <strong>displays differently in mobile and desktop view</strong>. Read the documentation for an explanation of the differences and why they exist. | nomobile = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the documentation for an explanation. | nodesktop = This template does ''not'' display in the desktop view of Wikipedia; it is <strong>mobile only</strong>. Read the documentation for an explanation. | nomobilesidebar = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the [[Template:Sidebar/doc|parent documentation]] for an explanation. | vector2022 = This template does not work properly in the [[Wikipedia:Vector 2022|Vector 2022]] skin. Read the documentation for an explanation. | #default = {{{1}}} }}}}</includeonly><noinclude> {{Documentation}} </noinclude> 47cc41eacc2d2dec246f01b81111b280cec901a3 Template:Italic title/doc 10 193 547 2023-03-02T00:32:10Z wikipedia>DB1729 0 Reverted 1 edit by [[Special:Contributions/Tanzib1|Tanzib1]] ([[User talk:Tanzib1|talk]]) to last revision by DB1729 wikitext text/x-wiki {{Documentation subpage}} <!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]) --> {{High-use}} {{Template shortcut|Italic|Italics}} {{lua|Module:Italic title}} '''Template:Italic title''' italicizes page titles. Article titles cannot contain wiki formatting, such as <code><nowiki>''</nowiki></code>, so article titles cannot be italicized in the normal way. This template has the following effects: * Titles with no [[parentheses]] <code>()</code> are fully italicised: ** {{Nowrap|<code>Foo</code>}} &rarr; {{Nowrap|'''''Foo'''''}} ** {{Nowrap|<code>Talk:Foo</code>}} &rarr; {{Nowrap|'''Talk:''Foo'''''}} * Titles which contain parentheses are italicised before the first opening parenthesis: ** {{Nowrap|<code>Foo (bar)</code>}} &rarr; {{Nowrap|'''''Foo'' (bar)'''}} ** {{Nowrap|<code>Talk:Foo (bar)</code>}} &rarr; {{Nowrap|'''Talk:''Foo'' (bar)'''}} * Italicization can be forced on parenthesized text with the {{para|all|yes}} parameter. This template should only be used in articles that meet the criteria for italic titles given in the [[Wikipedia:Article titles#Italics and other formatting|Article titles]] policy. Meta templates which use this template should place {{Tl|Auto italic title}} in their documentation. ==Location on page== If the page has a {{t|Short description}} template, this template should go immediately underneath it, normally as the second item on the page. If there is no {{t|Short description}} template, add this template at the very top of the page, above everything else. There ought to be no blank line after {{tlg|Italic title|nolink=1}} because that will cause an extra blank line in the page's rendered appearance. ==Usage== ===Basic usage=== {{tlx|Italic title}} ===All parameters=== {{tlx|Italic title|noerror|string{{=}}text in title|all{{=}}yes}} == Parameters == * {{para|1}}: if this is set to {{para|1|noerror}}, error messages are suppressed. See [[#Errors]] for more details. * {{para|all}}: if this is set to {{para|all|yes}}, text in parentheses is italicized. * {{para|string}}: instead of italicizing the whole title, italicize only some specific text. For example, using {{para|string|Ally McBeal}} on the page {{nowrap|"List of Ally McBeal episodes"}} would result in {{nowrap|"List of ''Ally McBeal'' episodes"}}. <code><nowiki>{{</nowiki>[[Wikipedia:Page name#Changing the displayed title|DISPLAYTITLE]]:Desired Title<nowiki>}}</nowiki></code> can be used instead in cases not covered by the parameters, e.g. two substrings with italics, or italics combined with lowercase first character. == Errors == Sometimes you may see red error messages like this at the top of the page: <span class="error"><nowiki>Warning: Display title "<i>Article title (disambiguation)</i>" overrides earlier display title "<i>Article title</i> (disambiguation)".</nowiki></span> This usually means that there is another instance of {{tl|Italic title}} on the page, usually added by one of the infoboxes. Certain infoboxes, for example {{tl|Infobox album}}, add {{tl|Italic title}} by default. Check the template documentation for any infobox used on the page; it may have instructions about how to deal with italic titles. You may be able to adjust the italics from the infobox instead of using {{tl|Italic title}} at the top of the article. Or if that doesn't work, you may be able to disable the infobox's italics code altogether. If you are still having problems, try putting {{tl|Italic title}} after the infobox. You can suppress the error message by using the code <code><nowiki>{{Italic title|noerror}}</nowiki></code>. Technical details: this template uses the [[Wikipedia:Magic words#Behavior switches|DISPLAYTITLE magic word]] to italicize the title. Error messages can be produced by any two templates which use this magic word, and are not limited to this template. If you are unsure why you are getting a particular error message, you can ask about it at [[Wikipedia:Village pump (technical)]]. == Tracking categories == If the {{para|string}} parameter is used but that string is not found in the title, the page is added to [[:Category:Pages using italic title with no matching string]]. == TemplateData == {{TemplateDataHeader}} <templatedata> { "description": "A template to italicize article titles", "params": { "1": { "label": "Error options", "description": "If set to \"noerror\", suppresses error messages. Using this is a last-ditch fix - see the template documentation for other options.", "type": "string" }, "all": { "label": "All", "description": "If set to \"yes\", italicization is forced on parenthesized text.", "type": "string", "required": false }, "string": { "label": "String", "description": "Specify a string in the title to italicize, rather than italicizing the entire title.", "type": "string", "required": false } } } </templatedata> ==See also== * [[WP:ITALICTITLE]] * {{Tlx|Italic title prefixed}} * {{Tlx|Italics correction}} {{Correct title examples}} {{When on basepage |<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! --> [[Category:Correct title templates]] [[Category:Lua-based templates]] }} 0f6069dab29a8a2cce34923da916a69b26bd6ed1 Template:Warnsign 10 213 604 2023-03-09T01:55:22Z wikipedia>Terasail 0 Use [[Template:Respond]] wikitext text/x-wiki {{Respond|Ambox warning pn.svg|{{{{{|safesubst:}}}ucfirst:{{{1|Warning}}}}}|alt=red-outlined triangle containing exclamation point}}<noinclude> {{Documentation}} <!--Please add this template's categories to the /doc subpage, not here - thanks!--> </noinclude> 77a823d5d0311de0e5fda3654918a744a3fa4033 Module:Lang/data 828 239 702 2023-03-09T14:48:18Z wikipedia>Trappist the monk 0 fix; Scribunto text/plain local lang_obj = mw.language.getContentLanguage(); local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag --[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------ primary table of tables that decode: lang -> language tags and names script -> ISO 15924 script tags region -> ISO 3166 region tags variant -> iana registered variant tags suppressed -> map of scripts tags and their associated language tags all of these data come from separate modules that are derived from the IANA language-subtag-registry file key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches the first name. ]] local function key_to_lower (module, src_type) local out = {}; local source = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data if 'var_sup' == src_type then for k, v in pairs (source) do out[k:lower()] = v; -- for variant and suppressed everything is needed end elseif 'lang' == src_type and source.active then -- for ~/iana_languages (active) for k, v in pairs (source.active) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end elseif 'lang_dep' == src_type and source.deprecated then -- for ~/iana_languages (deprecated) for k, v in pairs (source.deprecated) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end else -- here for all other sources for k, v in pairs (source) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end end return out; end local lang_name_table_t = { lang = key_to_lower ('Module:Language/data/iana languages', 'lang'), lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'), script = key_to_lower ('Module:Language/data/iana scripts'), -- script keys are capitalized; set to lower region = key_to_lower ('Module:Language/data/iana regions'), -- region keys are uppercase; set to lower variant = key_to_lower ('Module:Language/data/iana variants', 'var_sup'), suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower } --[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >-------------------------------- For internationalization; not used at en.wiki The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal. Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki language list for the local language. Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all. When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens add an appropriate entry to the override table below. Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply spelling differences: bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym dv: IANA: Dhivehi MW: Divehi el: IANA: Modern Greek MW: Greek ht: IANA: Haitian MW: Haitian Creole ky: IANA: Kirghiz MW: Kyrgyz li: IANA: Limburgan MW: Limburgish or: IANA: Oriya MW: Odia os: IANA: Ossetian MW: Ossetic "pa: IANA: Panjabi MW: Punjabi "ps: IANA: Pushto MW: Pashto "to: IANA: Tonga MW: Tongan "ug: IANA: Uighur MW: Uyghur use the override table to override language names that are incorrect for your project To see the list of names that MediaWiki has for your language, enter this in the Debug colsole: =mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all')) (replacing <tag> with the language tag for your language) Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true. ]] local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki -- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all if true == media_wiki_override_enable then local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list if lang_name_table_t.lang[tag] then -- if the tag is in the main list lang_name_table_t.lang[tag] = name; -- overwrite exisiting name with the name from MediaWiki end end end --[[--------------------------< O V E R R I D E >-------------------------------------------------------------- Language codes and names in this table override the BCP47 names in lang_name_table. indexes in this table shall always be lower case ]] local override = { ------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------ ["ab"] = "Abkhaz", -- to match en.wiki article name ["ca-valencia"] = "Valencian", ["cu"] = "Church Slavonic", -- 2nd IANA name; ["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names ["de-ch"] = "Swiss Standard German", ["en-au"] = "Australian English", ["en-ca"] = "Canadian English", ["en-emodeng"] = "Early Modern English", ["en-gb"] = "British English", ["en-ie"] = "Irish English", ["en-in"] = "Indian English", ["en-nz"] = "New Zealand English", ["en-us"] = "American English", ["en-za"] = "South African English", ["fy"] = "West Frisian", -- Western Frisian ["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title ["nl-be"] = "Flemish", -- match MediaWiki ["oc-provenc"] = "Provençal", ["ps"] = "Pashto", -- Pushto ["pt-br"] = "Brazilian Portuguese", -- match MediaWiki ["tw-asante"] = "Asante Twi", ["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name -- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages --<begin do-not-edit except to comment out>-- ["av"] = "Avar", -- Avaric ["bo"] = "Standard Tibetan", -- Tibetan ["el"] = "Greek", -- Modern Greek -- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa ["ff"] = "Fula", -- Fulah ["ht"] = "Haitian Creole", -- Haitian ["hz"] = "Otjiherero", -- Herero ["ii"] = "Yi", -- Sichuan Yi ["ki"] = "Gikuyu", -- Kikuyu ["kl"] = "Greenlandic", -- Kalaallisut ["ky"] = "Kyrgyz", -- Kirghiz ["lg"] = "Luganda", -- Ganda ["li"] = "Limburgish", -- Limburgan ["mi"] = "Māori", -- Maori ["na"] = "Nauruan", -- Nauru ["nb"] = "Bokmål", -- Norwegian Bokmål ["nd"] = "Northern Ndebele", -- North Ndebele ["nn"] = "Nynorsk", -- Norwegian Nynorsk ["nr"] = "Southern Ndebele", -- South Ndebele ["ny"] = "Chichewa", -- Nyanja ["oj"] = "Ojibwe", -- Ojibwa ["or"] = "Odia", -- Oriya ["pa"] = "Punjabi", -- Panjabi ["rn"] = "Kirundi", -- Rundi ["sl"] = "Slovene", -- Slovenian ["ss"] = "Swazi", -- Swati ["st"] = "Sotho", -- Southern Sotho ["to"] = "Tongan", -- Tonga --<end do-not-edit except to comment out>-- ------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >---------------------------------------------- ["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash) ["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name ["art"] = "constructed", -- to match en.wiki article; lowercase for category name ["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title ["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title ["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration; ["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat ["bxr"] = "Russian Buryat", -- Russia Buriat; ["bxu"] = "Chinese Buryat", -- China Buriat; ["byr"] = "Yipma", -- Baruya, Yipma ["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic ["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title ["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash) ["frr"] = "North Frisian", -- Northern Frisian ["frs"] = "East Frisian Low Saxon", -- Eastern Frisian ["gsw-fr"] = "Alsatian", -- match MediaWiki ["haa"] = "Hän", -- Han; to match en.wiki article title ["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash) ["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title ["jam"] = "Jamaican Patois", -- Jamaican Creole English ["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco ["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo ["mhr"] = "Meadow Mari", -- Eastern Mari ["mid"] = "Modern Mandaic", -- Mandaic ['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope; ["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash) ["mla"] = "Tamambo", -- Malo ['mte'] = "Mono-Alu", -- Mono (Solomon Islands) ['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope; ["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title ["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title ["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash) ["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title ["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text ["nrf-gg"] = "Guernésiais", -- match MediaWiki ["nrf-je"] = "Jèrriais", -- match MediaWiki ["nzi"] = "Nzema", -- Nzima; to match en.wiki article title ["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash) ["orv"] = "Old East Slavic", -- Old Russian ["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article ["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article ["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title ["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name() ["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article ["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title ["stq"] = "Saterland Frisian", -- Saterfriesisch ["und"] = "undetermined", -- capitalization to match existing category ["wrg"] = "Warrongo", -- Warungu ["xal-ru"] = "Kalmyk", -- to match en.wiki article title ["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño ["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title ["zxx"] = "no linguistic content", -- capitalization -- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages --<begin do-not-edit except to comment out>-- ["ace"] = "Acehnese", -- Achinese ["aec"] = "Sa'idi Arabic", -- Saidi Arabic ["akl"] = "Aklan", -- Aklanon ["alt"] = "Altay", -- Southern Altai ["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache ["bal"] = "Balochi", -- Baluchi -- ["bcl"] = "Central Bicolano", -- Central Bikol ["bin"] = "Edo", -- Bini ["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya ["chg"] = "Chagatay", -- Chagatai ["ckb"] = "Sorani Kurdish", -- Central Kurdish ["cnu"] = "Shenwa", -- Chenoua ["coc"] = "Cocopah", -- Cocopa ["diq"] = "Zazaki", -- Dimli ["fit"] = "Meänkieli", -- Tornedalen Finnish ["fkv"] = "Kven", -- Kven Finnish ["frk"] = "Old Frankish", -- Frankish ["gez"] = "Ge'ez", -- Geez ["gju"] = "Gujari", -- Gujari ["gsw"] = "Alemannic German", -- Swiss German ["gul"] = "Gullah", -- Sea Island Creole English ["hak"] = "Hakka", -- Hakka Chinese ["hbo"] = "Biblical Hebrew", -- Ancient Hebrew ["hnd"] = "Hindko", -- Southern Hindko -- ["ikt"] = "Inuvialuk", -- Inuinnaqtun ["kaa"] = "Karakalpak", -- Kara-Kalpak ["khb"] = "Tai Lü", -- Lü ["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish ["kpo"] = "Kposo", -- Ikposo ["krj"] = "Kinaray-a", -- Kinaray-A ["ktz"] = "Juǀ'hoan", -- Juǀʼhoan ["lez"] = "Lezgian", -- Lezghian ["liv"] = "Livonian", -- Liv ["lng"] = "Lombardic", -- Langobardic ["mia"] = "Miami-Illinois", -- Miami ["miq"] = "Miskito", -- Mískito ["mix"] = "Mixtec", -- Mixtepec Mixtec ["mni"] = "Meitei", -- Manipuri ["mrj"] = "Hill Mari", -- Western Mari ["mww"] = "White Hmong", -- Hmong Daw ["nds-nl"] = "Dutch Low Saxon", -- Low German -- ["new"] = "Nepal Bhasa", -- Newari ["nso"] = "Northern Sotho", -- Pedi -- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari ["ood"] = "O'odham", -- Tohono O'odham ["otk"] = "Old Turkic", -- Old Turkish ["pal"] = "Middle Persian", -- Pahlavi ["pam"] = "Kapampangan", -- Pampanga ["phr"] = "Potwari", -- Pahari-Potwari ["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit -- ["pnb"] = "Punjabi", -- Western Panjabi ["psu"] = "Shauraseni", -- Sauraseni Prākrit ["rap"] = "Rapa Nui", -- Rapanui ["rar"] = "Cook Islands Māori", -- Rarotongan ["rmu"] = "Scandoromani", -- Tavringer Romani ["rom"] = "Romani", -- Romany ["rup"] = "Aromanian", -- Macedo-Romanian ["ryu"] = "Okinawan", -- Central Okinawan ["sdc"] = "Sassarese", -- Sassarese Sardinian ["sdn"] = "Gallurese", -- Gallurese Sardinian ["shp"] = "Shipibo", -- Shipibo-Conibo ["src"] = "Logudorese", -- Logudorese Sardinian ["sro"] = "Campidanese", -- Campidanese Sardinian ["tkl"] = "Tokelauan", -- Tokelau ["tvl"] = "Tuvaluan", -- Tuvalu ["tyv"] = "Tuvan", -- Tuvinian ["vls"] = "West Flemish", -- Vlaams ["wep"] = "Westphalian", -- Westphalien ["xal"] = "Oirat", -- Kalmyk ["xcl"] = "Old Armenian", -- Classical Armenian ["yua"] = "Yucatec Maya", -- Yucateco --<end do-not-edit except to comment out>-- ------------------------------< P R I V A T E _ U S E _ T A G S >---------------------------------------------- ["akk-x-latbabyl"] = "Late Babylonian", ["akk-x-midassyr"] = "Middle Assyrian Akkadian", ["akk-x-midbabyl"] = "Middle Babylonian Akkadian", ["akk-x-neoassyr"] = "Neo-Assyrian Akkadian", ["akk-x-neobabyl"] = "Neo-Babylonian Akkadian", ["akk-x-old"] = "Old Akkadian", ["akk-x-oldassyr"] = "Old Assyrian Akkadian", ["akk-x-oldbabyl"] = "Old Babylonian Akkadian", ["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages ["ca-x-old"] = "Old Catalan", ["cel-x-proto"] = "Proto-Celtic", -- cel in IANA is Celtic languages ["egy-x-demotic"] = "Demotic Egyptian", ["egy-x-late"] = "Late Egyptian", ["egy-x-middle"] = "Middle Egyptian", ["egy-x-old"] = "Old Egyptian", ["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages ["gmw-x-ecg"] = "East Central German", ["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre ["grc-x-attic"] = "Attic Greek", ["grc-x-biblical"] = "Biblical Greek", ["grc-x-byzant"] = "Byzantine Greek", ["grc-x-classic"] = "Classical Greek", ["grc-x-doric"] = "Doric Greek", ["grc-x-hellen"] = "Hellenistic Greek", ["grc-x-ionic"] = "Ionic Greek", ["grc-x-koine"] = "Koinē Greek", ["grc-x-medieval"] = "Medieval Greek", ["grc-x-patris"] = "Patristic Greek", ["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages ["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages ["ine-x-proto"] = "Proto-Indo-European", ["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages ["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages ["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there ["la-x-medieval"] = "Medieval Latin", ["la-x-new"] = "New Latin", ["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect ["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages ["prg-x-old"] = "Old Prussian", ["sem-x-ammonite"] = "Ammonite", ["sem-x-aramaic"] = "Aramaic", ["sem-x-canaan"] = "Canaanite languages", ["sem-x-dumaitic"] = "Dumaitic", ["sem-x-egurage"] = "Eastern Gurage", ["sem-x-hatran"] = "Hatran Aramaic", ["sem-x-oldsoara"] = "Old South Arabian", ["sem-x-palmyren"] = "Palmyrene Aramaic", ["sem-x-proto"] = "Proto-Semitic", ["sem-x-taymanit"] = "Taymanitic", ["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages ["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai ["yuf-x-wal"] = "Walapai", ["yuf-x-yav"] = "Yavapai", } --[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------ for those rare occasions when article titles don't fit with the normal '<language name>-language', this table maps language code to article title. Use of this table should be avoided and the use of redirects preferred as that is the long-standing method of handling article names that don't fit with the normal pattern ]] local article_name = { ['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page ["lij"] = "Ligurian (Romance language)", -- Ligurian; see Template_talk:Lang#Ligurian_dab ['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon) ['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages ['mnr'] = "Mono language (California)", -- Mono (USA) ['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon) ['qwm'] = "Kuman (Russia)", -- Kuman (Russia); to avoid Kuman dab page ["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon) ["xlg"] = "Ligurian (ancient language)", -- see Template_talk:Lang#Ligurian_dab ["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo) } --[=[-------------------------< R T L _ S C R I P T S >-------------------------------------------------------- ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]] last update to this list: 2017-12-24 ]=] local rtl_scripts = { 'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr', 'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb', 'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg', 'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole', }; --[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------ This is a table of tables of transliteration standards and the language codes or language scripts that apply to those standards. This table is used to create the tool-tip text associated with the transliterated text displayed by some of the {{lang-??}} templates. These tables are more-or-less copied directly from {{transl}}. The standard 'NO_STD' is a construct to allow for the cases when no |std= parameter value is provided. ]] local translit_title_table = { ['ahl'] = { ['default'] = 'Academy of the Hebrew Language transliteration', }, ['ala'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['ala-lc'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['batr'] = { ['default'] = 'Bikdash Arabic Transliteration Rules', }, ['bgn/pcgn'] = { ['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration', }, ['din'] = { ['ar'] = 'DIN 31635 Arabic', ['fa'] = 'DIN 31635 Arabic', ['ku'] = 'DIN 31635 Arabic', ['ps'] = 'DIN 31635 Arabic', ['tg'] = 'DIN 31635 Arabic', ['ug'] = 'DIN 31635 Arabic', ['ur'] = 'DIN 31635 Arabic', ['arab'] = 'DIN 31635 Arabic', ['default'] = 'DIN transliteration', }, ['eae'] = { ['default'] = 'Encyclopaedia Aethiopica transliteration', }, ['hepburn'] = { ['default'] = 'Hepburn transliteration', }, ['hunterian'] = { ['default'] = 'Hunterian transliteration', }, ['iast'] = { ['default'] = 'International Alphabet of Sanskrit transliteration', }, ['iso'] = { -- when a transliteration standard is supplied ['ab'] = 'ISO 9 Cyrillic', ['ba'] = 'ISO 9 Cyrillic', ['be'] = 'ISO 9 Cyrillic', ['bg'] = 'ISO 9 Cyrillic', ['kk'] = 'ISO 9 Cyrillic', ['ky'] = 'ISO 9 Cyrillic', ['mn'] = 'ISO 9 Cyrillic', ['ru'] = 'ISO 9 Cyrillic', ['tg'] = 'ISO 9 Cyrillic', ['uk'] = 'ISO 9 Cyrillic', ['bua'] = 'ISO 9 Cyrillic', ['sah'] = 'ISO 9 Cyrillic', ['tut'] = 'ISO 9 Cyrillic', ['xal'] = 'ISO 9 Cyrillic', ['cyrl'] = 'ISO 9 Cyrillic', ['ar'] = 'ISO 233 Arabic', ['ku'] = 'ISO 233 Arabic', ['ps'] = 'ISO 233 Arabic', ['ug'] = 'ISO 233 Arabic', ['ur'] = 'ISO 233 Arabic', ['arab'] = 'ISO 233 Arabic', ['he'] = 'ISO 259 Hebrew', ['yi'] = 'ISO 259 Hebrew', ['hebr'] = 'ISO 259 Hebrew', ['el'] = 'ISO 843 Greek', ['grc'] = 'ISO 843 Greek', ['ja'] = 'ISO 3602 Japanese', ['hira'] = 'ISO 3602 Japanese', ['hrkt'] = 'ISO 3602 Japanese', ['jpan'] = 'ISO 3602 Japanese', ['kana'] = 'ISO 3602 Japanese', ['zh'] = 'ISO 7098 Chinese', ['chi'] = 'ISO 7098 Chinese', ['pny'] = 'ISO 7098 Chinese', ['zho'] = 'ISO 7098 Chinese', -- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani? ['hans'] = 'ISO 7098 Chinese', ['hant'] = 'ISO 7098 Chinese', ['ka'] = 'ISO 9984 Georgian', ['kat'] = 'ISO 9984 Georgian', ['arm'] = 'ISO 9985 Armenian', ['hy'] = 'ISO 9985 Armenian', ['th'] = 'ISO 11940 Thai', ['tha'] = 'ISO 11940 Thai', ['ko'] = 'ISO 11941 Korean', ['kor'] = 'ISO 11941 Korean', ['awa'] = 'ISO 15919 Indic', ['bho'] = 'ISO 15919 Indic', ['bn'] = 'ISO 15919 Indic', ['bra'] = 'ISO 15919 Indic', ['doi'] = 'ISO 15919 Indic', ['dra'] = 'ISO 15919 Indic', ['gon'] = 'ISO 15919 Indic', ['gu'] = 'ISO 15919 Indic', ['hi'] = 'ISO 15919 Indic', ['hno'] = 'ISO 15919 Indic', ['inc'] = 'ISO 15919 Indic', ['kn'] = 'ISO 15919 Indic', ['kok'] = 'ISO 15919 Indic', ['ks'] = 'ISO 15919 Indic', ['mag'] = 'ISO 15919 Indic', ['mai'] = 'ISO 15919 Indic', ['ml'] = 'ISO 15919 Indic', ['mr'] = 'ISO 15919 Indic', ['ne'] = 'ISO 15919 Indic', ['new'] = 'ISO 15919 Indic', ['or'] = 'ISO 15919 Indic', ['pa'] = 'ISO 15919 Indic', ['pnb'] = 'ISO 15919 Indic', ['raj'] = 'ISO 15919 Indic', ['sa'] = 'ISO 15919 Indic', ['sat'] = 'ISO 15919 Indic', ['sd'] = 'ISO 15919 Indic', ['si'] = 'ISO 15919 Indic', ['skr'] = 'ISO 15919 Indic', ['ta'] = 'ISO 15919 Indic', ['tcy'] = 'ISO 15919 Indic', ['te'] = 'ISO 15919 Indic', ['beng'] = 'ISO 15919 Indic', ['brah'] = 'ISO 15919 Indic', ['deva'] = 'ISO 15919 Indic', ['gujr'] = 'ISO 15919 Indic', ['guru'] = 'ISO 15919 Indic', ['knda'] = 'ISO 15919 Indic', ['mlym'] = 'ISO 15919 Indic', ['orya'] = 'ISO 15919 Indic', ['sinh'] = 'ISO 15919 Indic', ['taml'] = 'ISO 15919 Indic', ['telu'] = 'ISO 15919 Indic', ['default'] = 'ISO transliteration', }, ['jyutping'] = { ['default'] = 'Jyutping transliteration', }, ['mlcts'] = { ['default'] = 'Myanmar Language Commission Transcription System', }, ['mr'] = { ['default'] = 'McCune–Reischauer transliteration', }, ['nihon-shiki'] = { ['default'] = 'Nihon-shiki transliteration', }, ['no_std'] = { -- when no transliteration standard is supplied ['akk'] = 'Semitic transliteration', ['sem'] = 'Semitic transliteration', ['phnx'] = 'Semitic transliteration', ['xsux'] = 'Cuneiform transliteration', }, ['pinyin'] = { ['default'] = 'Pinyin transliteration', }, ['rr'] = { ['default'] = 'Revised Romanization of Korean transliteration', }, ['rtgs'] = { ['default'] = 'Royal Thai General System of Transcription', }, ['satts'] = { ['default'] = 'Standard Arabic Technical Transliteration System transliteration', }, ['scientific'] = { ['default'] = 'scientific transliteration', }, ['ukrainian'] = { ['default'] = 'Ukrainian National system of romanization', }, ['ungegn'] = { ['default'] = 'United Nations Group of Experts on Geographical Names transliteration', }, ['wadegile'] = { ['default'] = 'Wade–Giles transliteration', }, ['wehr'] = { ['default'] = 'Hans Wehr transliteration', }, }; return { this_wiki_lang_tag = this_wiki_lang_tag, this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction article_name = article_name, lang_name_table = lang_name_table_t, override = override, rtl_scripts = rtl_scripts, special_tags_table = special_tags_table, translit_title_table = translit_title_table, }; 44981b3b66900e816590946e3e049c421ebecc80 Template:Respond 10 217 612 2023-03-10T02:10:00Z wikipedia>Terasail 0 Add safesubst wikitext text/x-wiki <includeonly>[[File:{{{{{|safesubst:}}}#switch:{{{1|{{{icon|}}}}}} |blackcheck = Black check.svg |bluebrokenplus = Symbol unsupport2 vote.svg |bluecheck2 = Cornflower blue check.svg |bluecheck = Artículo bueno-blue.svg |blueclock = Pictogram voting wait blue.svg |blueplus = Symbol support2 vote.svg |deferred = Symbol deferred.svg |greencheck2 = Yes check.svg |greencheck = Symbol confirmed.svg |greenclock = Pictogram voting wait green.svg |greenplus = Symbol support vote.svg |greybrokenplus = Symbol unsupport vote.svg |greyexclamation = Pictogram voting comment.svg |info=Symbol information vote.svg |minus = Symbol declined.svg |neutral = Symbol neutral vote.svg |orangeclock = Pictogram voting wait orange.svg |orangeexclamation = Ambox important.svg |redexclamation = Ambox important red.svg |pinkclock = Pictogram voting wait pink.svg |question2 = Symbol question.svg |question = Pictogram voting question.svg |wait = Symbol_wait.svg |xmark2 = X mark.svg |xmark = Symbol unrelated.svg |yellowcheck = Yellow check.svg |yellowclock = Pictogram voting wait.svg |{{{1|{{{icon|Pictogram voting question.svg}}}}}}}}|{{{size|18px}}}|alt={{{alt|}}}]]&nbsp;'''{{{2|{{{text|Response}}}}}}'''</includeonly><noinclude> {{Documentation}} </noinclude> b11f14454f435e825639a46c4fe356254a552b63 Module:Shortcut/styles.css 828 163 373 2023-03-14T15:53:59Z wikipedia>Izno 0 Undid revision 1144571295 by [[Special:Contributions/TheDJ|TheDJ]] ([[User talk:TheDJ|talk]]) I'm sorry, that's not what we discussed or agreed to sanitized-css text/css /* {{pp-template}} */ .module-shortcutboxplain { float: right; margin: 0 0 0 1em; border: 1px solid #aaa; background: #fff; padding: 0.3em 0.6em 0.2em 0.6em; text-align: center; font-size: 85%; } .module-shortcutboxleft { float: left; margin: 0 1em 0 0; } .module-shortcutlist { display: inline-block; border-bottom: 1px solid #aaa; margin-bottom: 0.2em; } .module-shortcutboxplain ul { font-weight: bold; } .module-shortcutanchordiv { position: relative; top: -3em; } li .module-shortcutanchordiv { float: right; /* IE/Edge in list items */ } .mbox-imageright .module-shortcutboxplain { padding: 0.4em 1em 0.4em 1em; line-height: 1.3; margin: 0; } ccf3877e4b14726147d3b1d8a297fbecacdb2cf8 Module:Sidebar/configuration 828 100 216 2023-03-14T22:32:24Z wikipedia>Izno 0 add hlist and plainlist_templatestyles keys Scribunto text/plain return { i18n = { child_yes = 'yes', float_none = 'none', float_left = 'left', wrap_true = 'true', navbar_none = 'none', navbar_off = 'off', default_list_title = 'List', title_not_to_add_navbar = 'Template:Sidebar', collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists', templatestyles = 'Module:Sidebar/styles.css', hlist_templatestyles = 'Hlist/styles.css', plainlist_templatestyles = 'Plainlist/styles.css', category = { child = '[[Category:Pages using sidebar with the child parameter]]', conversion = '[[Category:Sidebars with styles needing conversion]]' }, pattern = { collapse_sandbox = '/sandbox$', sandbox = '/sandbox$', subgroup = 'sidebar%-subgroup', style_conversion = 'style$', uncategorized_conversion_titles = { '/[Ss]andbox', '/[Tt]estcases', '/[Dd]oc$' } }, class = { sidebar = 'sidebar', subgroup = 'sidebar-subgroup', collapse = 'sidebar-collapse', float_none = 'sidebar-none', float_left = 'sidebar-left', wraplinks = 'nowraplinks', outer_title = 'sidebar-outer-title', top_image = 'sidebar-top-image', top_caption = 'sidebar-top-caption', pretitle = 'sidebar-pretitle', pretitle_with_top_image = 'sidebar-pretitle-with-top-image', title = 'sidebar-title', title_with_pretitle = 'sidebar-title-with-pretitle', image = 'sidebar-image', caption = 'sidebar-caption', above = 'sidebar-above', heading = 'sidebar-heading', content = 'sidebar-content', content_with_subgroup = 'sidebar-content-with-subgroup', below = 'sidebar-below', navbar = 'sidebar-navbar', list = 'sidebar-list', list_title = 'sidebar-list-title', list_title_centered = 'sidebar-list-title-c', list_content = 'sidebar-list-content' } } } dc2a980ac2162a898f7c21e6d6ba7e994dfeb315 Module:Sidebar 828 99 214 2023-03-14T22:35:53Z wikipedia>Izno 0 move these items to config, discovered during work at meta Scribunto text/plain require('strict') local cfg = mw.loadData('Module:Sidebar/configuration') local p = {} local getArgs = require('Module:Arguments').getArgs --[[ Categorizes calling templates and modules with a 'style' parameter of any sort for tracking to convert to TemplateStyles. TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module. TODO would probably want to remove /log and /archive as CS1 does ]] local function categorizeTemplatesWithInlineStyles(args) local title = mw.title.getCurrentTitle() if title.namespace ~= 10 and title.namespace ~= 828 then return '' end for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do if title.text:match(pattern) then return '' end end for key, _ in pairs(args) do if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then return cfg.i18n.category.conversion end end end --[[ For compatibility with the original {{sidebar with collapsible lists}} implementation, which passed some parameters through {{#if}} to trim their whitespace. This also triggered the automatic newline behavior. ]] -- See ([[meta:Help:Newlines and spaces#Automatic newline]]) local function trimAndAddAutomaticNewline(s) s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1") if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then return '\n' .. s else return s end end --[[ Finds whether a sidebar has a subgroup sidebar. ]] local function hasSubgroup(s) if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then return true else return false end end local function has_navbar(navbar_mode, sidebar_name) return navbar_mode ~= cfg.i18n.navbar_none and navbar_mode ~= cfg.i18n.navbar_off and ( sidebar_name or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~= cfg.i18n.title_not_to_add_navbar ) end local function has_list_class(args, htmlclass) local patterns = { '^' .. htmlclass .. '$', '%s' .. htmlclass .. '$', '^' .. htmlclass .. '%s', '%s' .. htmlclass .. '%s' } for arg, value in pairs(args) do if type(arg) == 'string' and mw.ustring.find(arg, 'class') then for _, pattern in ipairs(patterns) do if mw.ustring.find(args[arg] or '', pattern) then return true end end end end return false end -- there are a lot of list classes in the wild, so we add their TemplateStyles local function add_list_styles(args) local frame = mw.getCurrentFrame() local function add_list_templatestyles(htmlclass, templatestyles) if has_list_class(args, htmlclass) then return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } else return '' end end local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.plainlist_templatestyles) local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles) -- a second workaround for [[phab:T303378]] -- when that issue is fixed, we can actually use has_navbar not to emit the -- tag here if we want if has_navbar(args.navbar, args.name) and hlist_styles == '' then hlist_styles = frame:extensionTag{ name = 'templatestyles', args = { src = cfg.i18n.hlist_templatestyles} } end -- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note] return hlist_styles .. plainlist_styles end -- work around [[phab:T303378]] -- for each arg: find all the templatestyles strip markers, insert them into a -- table. then remove all templatestyles markers from the arg local function move_hiding_templatestyles(args) local gfind = string.gfind local gsub = string.gsub local templatestyles_markers = {} local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)' for k, arg in pairs(args) do for marker in gfind(arg, strip_marker_pattern) do table.insert(templatestyles_markers, marker) end args[k] = gsub(arg, strip_marker_pattern, '') end return templatestyles_markers end --[[ Main sidebar function. Takes the frame, args, and an optional collapsibleClass. The collapsibleClass is and should be used only for sidebars with collapsible lists, as in p.collapsible. ]] function p.sidebar(frame, args, collapsibleClass) if not args then args = getArgs(frame) end local hiding_templatestyles = table.concat(move_hiding_templatestyles(args)) local root = mw.html.create() local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes root = root:tag('table') if not child then root :addClass(cfg.i18n.class.sidebar) -- force collapsibleclass to be sidebar-collapse otherwise output nothing :addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil) :addClass('nomobile') :addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil) :addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil) :addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil) :addClass(args.bodyclass or args.class) :css('width', args.width or nil) :cssText(args.bodystyle or args.style) if args.outertitle then root :tag('caption') :addClass(cfg.i18n.class.outer_title) :addClass(args.outertitleclass) :cssText(args.outertitlestyle) :wikitext(args.outertitle) end if args.topimage then local imageCell = root:tag('tr'):tag('td') imageCell :addClass(cfg.i18n.class.top_image) :addClass(args.topimageclass) :cssText(args.topimagestyle) :wikitext(args.topimage) if args.topcaption then imageCell :tag('div') :addClass(cfg.i18n.class.top_caption) :cssText(args.topcaptionstyle) :wikitext(args.topcaption) end end if args.pretitle then root :tag('tr') :tag('td') :addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image or cfg.i18n.class.pretitle) :addClass(args.pretitleclass) :cssText(args.basestyle) :cssText(args.pretitlestyle) :wikitext(args.pretitle) end else root :addClass(cfg.i18n.class.subgroup) :addClass(args.bodyclass or args.class) :cssText(args.bodystyle or args.style) end if args.title then if child then root :wikitext(args.title) else root :tag('tr') :tag('th') :addClass(args.pretitle and cfg.i18n.class.title_with_pretitle or cfg.i18n.class.title) :addClass(args.titleclass) :cssText(args.basestyle) :cssText(args.titlestyle) :wikitext(args.title) end end if args.image then local imageCell = root:tag('tr'):tag('td') imageCell :addClass(cfg.i18n.class.image) :addClass(args.imageclass) :cssText(args.imagestyle) :wikitext(args.image) if args.caption then imageCell :tag('div') :addClass(cfg.i18n.class.caption) :cssText(args.captionstyle) :wikitext(args.caption) end end if args.above then root :tag('tr') :tag('td') :addClass(cfg.i18n.class.above) :addClass(args.aboveclass) :cssText(args.abovestyle) :newline() -- newline required for bullet-points to work :wikitext(args.above) end local rowNums = {} for k, v in pairs(args) do k = '' .. k local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$') if num then table.insert(rowNums, tonumber(num)) end end table.sort(rowNums) -- remove duplicates from the list (e.g. 3 will be duplicated if both heading3 -- and content3 are specified) for i = #rowNums, 1, -1 do if rowNums[i] == rowNums[i - 1] then table.remove(rowNums, i) end end for i, num in ipairs(rowNums) do local heading = args['heading' .. num] if heading then root :tag('tr') :tag('th') :addClass(cfg.i18n.class.heading) :addClass(args.headingclass) :addClass(args['heading' .. num .. 'class']) :cssText(args.basestyle) :cssText(args.headingstyle) :cssText(args['heading' .. num .. 'style']) :newline() :wikitext(heading) end local content = args['content' .. num] if content then root :tag('tr') :tag('td') :addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup or cfg.i18n.class.content) :addClass(args.contentclass) :addClass(args['content' .. num .. 'class']) :cssText(args.contentstyle) :cssText(args['content' .. num .. 'style']) :newline() :wikitext(content) :done() -- Without a linebreak after the </td>, a nested list like -- "* {{hlist| ...}}" doesn't parse correctly. :newline() end end if args.below then root :tag('tr') :tag('td') :addClass(cfg.i18n.class.below) :addClass(args.belowclass) :cssText(args.belowstyle) :newline() :wikitext(args.below) end if not child and has_navbar(args.navbar, args.name) then root :tag('tr') :tag('td') :addClass(cfg.i18n.class.navbar) :cssText(args.navbarstyle) :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, fontstyle = args.navbarfontstyle }) end local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = cfg.i18n.templatestyles } } local templatestyles = '' if args['templatestyles'] and args['templatestyles'] ~= '' then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] and args['child templatestyles'] ~= '' then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ add_list_styles(args), -- see [hlist_note] above about ordering base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles, hiding_templatestyles, tostring(root), (child and cfg.i18n.category.child or ''), categorizeTemplatesWithInlineStyles(args) }) end local function list_title(args, is_centered_list_titles, num) local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title'] or cfg.i18n.default_list_title) local title if is_centered_list_titles then -- collapsible can be finicky, so provide some CSS/HTML to support title = mw.html.create('div') :addClass(cfg.i18n.class.list_title_centered) :wikitext(title_text) else title = mw.html.create() :wikitext(title_text) end local title_container = mw.html.create('div') :addClass(cfg.i18n.class.list_title) -- don't /need/ a listnumtitleclass because you can do -- .templateclass .listnumclass .sidebar-list-title :addClass(args.listtitleclass) :cssText(args.basestyle) :cssText(args.listtitlestyle) :cssText(args['list' .. num .. 'titlestyle']) :node(title) :done() return title_container end --[[ Main entry point for sidebar with collapsible lists. Does the work of creating the collapsible lists themselves and including them into the args. ]] function p.collapsible(frame) local args = getArgs(frame) if not args.name and frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') == cfg.i18n.collapse_title_not_to_add_navbar then args.navbar = cfg.i18n.navbar_none end local contentArgs = {} local is_centered_list_titles = false if args['centered list titles'] and args['centered list titles'] ~= '' then is_centered_list_titles = true end for k, v in pairs(args) do local num = string.match(k, '^list(%d+)$') if num then local expand = args.expanded and (args.expanded == 'all' or args.expanded == args['list' .. num .. 'name']) local row = mw.html.create('div') row :addClass(cfg.i18n.class.list) :addClass('mw-collapsible') :addClass((not expand) and 'mw-collapsed' or nil) :addClass(args['list' .. num .. 'class']) :cssText(args.listframestyle) :cssText(args['list' .. num .. 'framestyle']) :node(list_title(args, is_centered_list_titles, num)) :tag('div') :addClass(cfg.i18n.class.list_content) :addClass('mw-collapsible-content') -- don't /need/ a listnumstyleclass because you can do -- .templatename .listnumclass .sidebar-list :addClass(args.listclass) :cssText(args.liststyle) :cssText(args['list' .. num .. 'style']) :wikitext(trimAndAddAutomaticNewline(args['list' .. num])) contentArgs['content' .. num] = tostring(row) end end for k, v in pairs(contentArgs) do args[k] = v end return p.sidebar(frame, args, cfg.i18n.class.collapse) end return p 71fe765846593e025ca2f94371315e9dbb5bb4d2 Module:Message box/doc 828 434 1309 2023-03-18T03:49:47Z mw>Uzume 0 -[[Module:No globals]] wikitext text/x-wiki <noinclude><!-- -->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!-- --><languages /><!-- --></noinclude>{{#switch:<translate></translate> | = <includeonly>{{Languages|Module:Message box/doc}}</includeonly> <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> <!-- {{Shared Template Warning|Module:Message box}} --> {{Used in system}} {{module rating|r}} {{module rating|p}} {{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}} {{Uses TemplateStyles | Module:Message box/ambox.css | Module:Message box/cmbox.css | Module:Message box/fmbox.css | Module:Message box/imbox.css | Module:Message box/ombox.css | Module:Message box/tmbox.css }} <translate><!--T:1--> This is a meta-module that implements the message box templates <tvar name=1>{{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|and}}{{int|lang={{TRANSLATIONLANGUAGE}}|word-separator}}<nowiki/>}}</tvar>.</translate> <translate><!--T:2--> It is intended to be used from Lua modules, and should not be used directly from wiki pages.</translate> <translate><!--T:3--> If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.</translate> <translate> == Usage == <!--T:4--> <!--T:5--> To use this module from another Lua module, first you need to load it. </translate> <syntaxhighlight lang="lua"> local messageBox = require('Module:Message box') </syntaxhighlight> <translate><!--T:6--> To create a message box, use the <tvar name=1><code>main</code></tvar> function.</translate> <translate><!--T:7--> It takes two parameters:</translate> {{Unordered list |1= <translate><!--T:8--> the first is the box type (as a string).</translate> |2= <translate><!--T:9--> the second is a table containing the message box parameters.</translate> }} <syntaxhighlight lang="lua"> local box = messageBox.main( boxType, { param1 = param1, param2 = param2, -- <translate nowrap><!--T:10--> More parameters...</translate> }) </syntaxhighlight> <translate> <!--T:11--> There are seven available box types: </translate> {{(!}} class="wikitable" ! <translate><!--T:12--> Box type</translate> ! <translate><!--T:13--> Template</translate> ! <translate><!--T:14--> Purpose</translate> {{!}}- {{!}} <code>mbox</code> {{!}} {{tlx|mbox}} {{!}} <translate><!--T:15--> For message boxes to be used in multiple namespaces</translate> {{!}}- {{!}} <code>ambox</code> {{!}} {{tlx|ambox}} {{!}} <translate><!--T:16--> For article message boxes</translate> {{!}}- {{!}} <code>cmbox</code> {{!}} {{tlx|cmbox}} {{!}} <translate><!--T:17--> For category message boxes</translate> {{!}}- {{!}} <code>fmbox</code> {{!}} {{tlx|fmbox}} {{!}} <translate><!--T:18--> For interface message boxes</translate> {{!}}- {{!}} <code>imbox</code> {{!}} {{tlx|imbox}} {{!}} <translate><!--T:19--> For file namespace message boxes</translate> {{!}}- {{!}} <code>tmbox</code> {{!}} {{tlx|tmbox}} {{!}} <translate><!--T:20--> For talk page message boxes</translate> {{!}}- {{!}} <code>ombox</code> {{!}} {{tlx|ombox}} {{!}} <translate><!--T:21--> For message boxes in other namespaces</translate> {{!)}} <translate> <!--T:22--> See the template page of each box type for the available parameters. == Usage from <tvar name=1><code>#invoke</code></tvar> == <!--T:23--> </translate> <translate><!--T:24--> As well as the <tvar name=1><code>main</code></tvar> function, this module has separate functions for each box type.</translate> <translate><!--T:25--> They are accessed using the code <tvar name=1>{{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}</tvar>, <tvar name=2>{{tlc|#invoke:Message box|ambox|...}}</tvar>, etc.</translate> <translate><!--T:26--> These will work when called from other modules, but they access code used to process arguments passed from <tvar name=1>{{tlc|#invoke:...}}</tvar>, and so calling them will be less efficient than calling <tvar name=2><code>main</code></tvar></translate>. <translate> == Technical details == <!--T:27--> <!--T:28--> The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at <tvar name=1>[[Module:Message box/configuration]]</tvar>. </translate> <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Modules{{#translation:}}]] }}</includeonly><noinclude> [[Category:Module documentation pages{{#translation:}}]] </noinclude> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}} }} a3ce6d93b2de5e278623d054d7a82b6a21fb5b57 Module:Message box/doc/en 828 435 1311 2023-03-18T04:11:20Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude><!-- -->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!-- --><languages /><!-- --></noinclude>{{#switch: | = <includeonly>{{Languages|Module:Message box/doc}}</includeonly> <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> <!-- {{Shared Template Warning|Module:Message box}} --> {{Used in system}} {{module rating|r}} {{module rating|p}} {{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}} {{Uses TemplateStyles | Module:Message box/ambox.css | Module:Message box/cmbox.css | Module:Message box/fmbox.css | Module:Message box/imbox.css | Module:Message box/ombox.css | Module:Message box/tmbox.css }} This is a meta-module that implements the message box templates {{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang=en|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang=en|and}}{{int|lang=en|word-separator}}<nowiki/>}}. It is intended to be used from Lua modules, and should not be used directly from wiki pages. If you want to use this module's functionality from a wiki page, please use the individual message box templates instead. == Usage == To use this module from another Lua module, first you need to load it. <syntaxhighlight lang="lua"> local messageBox = require('Module:Message box') </syntaxhighlight> To create a message box, use the <code>main</code> function. It takes two parameters: {{Unordered list |1= the first is the box type (as a string). |2= the second is a table containing the message box parameters. }} <syntaxhighlight lang="lua"> local box = messageBox.main( boxType, { param1 = param1, param2 = param2, -- More parameters... }) </syntaxhighlight> There are seven available box types: {{(!}} class="wikitable" ! Box type ! Template ! Purpose {{!}}- {{!}} <code>mbox</code> {{!}} {{tlx|mbox}} {{!}} For message boxes to be used in multiple namespaces {{!}}- {{!}} <code>ambox</code> {{!}} {{tlx|ambox}} {{!}} For article message boxes {{!}}- {{!}} <code>cmbox</code> {{!}} {{tlx|cmbox}} {{!}} For category message boxes {{!}}- {{!}} <code>fmbox</code> {{!}} {{tlx|fmbox}} {{!}} For interface message boxes {{!}}- {{!}} <code>imbox</code> {{!}} {{tlx|imbox}} {{!}} For file namespace message boxes {{!}}- {{!}} <code>tmbox</code> {{!}} {{tlx|tmbox}} {{!}} For talk page message boxes {{!}}- {{!}} <code>ombox</code> {{!}} {{tlx|ombox}} {{!}} For message boxes in other namespaces {{!)}} See the template page of each box type for the available parameters. == Usage from <code>#invoke</code> == As well as the <code>main</code> function, this module has separate functions for each box type. They are accessed using the code {{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}, {{tlc|#invoke:Message box|ambox|...}}, etc. These will work when called from other modules, but they access code used to process arguments passed from {{tlc|#invoke:...}}, and so calling them will be less efficient than calling <code>main</code>. == Technical details == The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at [[Module:Message box/configuration]]. <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Modules{{#translation:}}]] }}</includeonly><noinclude> [[Category:Module documentation pages{{#translation:}}]] </noinclude> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}} }} eb0368b68b66e7bfdf66f0fbded73f3e1a15bad8 Template:Self-reference 10 125 282 2023-03-30T11:42:06Z wikipedia>Mclay1 0 Mclay1 moved page [[Template:Self reference]] to [[Template:Self-reference]]: grammatically correct hyphen wikitext text/x-wiki {{#switch:{{{2|NONE}}} |NONE|hatnote|hat={{Hatnote|extraclasses=plainlinks selfreference noprint|1={{{1}}}}} |inline=<div class="plainlinks selfreference" style="display:inline; font-style: italic;"><!--Same style as class hatnote.-->{{{1}}}</div> |<!--Matching the empty string here for unprintworthy content is for backwards compatibility with the 2006-2008 version. Do not depend on it!-->=<div style="display:inline;" class="plainlinks selfreference noprint">{{{1}}}</div> |#default={{error|Second parameter must be <code>hatnote</code>, <code>hat</code>, or <code>inline</code>}} }}<noinclude> {{Documentation}} <!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES THE /doc SUBPAGE, AND INTERWIKIS TO WIKIDATA, THANKS --> </noinclude> 0c4a08f880070e918c3edcaa50cc493f99841e98 Template:Navbox suite 10 128 288 2023-03-30T20:23:06Z wikipedia>SuperMarioMan 0 Reverted edits by [[Special:Contribs/Dndnrmn1|Dndnrmn1]] ([[User talk:Dndnrmn1|talk]]) to last version by 2.147.31.243 wikitext text/x-wiki {{#invoke:sidebar|sidebar | width = auto | bodystyle = border-spacing:0;background:#f7f7f7;padding:2px; | title = Navbox suite | titlestyle = padding: 0.2em 0.8em; font-size: 145%; line-height: 1.2em; background-color: #ccf; | contentclass = plainlist | contentstyle = padding:0.25em;background:#fdfdfd; | content1 = *{{tl|Navbox}} *{{tl|Navbox with collapsible groups}} *{{tl|Navbox with columns}} *{{tl|Navboxes}} | navbarstyle = background:#fdfdfd;padding:0 5px }}<!-- NOTE: A template MUST support all of the parameters marked with a cross in Template:Navbox/doc in order to be Navbox suite compliant. In particular, the name, state, border, and navbar parameters are especially important. --><noinclude> {{Documentation|content= Helper template for linking between main navbox templates in their documentation. [[Category:Wikipedia-internal sidebar templates]] [[Category:Navigational boxes|Δ]]<!-- Δ for documentation ([[WP:SORTKEY]]) --> [[Category:Documentation see also templates]] }} </noinclude> 96300845706c925e4c1e1f1f511ad327cee6d0cf Template:Selfref 10 115 260 2023-03-30T20:46:51Z wikipedia>Xqbot 0 Bot: Fixing double redirect to [[Template:Self-reference]] wikitext text/x-wiki #REDIRECT [[Template:Self-reference]] {{Redirect category shell| {{R from template shortcut}} {{R from alternative spelling}} {{R from move}} }} 030c372ed4f83fa2e03a4c0ccdd4ad3cef8ec9e6 Template:Tag 10 40 79 2023-04-01T17:42:02Z mw>Alex44019 0 Undo revision 5858180 by [[Special:Contributions/2A00:23C8:8232:B201:C0BA:E017:2338:8E97|2A00:23C8:8232:B201:C0BA:E017:2338:8E97]] ([[User talk:2A00:23C8:8232:B201:C0BA:E017:2338:8E97|talk]]): vandalism wikitext text/x-wiki {{#if:{{{plain|}}}| |<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}"> }}{{#switch:{{{2|pair}}} |c|close = <!--nothing--> |s|single |o|open |p|pair = {{#tag:span|&lrm;&lt;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}|&#32;{{{params}}}}} }}{{#switch:{{{2|pair}}} |c|close = {{{content|}}} |s|single = &#32;{{#tag:span|&#47;&gt;|class="p"}} |o|open = {{#tag:span|&gt;|class="p"}}{{{content|}}} |p|pair = {{#tag:span|&gt;|class="p"}}{{{content|...}}} }}{{#switch:{{{2|pair}}} |s|single |o|open = <!--nothing--> |c|close |p|pair = {{#tag:span|&lrm;&lt;&#47;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|&gt;|class="p"}} }}{{#if:{{{plain|}}}| |</code> }}<noinclude> {{Documentation}} </noinclude> 88657ad7afd7844d9681f7f08ba60c75c25800a1 Template:Correct title examples 10 192 545 2023-04-03T12:48:43Z wikipedia>Gonnym 0 wikitext text/x-wiki {| class="wikitable" style="background: transparent;" |+ Title changing or correcting templates + magic word {{Navbar|Correct title examples|plain=1|brackets=y}} |- ! scope="col" style="width: 20%;" | Wiki markup <br /><span style="font-weight: normal; font-size: 90%">[[Help:Transclusion|Transclusion]] from template:</span> ! scope="col" 40% | Involves ! scope="col" style="width: 20%;" | Correct name ! scope="col" style="width: 20%;" | Actual article name |- ! scope="row" | {{tlp|Italic title}} | Title in italics | ''To Kill a Mockingbird'' | [[To Kill a Mockingbird]] |- ! scope="row" | {{tlp|Italic title|all{{=}}yes}} | Complete title in italics, including parentheses | ''Randall and Hopkirk (Deceased)'' | [[Randall and Hopkirk (Deceased)]] |- ! scope="row" | {{tlp|Italic title|string{{=}}Ally McBeal}} | Phrase of {{para|string}} in italics | List of ''Ally McBeal'' episodes | [[List of Ally McBeal episodes]] |- ! scope="row" | {{tlp|Italic title|all{{=}}yes|string{{=}}Fringe}} | Phrase of {{para|string}} in italics; also looks in parentheses | Peter (''Fringe'' episode) | [[Peter (Fringe episode)]] |- ! scope="row" | {{tlp|Italic disambiguation}} | Disambiguation in italics | The End (''Lost'') | [[The End (Lost)]] |- ! scope="row" | {{tlp|Lowercase title}} | Lowercase first character | eBay | [[EBay]] |- ! scope="row" | {{tlp|Lowercase title|italic{{=}}yes}} | Lowercase first character and place title in italics, not including disambiguation | ''iCarly'' (soundtrack) | [[ICarly (soundtrack)]] |- ! scope="row" | {{tlp|Lowercase title|italic{{=}}yes|force{{=}}yes}} | Lowercase first character and place title in italics, including disambiguation | | |- ! scope="row" | {{tlp|Lowercase title|dab{{=}}yes}} | Lowercase first character and place disambiguation in italics | iSpy (''Modern Family'') | [[ISpy (Modern Family)]] |- ! scope="row" | {{tlp|Correct title|reason{{=}}bracket}} | [[bracket|< > [ ] { }]] | Benzo[''a'']pyrene | [[Benzo(a)pyrene]] |- ! scope="row" | {{tlp|Correct title|reason{{=}}#}} | [[Number sign|#]] | Pilot #5 || [[Pilot No. 5]] |- ! scope="row" | {{tlp|Correct title|reason{{=}}:}} | [[colon (punctuation)|:]] | DK: King of Swing | [[DK King of Swing]] |- ! scope="row" style="background: #EAECF1;" | <span style="font-weight: normal; font-size: 92%;">[[Help:Magic words|Magic word:]]</span> ! scope="row" colspan="3" style="background: #EAECF1;" | |- ! scope="row" | {{[[meta:Help:Magic words#Miscellany|DISPLAYTITLE]]}} | Various | _NSAKEY | [[NSAKEY]] |}<noinclude> {{Documentation|content= [[Category:Correct title templates|Examples]] }} </noinclude> 8245a1def0c8a75905f4159317fed38f23ad7ce3 Template:TemplateData header 10 21 41 2023-04-03T20:43:41Z mw>Clump 0 Reverted edits by [[Special:Contribs/105.113.40.185|105.113.40.185]] ([[User talk:105.113.40.185|talk]]) to last version by Kaganer wikitext text/x-wiki <noinclude> <languages/> <onlyinclude>{{#switch:<translate></translate> |= <div class="templatedata-header"><!-- -->{{#if:{{yesno|{{{editlinks|}}}}}<!-- -->|{{#ifexpr:<!-- -->{{#if:{{{docpage|}}}<!-- -->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!-- -->|not{{IsDocSubpage|false=0}}<!-- -->}}<!-- -->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!-- -->}}<!-- -->}} {{#if:{{{noheader|}}}||<translate><!--T:1--> This is the [[<tvar name=1>Special:MyLanguage/Help:TemplateData</tvar>|TemplateData]] documentation for this template used by [[<tvar name=2>Special:MyLanguage/VisualEditor</tvar>|VisualEditor]] and other tools.</translate>}} '''{{{1|{{BASEPAGENAME}}}}}''' </div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!-- -->|{{#if:{{IsDocSubpage|false=}}<!-- -->|[[Category:TemplateData documentation{{#translation:}}]]<!-- -->|[[Category:Templates using TemplateData{{#translation:}}]]<!-- -->}}<!-- -->}}</includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}} }}</onlyinclude> {{Documentation|content= Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]]. == Usage == {{#tag:syntaxhighlight| ==TemplateData== or ==Parameters== or ==Usage== {{((}}TemplateData header{{))}} {{^(}}templatedata{{)^}}{ ... }{{^(}}/templatedata{{)^}} |lang=html }} Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]]. <dl><dd> {{TemplateData header|Template name}} </dd></dl> Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text. <dl><dd> {{TemplateData header|noheader=1}} </dd></dl> ==Parameters== {{TemplateData header/doc}} }} </noinclude> adcf50c8d3c870a44b190116c53a975926dc17d8 Module:Message box/ambox.css 828 436 1313 2023-04-04T14:02:42Z mw>Waldyrious 0 fix table width in narrow screens sanitized-css text/css /** * {{ambox}} (article message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.ambox { /* 10% = Will not overlap with other elements */ margin: 0 10%; /* Prevent overflow in narrow screens (<=850px) in the Timeless skin. See [[Skin:Timeless#Less than 851 pixels]] and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */ width: unset; border: 1px solid #a2a9b1; /* Default "notice" blue */ border-left: 10px solid #36c; background-color: #fbfbfb; box-sizing: border-box; } /* Single border between stacked boxes. */ table.ambox + table.ambox, table.ambox + link + table.ambox, table.ambox + style + table.ambox { margin-top: -1px; } /* An empty narrow cell */ .ambox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .ambox th.mbox-text, .ambox td.mbox-text { border: none; /* 0.5em left/right */ padding: 0.25em 0.5em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .ambox td.mbox-image { /* 0.5em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.5em; } /* The right image cell */ .ambox td.mbox-imageright { /* 0px left, 0.5em right */ /* @noflip */ padding: 2px 0.5em 2px 0; } table.ambox-notice { /* Blue */ border-left-color: #36c; } table.ambox-speedy { /* Pink */ background-color: #fee7e6; } table.ambox-delete, table.ambox-speedy { /* Red */ border-left-color: #b32424; } table.ambox-content { /* Orange */ border-left-color: #f28500; } table.ambox-style { /* Yellow */ border-left-color: #fc3; } table.ambox-move { /* Purple */ border-left-color: #9932cc; } table.ambox-protection { /* Gray-gold */ border-left-color: #a2a9b1; } /** * {{ambox|small=1}} styles * * These ".mbox-small" classes must be placed after all other * ".ambox" classes. "html body.mediawiki .ambox" * is so they override both "table.ambox + table.ambox" * and "table.ambox + link + table.ambox" above. * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ /* For the "small=yes" option. */ html body.mediawiki .ambox.mbox-small { clear: right; float: right; margin: 4px 0 4px 1em; box-sizing: border-box; width: 238px; font-size: 88%; line-height: 1.25em; } /* For the "small=left" option. */ html body.mediawiki .ambox.mbox-small-left { margin: 4px 1em 4px 0; box-sizing: border-box; overflow: hidden; width: 238px; border-collapse: collapse; font-size: 88%; line-height: 1.25em; } 095fcb9be9e02488b74d8093dc30d52fabe48ddd Template:Collapse top 10 150 347 2023-04-07T02:02:13Z wikipedia>Izno 0 per tech news wikitext text/x-wiki <div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section --> {| <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;" |- ! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div> {{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}} |{{<includeonly>safesubst:</includeonly>!}}- {{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }} |- | style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude> {{lorem ipsum|3}} {{Collapse bottom}} {{Documentation}} </noinclude> 247cc43d5198baf8804d0926529cbbdd7be91113 Template:High-risk 10 197 556 2023-04-09T16:46:44Z wikipedia>Nagsb 0 wikitext text/x-wiki #REDIRECT [[Template:High-use]] {{Rcat shell| {{R with Wikidata item}} {{R from merge}} {{R from template shortcut}} }} 52c9a8c75748fd2b20183ed6c60e1f3c3a435cc9 Template:Navigation templates 10 133 298 2023-04-10T07:21:54Z wikipedia>John of Reading 0 Reverted 1 edit by [[Special:Contributions/Dndnrmn2|Dndnrmn2]] ([[User talk:Dndnrmn2|talk]]): Test edit (?) wikitext text/x-wiki {| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;" |+ Navigation templates comparison {{Navbar|Navigation templates|plain=1|brackets=y}} |- ! Template ! Collapsible !! Header color ! Image !! Groups !! Style (body) <br /> parameter/s |- | style="text-align: left;" | {{tl|Navbox}} | collapsible || style="background: #ccf;" | navbox | Left/right of body || Yes || Yes |- | style="text-align: left;" | {{tl|Navbox with collapsible groups}} | collapsible || style="background: #ccf;" | navbox | Left/right of body and/or in each list || Yes || Yes |- | style="text-align: left;" | {{tl|Navbox with columns}} | collapsible || style="background: #ccf;" | navbox | Left/right of columns || No || Yes |} {| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;" |+ Collapsible attributes |- ! Type !! CSS classes !! JavaScript !! Collapses when !! Custom <br /> initial&nbsp;state !! Nesting |- | style="text-align:left;" | [[Help:Collapsing|Collapsible tables]] | mw-collapsible | Defined in [[MediaWiki:Common.js|Common.js]] | 2 or more autocollapse on page || Yes || Yes |}<noinclude> [[Category:Navigational boxes|Δ]] [[Category:Documentation shared content templates]]</noinclude> 64df85f0aa0ebaa7b3cbfa4c05af256a71c18c39 Template:Localized link 10 405 1243 2023-04-12T05:04:44Z mw>Dinoguy1000 0 fix per comment in last-mentioned thread wikitext text/x-wiki <noinclude> <languages/> </noinclude><!-- -->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |<b> }}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }} <!--if the translation page does not exist (or called from the source page), output as is--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{{1}}}}} |{{PAGENAME:{{{1}}}}} |{{{1}}} }} |{{{1}}} }} }}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |</b> }}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude> {{documentation|content= {{tsh|ll|LL}} {{High-use|35000}} <translate> == Purpose == <!--T:1--> </translate> <translate><!--T:8--> This helper template can be used to link to [[<tvar name=1>Special:LanguageStats</tvar>|translatable pages]] in the user's language.</translate> <translate><!--T:9--> It uses the special page prefix <tvar name=1><code>Special:MyLanguage/</code></tvar>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't.</translate> <translate> <!--T:10--> It should be used in translated pages, so that they link to the right page even if there is no translated page in that language. == Usage == <!--T:2--> </translate> {{Localized link/doc}} <translate> <!--T:11--> If "<tvar name=1><code>nsp</code></tvar>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<tvar name=1><code>nsp</code></tvar>" parameter is defined by any value — link text displays the short pagename, without namespace. === Examples of simple usage === <!--T:3--> </translate> {{(}}{{!}} class="wikitable" {{!}}- ! <translate><!--T:4--> Use</translate> ! <translate><!--T:5--> Becomes</translate> {{!}}- {{!}} {{Tlx|ll|Communication}} {{!}} {{ll|Communication}} {{!}}- {{!}} {{Tlx|ll|Communication|コミュニケーション}} {{!}} {{ll|Communication|コミュニケーション}} {{!}}- {{!}} {{Tlx|ll|Project:About}} {{!}} {{ll|Project:About}} {{!}}- {{!}} {{Tlx|ll|Project:About|nsp{{=}}0}} {{!}} {{ll|Project:About|nsp=0}} {{!}}{{)}} <translate> == Usage in translatable pages == <!--T:6--> <!--T:12--> On pages prepared for translation with the <tvar name=1>{{ll|Extension:Translate|nsp=0}}</tvar> extension, this template may be used in three ways. </translate> # <translate><!--T:13--> Should better be substitute this template, and then the wikilink target embedded in a <tvar name=1>{{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>, separately from the translatable displayed text of the link.</translate> #: <translate><!--T:22--> As example, instead <tvar name=1><code><nowiki>{{ll|Communication|About communication}}</nowiki></code></tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}</tvar>.</translate> # <translate><!--T:14--> Alternatively, may be exclude this code from translatable section.</translate> #: <translate><!--T:23--> As example, for <tvar name=1><code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code></tvar>, translation markup in translatable page will be:</translate> #: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}} #: <translate><!--T:15--> This is useful for bulleted lists of links, e.g. in the "See also:" sections.</translate> # <translate><!--T:16--> If link text does not have to be different from the name of landing page, will be better to embed all this code into <tvar name=1>{{tag|tvar|open}}</tvar>.</translate> #: <translate><!--T:24--> As example, instead <tvar name=1>{{Tlx|ll|Communication}}</tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>.</translate> <translate> == See also == <!--T:7--> </translate> * [[Template:Localized link/messagedoc]] — <translate><!--T:17--> should be used for message documentation in translatable pages that use this template.</translate> * {{tl|Translatable template}} - <translate><!--T:18--> alias <tvar name=1>{{tl|TNT}}</tvar> or <tvar name=2>{{tl|tnt}}</tvar></translate> * {{tl|Translatable template name}} - <translate><!--T:19--> alias <tvar name=1>{{tl|TNTN}}</tvar> or <tvar name=2>{{tl|tntn}}</tvar></translate> * {{tl|Page language link}} - <translate><!--T:20--> alias <tvar name=1>{{tl|pll}}</tvar></translate> - <translate><!--T:21--> add a link from a translatable page to another translatable page in the same language</translate> }} [[Category:Internationalization templates]] </noinclude> 26f0ea08ccb53748f8a9c69c65e96d99b1db2575 Template:Localized link/en 10 409 1253 2023-04-12T12:58:49Z mw>FuzzyBot 0 Updating to match new version of source page wikitext text/x-wiki <noinclude> <languages/> </noinclude><!-- -->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |<b> }}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }} <!--if the translation page does not exist (or called from the source page), output as is--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{{1}}}}} |{{PAGENAME:{{{1}}}}} |{{{1}}} }} |{{{1}}} }} }}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |</b> }}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude> {{documentation|content= {{tsh|ll|LL}} {{High-use|35000}} == Purpose == This helper template can be used to link to [[Special:LanguageStats|translatable pages]] in the user's language. It uses the special page prefix <code>Special:MyLanguage/</code>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't. It should be used in translated pages, so that they link to the right page even if there is no translated page in that language. == Usage == {{Localized link/doc}} If "<code>nsp</code>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<code>nsp</code>" parameter is defined by any value — link text displays the short pagename, without namespace. === Examples of simple usage === {{(}}{{!}} class="wikitable" {{!}}- ! Use ! Becomes {{!}}- {{!}} {{Tlx|ll|Communication}} {{!}} {{ll|Communication}} {{!}}- {{!}} {{Tlx|ll|Communication|コミュニケーション}} {{!}} {{ll|Communication|コミュニケーション}} {{!}}- {{!}} {{Tlx|ll|Project:About}} {{!}} {{ll|Project:About}} {{!}}- {{!}} {{Tlx|ll|Project:About|nsp{{=}}0}} {{!}} {{ll|Project:About|nsp=0}} {{!}}{{)}} == Usage in translatable pages == On pages prepared for translation with the {{ll|Extension:Translate|nsp=0}} extension, this template may be used in three ways. # Should better be substitute this template, and then the wikilink target embedded in a {{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}, separately from the translatable displayed text of the link. #: As example, instead <code><nowiki>{{ll|Communication|About communication}}</nowiki></code>, translation markup in translatable page will be {{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}. # Alternatively, may be exclude this code from translatable section. #: As example, for <code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code>, translation markup in translatable page will be: #: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}} #: This is useful for bulleted lists of links, e.g. in the "See also:" sections. # If link text does not have to be different from the name of landing page, will be better to embed all this code into {{tag|tvar|open}}. #: As example, instead {{Tlx|ll|Communication}}, translation markup in translatable page will be {{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}. == See also == * [[Template:Localized link/messagedoc]] — should be used for message documentation in translatable pages that use this template. * {{tl|Translatable template}} - alias {{tl|TNT}} or {{tl|tnt}} * {{tl|Translatable template name}} - alias {{tl|TNTN}} or {{tl|tntn}} * {{tl|Page language link}} - alias {{tl|pll}} - add a link from a translatable page to another translatable page in the same language }} [[Category:Internationalization templates]] </noinclude> 9e7370c695bb1a61b15996006b40f9e437acbba4 Template:Documentation subpage 10 18 35 2023-04-13T02:50:05Z mw>~aanzx 0 Reverted 1 edit by [[Special:Contributions/2409:4081:889C:D4F2:72B4:BEFE:C5E0:CD1|2409:4081:889C:D4F2:72B4:BEFE:C5E0:CD1]] ([[User talk:2409:4081:889C:D4F2:72B4:BEFE:C5E0:CD1|talk]])(TwinkleGlobal) wikitext text/x-wiki <noinclude> <languages/> </noinclude>{{#switch:<translate></translate> | = <includeonly><!-- -->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]] | text = '''<translate><!--T:4--> This is a [[w:Wikipedia:Template documentation|documentation]] [[<tvar name=2>Special:MyLanguage/Help:Subpages</tvar>|subpage]] for <tvar name=1>{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}</tvar>.</translate>'''<br /><!-- -->{{#if:{{{text2|}}}{{{text1|}}} |<translate><!--T:5--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{{text2|{{{text1}}}}}}</tvar>.</translate> |<translate><!--T:10--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{SUBJECTSPACE}}</tvar> page.</translate> }} }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- -->{{#if:{{{inhibit|}}} |<!--(don't categorize)--> | <includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} | Template | Project = Template | Module = Module | User = User | #default = MediaWiki }} documentation pages{{#translation:}}]] | [[Category:Documentation subpages without corresponding pages{{#translation:}}]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{Documentation|content= <translate> == Usage == <!--T:6--> <!--T:7--> Use this template on Template Documentation subpage (/doc). == See also == <!--T:8--> </translate> *{{tl|Documentation}} *{{tl|tl}} }} </noinclude> 0d6a10a903dbd572fffeb01aff5983d9b3abc65c 254 35 2023-04-29T17:27:17Z wikipedia>Paine Ellsworth 0 m wikitext text/x-wiki <includeonly><!-- -->{{#ifeq:{{lc:{{SUBPAGENAME}}}} |{{{override|doc}}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:Edit-copy green.svg|40px|alt=|link=]] | text = {{strong|This is a [[Wikipedia:Template documentation|documentation]] [[Wikipedia:Subpages|subpage]]}} for {{terminate sentence|{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}}}<br />It may contain usage information, [[Wikipedia:Categorization|categories]] and other content that is not part of the original {{#if:{{{text2|}}} |{{{text2}}} |{{#if:{{{text1|}}} |{{{text1}}} |{{#ifeq:{{SUBJECTSPACE}} |{{ns:User}} |{{lc:{{SUBJECTSPACE}}}} template page |{{#if:{{SUBJECTSPACE}} |{{lc:{{SUBJECTSPACE}}}} page|article}}}}}}}}. }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- -->{{#if:{{{inhibit|}}} |<!--(don't categorize)--> | <includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} |Template=Template |Module=Module |User=User |#default=Wikipedia}} documentation pages]] | [[Category:Documentation subpages without corresponding pages]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly><noinclude>{{Documentation}}</noinclude> 41ca90af0945442788a2dbd08c8c54a61a23c057 Module:Tree chart/data 828 210 598 2023-04-16T22:01:57Z wikipedia>GoldRingChip 0 X2 Scribunto text/plain local SLD = '1px solid black' local DSH = '1px dashed black' local DOT = '1px dotted black' local data = { ['!'] = { t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['%'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ["'"] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['('] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, [')'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['*'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['+'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, [','] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['-'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['.'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['7'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, [':'] = { t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['A'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['C'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['D'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['E'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['F'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['G'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['G2'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['H'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['J'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['K'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['L'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['M'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['P'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['Q'] = { t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['R'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['S'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['T3'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['T2'] = { b = { { style ={ ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['T'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['U'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['V'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } }, ['W'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['X'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['X2'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['Y'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['Z'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['^'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['$'] = { t = { { attr = { colspan = '2', rowspan = '2'}, style = { width = '2em', height = '2em' } } } }, ['`'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['a2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['a'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['b2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['b3'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['b'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['c'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['d'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['di'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['dj'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['e'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['f'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['fh'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] =DSH, width = '1em', height = '1em' } } } }, ['fy'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['h'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['he'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['i'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['ic'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['j'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['jc'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['k2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['k3'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['k'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['kq'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['kr'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['kq2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['kr2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['l2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['l3'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['l4'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['l'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['m2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['m'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['mp'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['mp2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['n2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['n'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['np'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['np2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['o2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['o'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['om'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['om2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['on'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['on2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['p2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['p'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['q2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['q'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['ql'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['ql2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] =DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['r2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } }, ['r'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['rl'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['rl2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['t'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['v'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['x'] = {}, ['y'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } }, ['ye'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['~'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } } } local retval = {} for k,v in pairs(data) do retval[k] = {} for k2,v2 in pairs(v) do local renderedCells = mw.html.create() for k3,v3 in ipairs(v2) do renderedCells:tag('td'):css(v3.style or {}):attr(v3.attr or {}) end retval[k][k2] = tostring(renderedCells) end end return retval 872003fd8ebaf82fdff91a68b5505e5ee25ae350 Template:Tree chart/doc 10 215 608 2023-04-26T13:09:46Z wikipedia>GoldRingChip 0 {{large}} (via [[WP:JWB]]) wikitext text/x-wiki {{Lua|Module:Tree chart}} {{distinguish|Template:Graph:Chart}}<noinclude> {{documentation subpage}}</noinclude><!--PLEASE ADD METADATA TO THE <includeonly> SECTION AT THE BOTTOM OF THIS PAGE ↓↓↓ EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE ↓↓↓--> ==Usage== This template produces one row in a "family tree"-like chart consisting of boxes and connecting lines based loosely on an [[ASCII art]]-like syntax. It is meant to be used in conjunction with {{tl|Tree chart/start}} and {{tl|Tree chart/end}}. The chart is displayed as [[HTML]] tables using [[Cascading Style Sheets|CSS]] attributes, and may contain arbitrary [[wiki markup]] within the boxes. This implementation was based on the now-deprecated {{tl|family tree}} template. ==Basic example== This code: <syntaxhighlight lang="wikitext"> {{Tree chart/start|align=center|summary=An example family tree}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} </syntaxhighlight> produces this: {{Tree chart/start|align=center|summary=An example family tree}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad; and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy. The code above produces a table of size 9 rows x 18 columns as shown below. [[File:Chart template table structure.png|center|500px|The table structure created using the example above]] ==Collapsible basic example== This code uses {{tl|chart top}}: <syntaxhighlight lang="wikitext"> {{chart top|An example family tree}} {{Tree chart/start|align=center}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} {{chart bottom}} </syntaxhighlight> produces this: {{chart top|An example family tree}} {{Tree chart/start|align=center}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} {{chart bottom}} This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad; and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy. ==Parameters== The template accepts any number of unnamed parameters with each parameter specifying a '''tile''' or a '''box'''. * '''Boxes''' can contain arbitrary [[wiki markup]]. The content of each box is specified using additional named parameters appended to the template call. Each box is '''three tiles wide''' and normally has a black border two pixels wide. Boxes can have any name that is a valid template parameter name, subject to a minimum of two alphabetical characters. * '''Tiles''' are line drawing symbols used to connect the boxes. They consist of various styles of horizontal and vertical lines along with corners and crossings as needed. Tiles are specified using their one- or two-character name: for the most common tiles, that character is more or less approximate to the tile's appearance. A special case of a tile is the '''empty tile''', specified by a single space character. A table of available tiles is given below. {| style="float: left; margin-left: 1em;" |+ '''Solid lines:''' |- | {{large|<code>!</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|!}}{{Tree chart/end}} || &nbsp; | {{large|<code>,</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|,}}{{Tree chart/end}} || &nbsp; | {{large|<code>v</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|v}}{{Tree chart/end}} || &nbsp; | {{large|<code>.</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|.}}{{Tree chart/end}} || &nbsp; |- | {{large|<code>-</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|-}}{{Tree chart/end}} || &nbsp; | {{large|<code>)</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|)}}{{Tree chart/end}} || &nbsp; | {{large|<code>+</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|+}}{{Tree chart/end}} || &nbsp; | {{large|<code>(</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|(}}{{Tree chart/end}} || &nbsp; |- | || || | {{large|<code>`</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|`}}{{Tree chart/end}} || &nbsp; | {{large|<code>^</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|^}}{{Tree chart/end}} || &nbsp; | {{large|<code>'</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|'}}{{Tree chart/end}} || &nbsp; |} {| style="float: left; margin-left: 1em;" |+ '''Dashed lines:''' |- | {{large|<code>:</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|:}}{{Tree chart/end}} || &nbsp; | {{large|<code>F</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|F}}{{Tree chart/end}} || &nbsp; | {{large|<code>V</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|V}}{{Tree chart/end}} || &nbsp; | {{large|<code>7</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|7}}{{Tree chart/end}} || &nbsp; |- | {{large|<code>~</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|~}}{{Tree chart/end}} || &nbsp; | {{large|<code>D</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|D}}{{Tree chart/end}} || &nbsp; | {{large|<code>%</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|%}}{{Tree chart/end}} || &nbsp; | {{large|<code>C</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|C}}{{Tree chart/end}} || &nbsp; |- | || || | {{large|<code>L</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|L}}{{Tree chart/end}} || &nbsp; | {{large|<code>A</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|A}}{{Tree chart/end}} || &nbsp; | {{large|<code>J</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|J}}{{Tree chart/end}} || &nbsp; |} {| style="float: left; margin-left: 1em;" |+ '''Dotted lines:''' |- | {{large|<code>Q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Q}}{{Tree chart/end}} || &nbsp; | {{large|<code>S</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|S}}{{Tree chart/end}} || &nbsp; | {{large|<code>M</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|M}}{{Tree chart/end}} || &nbsp; | {{large|<code>T</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|T}}{{Tree chart/end}} || &nbsp; |- | {{large|<code>P</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|P}}{{Tree chart/end}} || &nbsp; | {{large|<code>H</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|H}}{{Tree chart/end}} || &nbsp; | {{large|<code>R</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|R}}{{Tree chart/end}} || &nbsp; | {{large|<code>G</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|G}}{{Tree chart/end}} || &nbsp; |- | || || | {{large|<code>Y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Y}}{{Tree chart/end}} || &nbsp; | {{large|<code>W</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|W}}{{Tree chart/end}} || &nbsp; | {{large|<code>Z</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Z}}{{Tree chart/end}} || &nbsp; |} {| style="float: left; margin-left: 1em;" |+'''Dashes hrzntl solid vrtcl:''' | {{large|<code>fy</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fy}}{{Tree chart/end}} | {{large|<code>y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|y}}{{Tree chart/end}} | {{large|<code>ye</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ye}}{{Tree chart/end}} |- | {{large|<code>f</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|f}}{{Tree chart/end}} | {{large|<code>t</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|t}}{{Tree chart/end}} | {{large|<code>e</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|e}}{{Tree chart/end}} |- | {{large|<code>fh</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fh}}{{Tree chart/end}} | {{large|<code>h</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|h}}{{Tree chart/end}} | {{large|<code>he</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|he}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Solid hrzntl dashes vrtcl:''' | {{large|<code>dj</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|dj}}{{Tree chart/end}} | {{large|<code>j</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|j}}{{Tree chart/end}} | {{large|<code>jc</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|jc}}{{Tree chart/end}} |- | {{large|<code>d</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|d}}{{Tree chart/end}} | {{large|<code>*</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|*}}{{Tree chart/end}} | {{large|<code>c</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|c}}{{Tree chart/end}} |- | {{large|<code>di</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|di}}{{Tree chart/end}} | {{large|<code>i</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|i}}{{Tree chart/end}} | {{large|<code>ic</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ic}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+'''Solid hrzntl dot vrtcl:''' | {{large|<code>kr</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr}}{{Tree chart/end}} | {{large|<code>r</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r}}{{Tree chart/end}} | {{large|<code>rl</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl}}{{Tree chart/end}} |- | {{large|<code>k</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k}}{{Tree chart/end}} | {{large|<code>a</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a}}{{Tree chart/end}} | {{large|<code>l</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l}}{{Tree chart/end}} |- | {{large|<code>kq</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq}}{{Tree chart/end}} | {{large|<code>q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q}}{{Tree chart/end}} | {{large|<code>ql</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Dashed hrzntl dot vrtcl:''' | {{large|<code>kr2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr2}}{{Tree chart/end}} | {{large|<code>r2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r2}}{{Tree chart/end}} | {{large|<code>rl2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl2}}{{Tree chart/end}} |- | {{large|<code>k2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k2}}{{Tree chart/end}} | {{large|<code>a2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a2}}{{Tree chart/end}} | {{large|<code>l2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l2}}{{Tree chart/end}} |- |{{large|<code>kq2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq2}}{{Tree chart/end}} | {{large|<code>q2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q2}}{{Tree chart/end}} | {{large|<code>ql2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql2}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Dots hrzntl solid vrtcl:''' | {{large|<code>om</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om}}{{Tree chart/end}} | {{large|<code>m</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m}}{{Tree chart/end}} | {{large|<code>mp</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp}}{{Tree chart/end}} |- | {{large|<code>o</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o}}{{Tree chart/end}} | {{large|<code>b</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b}}{{Tree chart/end}} | {{large|<code>p</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p}}{{Tree chart/end}} |- | {{large|<code>on</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on}}{{Tree chart/end}} | {{large|<code>n</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n}}{{Tree chart/end}} | {{large|<code>np</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Dots hrzntl dashes vrtcl:''' | {{large|<code>om2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om2}}{{Tree chart/end}} | {{large|<code>m2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m2}}{{Tree chart/end}} | {{large|<code>mp2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp2}}{{Tree chart/end}} |- | {{large|<code>o2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o2}}{{Tree chart/end}} | {{large|<code>b2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b2}}{{Tree chart/end}} | {{large|<code>p2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p2}}{{Tree chart/end}} |- | {{large|<code>on2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on2}}{{Tree chart/end}} | {{large|<code>n2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n2}}{{Tree chart/end}} | {{large|<code>np2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np2}}{{Tree chart/end}} |} {{clear}} {| |+ '''Miscellaneous''' (grey background not available in, or changed from, familytree):<!-- This subset is an insufficient set or questionable, but some map onto tiles that exist in {{familytree}}: --> |- | {{large|<code>k3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|k3}}{{Tree chart/end}} | {{large|<code>T2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|T2}}{{Tree chart/end}} | {{large|<code>l3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l3}}{{Tree chart/end}} | {{large|<code>l4</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l4}}{{Tree chart/end}} |- | {{large|<code>G2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|G2}}{{Tree chart/end}} | || | || | {{large|<code>b3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|b3}}{{Tree chart/end}} |- | {{large|<code>E</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|E}}{{Tree chart/end}} | {{large|<code>K</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|K}}{{Tree chart/end}} | || | {{large|<code>U</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|U}}{{Tree chart/end}} |- | {{large|<code>X</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X}}{{Tree chart/end}} | {{large|<code>X2</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X2}}{{Tree chart/end}} | || | || |} ==Style attributes== The appearance of the boxes in a row may be controlled by the following optional template parameters: * ''border'' specifies the width of the box border in pixels, * ''boxstyle'' can be used to append arbitrary [[Cascading Style Sheets|CSS]] declarations directly to the box style attributes. For example, the following code: <syntaxhighlight lang="wikitext"> {{Tree chart/start}} {{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}} {{Tree chart| | |,|-|^|-|.| | }} {{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}} {{Tree chart/end}} </syntaxhighlight> produces this chart: {{Tree chart/start}} {{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}} {{Tree chart| | |,|-|^|-|.| | }} {{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}} {{Tree chart/end}} Style attributes can even be set for individual boxes within each row, as in the example below: <syntaxhighlight lang="wikitext"> {{Tree chart/start}} {{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}} {{Tree chart| |,|-|-|'|!|`|-|-|.| }} {{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box |boxstyle_RED =color:white; background-color: red; |boxstyle_GREEN=color:yellow; background-color: green; |boxstyle_BLUE =color:white; background-color: blue; }} {{Tree chart/end}} </syntaxhighlight> which produces this: {{Tree chart/start}} {{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}} {{Tree chart| |,|-|-|'|!|`|-|-|.| }} {{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box |boxstyle_RED =color:white; background-color: red; |boxstyle_GREEN=color:yellow; background-color: green; |boxstyle_BLUE =color:white; background-color: blue; }} {{Tree chart/end}} {{Warnsign|'''Note:'''}} When specifying style attributes for individual named boxes, make sure the box names are aligned to the '''left''' side of the area reserved for them in the template call (as in "<code>|RED&nbsp;&nbsp;|</code>" instead of "<code>|&nbsp;RED&nbsp;|</code>" in the example above), otherwise the template will end up looking for a style parameter with spaces in its name. The {{tl|Tree chart/start}} template also accepts an optional {{para|style}} parameter that can be used to set CSS styles for the entire diagram, and an optional {{para|align}} parameter to set the chart alignment. == See also == * [[Help:Family trees]] for other methods. * [[User:Daduxing/familytree.js|familytree.js]], a tool for the easy creation or updating of diagrams using these templates. * [[:Category:Family tree templates]] * [[Template:Nerva–Antonine family tree]], a large example. * [[Template:Tree list]] * [[Template:Ahnentafel]] {{Template:Graph, chart and plot templates}} <includeonly>{{Sandbox other| | {{When on user page | | <!-- Categories below this line, please:--> [[Category:Chart formatting templates| ]] [[Category:Graph, chart and plot templates]] [[Category:Genealogy formatting templates]] [[Category:Templates with partial table wikitext]] }} }}</includeonly> 4a820df0fef291101e336a1af6ecf39a8c1ac3f2 Module:Protection banner/config 828 98 212 2023-05-08T11:41:01Z wikipedia>Fayenatic london 0 Update categories from "fully-protected" to "fully protected", removing hyphen, per valid request at [[WP:CFDS]] Scribunto text/plain -- This module provides configuration data for [[Module:Protection banner]]. return { -------------------------------------------------------------------------------- -- -- BANNER DATA -- -------------------------------------------------------------------------------- --[[ -- Banner data consists of six fields: -- * text - the main protection text that appears at the top of protection -- banners. -- * explanation - the text that appears below the main protection text, used -- to explain the details of the protection. -- * tooltip - the tooltip text you see when you move the mouse over a small -- padlock icon. -- * link - the page that the small padlock icon links to. -- * alt - the alt text for the small padlock icon. This is also used as tooltip -- text for the large protection banners. -- * image - the padlock image used in both protection banners and small padlock -- icons. -- -- The module checks in three separate tables to find a value for each field. -- First it checks the banners table, which has values specific to the reason -- for the page being protected. Then the module checks the defaultBanners -- table, which has values specific to each protection level. Finally, the -- module checks the masterBanner table, which holds data for protection -- templates to use if no data has been found in the previous two tables. -- -- The values in the banner data can take parameters. These are specified -- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name -- enclosed in curly braces). -- -- Available parameters: -- -- ${CURRENTVERSION} - a link to the page history or the move log, with the -- display message "current-version-edit-display" or -- "current-version-move-display". -- -- ${EDITREQUEST} - a link to create an edit request for the current page. -- -- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes -- on the talk page; you may submit a request to ask an administrator to make -- an edit if it is minor or supported by consensus." -- -- ${IMAGELINK} - a link to set the image to, depending on the protection -- action and protection level. -- -- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry -- is set. E.g. "Editing of this page by new or unregistered users is currently -- disabled until dd Month YYYY." -- -- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation -- so that it can be used in run-on sentences. -- -- ${PAGETYPE} - the type of the page, e.g. "article" or "template". -- Defined in the cfg.pagetypes table. -- -- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g. -- "Editing of this page by new or unregistered users is currently disabled" -- -- ${PROTECTIONDATE} - the protection date, if it has been supplied to the -- template. -- -- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or -- "semi-protected". -- -- ${PROTECTIONLOG} - a link to the protection log or the pending changes log, -- depending on the protection action. -- -- ${TALKPAGE} - a link to the talk page. If a section is specified, links -- straight to that talk page section. -- -- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to -- create a blurb like "This template is semi-protected", or "This article is -- move-protected until DD Month YYYY". -- -- ${VANDAL} - links for the specified username (or the root page name) -- using Module:Vandal-m. -- -- Functions -- -- For advanced users, it is possible to use Lua functions instead of strings -- in the banner config tables. Using functions gives flexibility that is not -- possible just by using parameters. Functions take two arguments, the -- protection object and the template arguments, and they must output a string. -- -- For example: -- -- text = function (protectionObj, args) -- if protectionObj.level == 'autoconfirmed' then -- return 'foo' -- else -- return 'bar' -- end -- end -- -- Some protection object properties and methods that may be useful: -- protectionObj.action - the protection action -- protectionObj.level - the protection level -- protectionObj.reason - the protection reason -- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set -- to indefinite, and the protection time in unix time if temporary. -- protectionObj.protectionDate - the protection date in unix time, or nil if -- unspecified. -- protectionObj.bannerConfig - the banner config found by the module. Beware -- of editing the config field used by the function, as it could create an -- infinite loop. -- protectionObj:isProtected - returns a boolean showing whether the page is -- protected. -- protectionObj:isTemporary - returns a boolean showing whether the expiry is -- temporary. -- protectionObj:isIncorrect - returns a boolean showing whether the protection -- template is incorrect. --]] -- The master banner data, used if no values have been found in banners or -- defaultBanners. masterBanner = { text = '${INTROBLURB}', explanation = '${EXPLANATIONBLURB}', tooltip = '${TOOLTIPBLURB}', link = '${IMAGELINK}', alt = 'Page ${PROTECTIONLEVEL}' }, -- The default banner data. This holds banner data for different protection -- levels. -- *required* - this table needs edit, move, autoreview and upload subtables. defaultBanners = { edit = {}, move = {}, autoreview = { default = { alt = 'Page protected with pending changes', tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users', image = 'Pending-protection-shackle.svg' } }, upload = {} }, -- The banner data. This holds banner data for different protection reasons. -- In fact, the reasons specified in this table control which reasons are -- valid inputs to the first positional parameter. -- -- There is also a non-standard "description" field that can be used for items -- in this table. This is a description of the protection reason for use in the -- module documentation. -- -- *required* - this table needs edit, move, autoreview and upload subtables. banners = { edit = { blp = { description = 'For pages protected to promote compliance with the' .. ' [[Wikipedia:Biographies of living persons' .. '|biographies of living persons]] policy', text = '${INTROFRAGMENT} to promote compliance with' .. ' [[Wikipedia:Biographies of living persons' .. "|Wikipedia's&nbsp;policy on&nbsp;the&nbsp;biographies" .. ' of&nbsp;living&nbsp;people]].', tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on' .. ' biographies of living persons', }, dmca = { description = 'For pages protected by the Wikimedia Foundation' .. ' due to [[Digital Millennium Copyright Act]] takedown requests', explanation = function (protectionObj, args) local ret = 'Pursuant to a rights owner notice under the Digital' .. ' Millennium Copyright Act (DMCA) regarding some content' .. ' in this article, the Wikimedia Foundation acted under' .. ' applicable law and took down and restricted the content' .. ' in question.' if args.notice then ret = ret .. ' A copy of the received notice can be found here: ' .. args.notice .. '.' end ret = ret .. ' For more information, including websites discussing' .. ' how to file a counter-notice, please see' .. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}." .. "'''Do not remove this template from the article until the" .. " restrictions are withdrawn'''." return ret end, image = 'Office-protection-shackle.svg', }, dispute = { description = 'For pages protected due to editing disputes', text = function (protectionObj, args) -- Find the value of "disputes". local display = 'disputes' local disputes if args.section then disputes = string.format( '[[%s:%s#%s|%s]]', mw.site.namespaces[protectionObj.title.namespace].talk.name, protectionObj.title.text, args.section, display ) else disputes = display end -- Make the blurb, depending on the expiry. local msg if type(protectionObj.expiry) == 'number' then msg = '${INTROFRAGMENT} or until editing %s have been resolved.' else msg = '${INTROFRAGMENT} until editing %s have been resolved.' end return string.format(msg, disputes) end, explanation = "This protection is '''not''' an endorsement of the" .. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}', tooltip = '${TOOLTIPFRAGMENT} due to editing disputes', }, ecp = { description = 'For articles in topic areas authorized by' .. ' [[Wikipedia:Arbitration Committee|ArbCom]] or' .. ' meets the criteria for community use', tooltip = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}', alt = 'Extended-protected ${PAGETYPE}', }, mainpage = { description = 'For pages protected for being displayed on the [[Main Page]]', text = 'This file is currently' .. ' [[Wikipedia:This page is protected|protected]] from' .. ' editing because it is currently or will soon be displayed' .. ' on the [[Main Page]].', explanation = 'Images on the Main Page are protected due to their high' .. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.' .. '<br /><span style="font-size:90%;">' .. "'''Administrators:''' Once this image is definitely off the Main Page," .. ' please unprotect this file, or reduce to semi-protection,' .. ' as appropriate.</span>', }, office = { description = 'For pages protected by the Wikimedia Foundation', text = function (protectionObj, args) local ret = 'This ${PAGETYPE} is currently under the' .. ' scrutiny of the' .. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]' .. ' and is protected.' if protectionObj.protectionDate then ret = ret .. ' It has been protected since ${PROTECTIONDATE}.' end return ret end, explanation = "If you can edit this page, please discuss all changes and" .. " additions on the ${TALKPAGE} first. '''Do not remove protection from this" .. " page unless you are authorized by the Wikimedia Foundation to do" .. " so.'''", image = 'Office-protection-shackle.svg', }, reset = { description = 'For pages protected by the Wikimedia Foundation and' .. ' "reset" to a bare-bones version', text = 'This ${PAGETYPE} is currently under the' .. ' scrutiny of the' .. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]' .. ' and is protected.', explanation = function (protectionObj, args) local ret = '' if protectionObj.protectionDate then ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was' else ret = ret .. 'This ${PAGETYPE} has been' end ret = ret .. ' reduced to a' .. ' simplified, "bare bones" version so that it may be completely' .. ' rewritten to ensure it meets the policies of' .. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].' .. ' Standard Wikipedia policies will apply to its rewriting—which' .. ' will eventually be open to all editors—and will be strictly' .. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while' .. ' it is being rebuilt.\n\n' .. 'Any insertion of material directly from' .. ' pre-protection revisions of the ${PAGETYPE} will be removed, as' .. ' will any material added to the ${PAGETYPE} that is not properly' .. ' sourced. The associated talk page(s) were also cleared on the' .. " same date.\n\n" .. "If you can edit this page, please discuss all changes and" .. " additions on the ${TALKPAGE} first. '''Do not override" .. " this action, and do not remove protection from this page," .. " unless you are authorized by the Wikimedia Foundation" .. " to do so. No editor may remove this notice.'''" return ret end, image = 'Office-protection-shackle.svg', }, sock = { description = 'For pages protected due to' .. ' [[Wikipedia:Sock puppetry|sock puppetry]]', text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of' .. ' [[Wikipedia:Blocking policy|blocked]] or' .. ' [[Wikipedia:Banning policy|banned users]]' .. ' from editing it.', tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from' .. ' editing it', }, template = { description = 'For [[Wikipedia:High-risk templates|high-risk]]' .. ' templates and Lua modules', text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},' .. ' as it is [[Wikipedia:High-risk templates|high-risk]].', explanation = 'Please discuss any changes on the ${TALKPAGE}; you may' .. ' ${EDITREQUEST} to ask an' .. ' [[Wikipedia:Administrators|administrator]] or' .. ' [[Wikipedia:Template editor|template editor]] to make an edit if' .. ' it is [[Help:Minor edit#When to mark an edit as a minor edit' .. '|uncontroversial]] or supported by' .. ' [[Wikipedia:Consensus|consensus]]. You can also' .. ' [[Wikipedia:Requests for page protection|request]] that the page be' .. ' unprotected.', tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}' .. ' to prevent vandalism', alt = 'Permanently protected ${PAGETYPE}', }, usertalk = { description = 'For pages protected against disruptive edits by a' .. ' particular user', text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,' .. ' such as abusing the' .. ' &#123;&#123;[[Template:unblock|unblock]]&#125;&#125; template.', explanation = 'If you cannot edit this user talk page and you need to' .. ' make a change or leave a message, you can' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for edits to a protected page' .. '|request an edit]],' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]],' .. ' [[Special:Userlogin|log in]],' .. ' or [[Special:UserLogin/signup|create an account]].', }, vandalism = { description = 'For pages protected against' .. ' [[Wikipedia:Vandalism|vandalism]]', text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].', explanation = function (protectionObj, args) local ret = '' if protectionObj.level == 'sysop' then ret = ret .. "This protection is '''not''' an endorsement of the" .. ' ${CURRENTVERSION}. ' end return ret .. '${EXPLANATIONBLURB}' end, tooltip = '${TOOLTIPFRAGMENT} due to vandalism', } }, move = { dispute = { description = 'For pages protected against page moves due to' .. ' disputes over the page title', explanation = "This protection is '''not''' an endorsement of the" .. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}', image = 'Move-protection-shackle.svg' }, vandalism = { description = 'For pages protected against' .. ' [[Wikipedia:Vandalism#Page-move vandalism' .. ' |page-move vandalism]]' } }, autoreview = {}, upload = {} }, -------------------------------------------------------------------------------- -- -- GENERAL DATA TABLES -- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- Protection blurbs -------------------------------------------------------------------------------- -- This table produces the protection blurbs available with the -- ${PROTECTIONBLURB} parameter. It is sorted by protection action and -- protection level, and is checked by the module in the following order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level -- 3. "edit" protection action, default protection level -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. protectionBlurbs = { edit = { default = 'This ${PAGETYPE} is currently [[Help:Protection|' .. 'protected]] from editing', autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access' .. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered' .. ' users|unregistered]] users is currently [[Help:Protection|disabled]]', extendedconfirmed = 'This ${PAGETYPE} is currently under extended confirmed protection', }, move = { default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]' .. ' from [[Help:Moving a page|page moves]]' }, autoreview = { default = 'All edits made to this ${PAGETYPE} by' .. ' [[Wikipedia:User access levels#New users|new]] or' .. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]' .. ' users are currently' .. ' [[Wikipedia:Pending changes|subject to review]]' }, upload = { default = 'Uploading new versions of this ${PAGETYPE} is currently disabled' } }, -------------------------------------------------------------------------------- -- Explanation blurbs -------------------------------------------------------------------------------- -- This table produces the explanation blurbs available with the -- ${EXPLANATIONBLURB} parameter. It is sorted by protection action, -- protection level, and whether the page is a talk page or not. If the page is -- a talk page it will have a talk key of "talk"; otherwise it will have a talk -- key of "subject". The table is checked in the following order: -- 1. page's protection action, page's protection level, page's talk key -- 2. page's protection action, page's protection level, default talk key -- 3. page's protection action, default protection level, page's talk key -- 4. page's protection action, default protection level, default talk key -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. explanationBlurbs = { edit = { autoconfirmed = { subject = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details. If you' .. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can' .. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]], [[Special:Userlogin|log in]], or' .. ' [[Special:UserLogin/signup|create an account]].', default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details. If you' .. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]], [[Special:Userlogin|log in]], or' .. ' [[Special:UserLogin/signup|create an account]].', }, extendedconfirmed = { default = 'Extended confirmed protection prevents edits from all unregistered editors' .. ' and registered users with fewer than 30 days tenure and 500 edits.' .. ' The [[Wikipedia:Protection policy#extended|policy on community use]]' .. ' specifies that extended confirmed protection can be applied to combat' .. ' disruption, if semi-protection has proven to be ineffective.' .. ' Extended confirmed protection may also be applied to enforce' .. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].' .. ' Please discuss any changes on the ${TALKPAGE}; you may' .. ' ${EDITREQUEST} to ask for uncontroversial changes supported by' .. ' [[Wikipedia:Consensus|consensus]].' }, default = { subject = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' Please discuss any changes on the ${TALKPAGE}; you' .. ' may ${EDITREQUEST} to ask an' .. ' [[Wikipedia:Administrators|administrator]] to make an edit if it' .. ' is [[Help:Minor edit#When to mark an edit as a minor edit' .. '|uncontroversial]] or supported by [[Wikipedia:Consensus' .. '|consensus]]. You may also [[Wikipedia:Requests for' .. ' page protection#Current requests for reduction in protection level' .. '|request]] that this page be unprotected.', default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' You may [[Wikipedia:Requests for page' .. ' protection#Current requests for edits to a protected page|request an' .. ' edit]] to this page, or [[Wikipedia:Requests for' .. ' page protection#Current requests for reduction in protection level' .. '|ask]] for it to be unprotected.' } }, move = { default = { subject = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' The page may still be edited but cannot be moved' .. ' until unprotected. Please discuss any suggested moves on the' .. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also' .. ' [[Wikipedia:Requests for page protection|request]] that the page be' .. ' unprotected.', default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' The page may still be edited but cannot be moved' .. ' until unprotected. Please discuss any suggested moves at' .. ' [[Wikipedia:Requested moves]]. You can also' .. ' [[Wikipedia:Requests for page protection|request]] that the page be' .. ' unprotected.' } }, autoreview = { default = { default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' Edits to this ${PAGETYPE} by new and unregistered users' .. ' will not be visible to readers until they are accepted by' .. ' a reviewer. To avoid the need for your edits to be' .. ' reviewed, you may' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]], [[Special:Userlogin|log in]], or' .. ' [[Special:UserLogin/signup|create an account]].' }, }, upload = { default = { default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' The page may still be edited but new versions of the file' .. ' cannot be uploaded until it is unprotected. You can' .. ' request that a new version be uploaded by using a' .. ' [[Wikipedia:Edit requests|protected edit request]], or you' .. ' can [[Wikipedia:Requests for page protection|request]]' .. ' that the file be unprotected.' } } }, -------------------------------------------------------------------------------- -- Protection levels -------------------------------------------------------------------------------- -- This table provides the data for the ${PROTECTIONLEVEL} parameter, which -- produces a short label for different protection levels. It is sorted by -- protection action and protection level, and is checked in the following -- order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level -- 3. "edit" protection action, default protection level -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. protectionLevels = { edit = { default = 'protected', templateeditor = 'template-protected', extendedconfirmed = 'extended-protected', autoconfirmed = 'semi-protected', }, move = { default = 'move-protected' }, autoreview = { }, upload = { default = 'upload-protected' } }, -------------------------------------------------------------------------------- -- Images -------------------------------------------------------------------------------- -- This table lists different padlock images for each protection action and -- protection level. It is used if an image is not specified in any of the -- banner data tables, and if the page does not satisfy the conditions for using -- the ['image-filename-indef'] image. It is checked in the following order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level images = { edit = { default = 'Full-protection-shackle.svg', templateeditor = 'Template-protection-shackle.svg', extendedconfirmed = 'Extended-protection-shackle.svg', autoconfirmed = 'Semi-protection-shackle.svg' }, move = { default = 'Move-protection-shackle.svg', }, autoreview = { default = 'Pending-protection-shackle.svg' }, upload = { default = 'Upload-protection-shackle.svg' } }, -- Pages with a reason specified in this table will show the special "indef" -- padlock, defined in the 'image-filename-indef' message, if no expiry is set. indefImageReasons = { template = true }, -------------------------------------------------------------------------------- -- Image links -------------------------------------------------------------------------------- -- This table provides the data for the ${IMAGELINK} parameter, which gets -- the image link for small padlock icons based on the page's protection action -- and protection level. It is checked in the following order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level -- 3. "edit" protection action, default protection level -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. imageLinks = { edit = { default = 'Wikipedia:Protection policy#full', templateeditor = 'Wikipedia:Protection policy#template', extendedconfirmed = 'Wikipedia:Protection policy#extended', autoconfirmed = 'Wikipedia:Protection policy#semi' }, move = { default = 'Wikipedia:Protection policy#move' }, autoreview = { default = 'Wikipedia:Protection policy#pending' }, upload = { default = 'Wikipedia:Protection policy#upload' } }, -------------------------------------------------------------------------------- -- Padlock indicator names -------------------------------------------------------------------------------- -- This table provides the "name" attribute for the <indicator> extension tag -- with which small padlock icons are generated. All indicator tags on a page -- are displayed in alphabetical order based on this attribute, and with -- indicator tags with duplicate names, the last tag on the page wins. -- The attribute is chosen based on the protection action; table keys must be a -- protection action name or the string "default". padlockIndicatorNames = { autoreview = 'pp-autoreview', default = 'pp-default' }, -------------------------------------------------------------------------------- -- Protection categories -------------------------------------------------------------------------------- --[[ -- The protection categories are stored in the protectionCategories table. -- Keys to this table are made up of the following strings: -- -- 1. the expiry date -- 2. the namespace -- 3. the protection reason (e.g. "dispute" or "vandalism") -- 4. the protection level (e.g. "sysop" or "autoconfirmed") -- 5. the action (e.g. "edit" or "move") -- -- When the module looks up a category in the table, first it will will check to -- see a key exists that corresponds to all five parameters. For example, a -- user page semi-protected from vandalism for two weeks would have the key -- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module -- changes the first part of the key to "all" and checks the table again. It -- keeps checking increasingly generic key combinations until it finds the -- field, or until it reaches the key "all-all-all-all-all". -- -- The module uses a binary matrix to determine the order in which to search. -- This is best demonstrated by a table. In this table, the "0" values -- represent "all", and the "1" values represent the original data (e.g. -- "indef" or "file" or "vandalism"). -- -- expiry namespace reason level action -- order -- 1 1 1 1 1 1 -- 2 0 1 1 1 1 -- 3 1 0 1 1 1 -- 4 0 0 1 1 1 -- 5 1 1 0 1 1 -- 6 0 1 0 1 1 -- 7 1 0 0 1 1 -- 8 0 0 0 1 1 -- 9 1 1 1 0 1 -- 10 0 1 1 0 1 -- 11 1 0 1 0 1 -- 12 0 0 1 0 1 -- 13 1 1 0 0 1 -- 14 0 1 0 0 1 -- 15 1 0 0 0 1 -- 16 0 0 0 0 1 -- 17 1 1 1 1 0 -- 18 0 1 1 1 0 -- 19 1 0 1 1 0 -- 20 0 0 1 1 0 -- 21 1 1 0 1 0 -- 22 0 1 0 1 0 -- 23 1 0 0 1 0 -- 24 0 0 0 1 0 -- 25 1 1 1 0 0 -- 26 0 1 1 0 0 -- 27 1 0 1 0 0 -- 28 0 0 1 0 0 -- 29 1 1 0 0 0 -- 30 0 1 0 0 0 -- 31 1 0 0 0 0 -- 32 0 0 0 0 0 -- -- In this scheme the action has the highest priority, as it is the last -- to change, and the expiry has the least priority, as it changes the most. -- The priorities of the expiry, the protection level and the action are -- fixed, but the priorities of the reason and the namespace can be swapped -- through the use of the cfg.bannerDataNamespaceHasPriority table. --]] -- If the reason specified to the template is listed in this table, -- namespace data will take priority over reason data in the protectionCategories -- table. reasonsWithNamespacePriority = { vandalism = true, }, -- The string to use as a namespace key for the protectionCategories table for each -- namespace number. categoryNamespaceKeys = { [ 2] = 'user', [ 3] = 'user', [ 4] = 'project', [ 6] = 'file', [ 8] = 'mediawiki', [ 10] = 'template', [ 12] = 'project', [ 14] = 'category', [100] = 'portal', [828] = 'module', }, protectionCategories = { ['all|all|all|all|all'] = 'Wikipedia fully protected pages', ['all|all|office|all|all'] = 'Wikipedia Office-protected pages', ['all|all|reset|all|all'] = 'Wikipedia Office-protected pages', ['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages', ['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files', ['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages', ['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages', ['all|template|all|all|edit'] = 'Wikipedia fully protected templates', ['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages', ['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages', ['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people', ['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people', ['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute', ['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users', ['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism', ['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories', ['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files', ['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals', ['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages', ['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages', ['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates', ['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages', ['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules', ['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates', ['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates ['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people', ['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people', ['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute', ['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users', ['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism', ['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories', ['all|file|all|sysop|edit'] = 'Wikipedia fully protected files', ['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages', ['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages', ['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates', ['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates', ['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages', ['all|module|all|all|edit'] = 'Wikipedia fully protected modules', ['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules', ['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules', ['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules', ['all|all|all|sysop|move'] = 'Wikipedia move-protected pages', ['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages', ['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute', ['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism', ['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals', ['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages', ['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages', ['all|template|all|sysop|move'] = 'Wikipedia move-protected templates', ['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages', ['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages', ['all|file|all|all|upload'] = 'Wikipedia upload-protected files', }, -------------------------------------------------------------------------------- -- Expiry category config -------------------------------------------------------------------------------- -- This table configures the expiry category behaviour for each protection -- action. -- * If set to true, setting that action will always categorise the page if -- an expiry parameter is not set. -- * If set to false, setting that action will never categorise the page. -- * If set to nil, the module will categorise the page if: -- 1) an expiry parameter is not set, and -- 2) a reason is provided, and -- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck -- table. expiryCheckActions = { edit = nil, move = false, autoreview = true, upload = false }, reasonsWithoutExpiryCheck = { blp = true, template = true, }, -------------------------------------------------------------------------------- -- Pagetypes -------------------------------------------------------------------------------- -- This table produces the page types available with the ${PAGETYPE} parameter. -- Keys are namespace numbers, or the string "default" for the default value. pagetypes = { [0] = 'article', [6] = 'file', [10] = 'template', [14] = 'category', [828] = 'module', default = 'page' }, -------------------------------------------------------------------------------- -- Strings marking indefinite protection -------------------------------------------------------------------------------- -- This table contains values passed to the expiry parameter that mean the page -- is protected indefinitely. indefStrings = { ['indef'] = true, ['indefinite'] = true, ['indefinitely'] = true, ['infinite'] = true, }, -------------------------------------------------------------------------------- -- Group hierarchy -------------------------------------------------------------------------------- -- This table maps each group to all groups that have a superset of the original -- group's page editing permissions. hierarchy = { sysop = {}, reviewer = {'sysop'}, filemover = {'sysop'}, templateeditor = {'sysop'}, extendedconfirmed = {'sysop'}, autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'}, user = {'autoconfirmed'}, ['*'] = {'user'} }, -------------------------------------------------------------------------------- -- Wrapper templates and their default arguments -------------------------------------------------------------------------------- -- This table contains wrapper templates used with the module, and their -- default arguments. Templates specified in this table should contain the -- following invocation, and no other template content: -- -- {{#invoke:Protection banner|main}} -- -- If other content is desired, it can be added between -- <noinclude>...</noinclude> tags. -- -- When a user calls one of these wrapper templates, they will use the -- default arguments automatically. However, users can override any of the -- arguments. wrappers = { ['Template:Pp'] = {}, ['Template:Pp-extended'] = {'ecp'}, ['Template:Pp-blp'] = {'blp'}, -- we don't need Template:Pp-create ['Template:Pp-dispute'] = {'dispute'}, ['Template:Pp-main-page'] = {'mainpage'}, ['Template:Pp-move'] = {action = 'move', catonly = 'yes'}, ['Template:Pp-move-dispute'] = {'dispute', action = 'move', catonly = 'yes'}, -- we don't need Template:Pp-move-indef ['Template:Pp-move-vandalism'] = {'vandalism', action = 'move', catonly = 'yes'}, ['Template:Pp-office'] = {'office'}, ['Template:Pp-office-dmca'] = {'dmca'}, ['Template:Pp-pc'] = {action = 'autoreview', small = true}, ['Template:Pp-pc1'] = {action = 'autoreview', small = true}, ['Template:Pp-reset'] = {'reset'}, ['Template:Pp-semi-indef'] = {small = true}, ['Template:Pp-sock'] = {'sock'}, ['Template:Pp-template'] = {'template', small = true}, ['Template:Pp-upload'] = {action = 'upload'}, ['Template:Pp-usertalk'] = {'usertalk'}, ['Template:Pp-vandalism'] = {'vandalism'}, }, -------------------------------------------------------------------------------- -- -- MESSAGES -- -------------------------------------------------------------------------------- msg = { -------------------------------------------------------------------------------- -- Intro blurb and intro fragment -------------------------------------------------------------------------------- -- These messages specify what is produced by the ${INTROBLURB} and -- ${INTROFRAGMENT} parameters. If the protection is temporary they use the -- intro-blurb-expiry or intro-fragment-expiry, and if not they use -- intro-blurb-noexpiry or intro-fragment-noexpiry. -- It is possible to use banner parameters in these messages. ['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.', ['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.', ['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},', ['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}', -------------------------------------------------------------------------------- -- Tooltip blurb -------------------------------------------------------------------------------- -- These messages specify what is produced by the ${TOOLTIPBLURB} parameter. -- If the protection is temporary the tooltip-blurb-expiry message is used, and -- if not the tooltip-blurb-noexpiry message is used. -- It is possible to use banner parameters in these messages. ['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.', ['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.', ['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},', ['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}', -------------------------------------------------------------------------------- -- Special explanation blurb -------------------------------------------------------------------------------- -- An explanation blurb for pages that cannot be unprotected, e.g. for pages -- in the MediaWiki namespace. -- It is possible to use banner parameters in this message. ['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' Please discuss any changes on the ${TALKPAGE}; you' .. ' may ${EDITREQUEST} to ask an' .. ' [[Wikipedia:Administrators|administrator]] to make an edit if it' .. ' is [[Help:Minor edit#When to mark an edit as a minor edit' .. '|uncontroversial]] or supported by [[Wikipedia:Consensus' .. '|consensus]].', -------------------------------------------------------------------------------- -- Protection log display values -------------------------------------------------------------------------------- -- These messages determine the display values for the protection log link -- or the pending changes log link produced by the ${PROTECTIONLOG} parameter. -- It is possible to use banner parameters in these messages. ['protection-log-display'] = 'protection log', ['pc-log-display'] = 'pending changes log', -------------------------------------------------------------------------------- -- Current version display values -------------------------------------------------------------------------------- -- These messages determine the display values for the page history link -- or the move log link produced by the ${CURRENTVERSION} parameter. -- It is possible to use banner parameters in these messages. ['current-version-move-display'] = 'current title', ['current-version-edit-display'] = 'current version', -------------------------------------------------------------------------------- -- Talk page -------------------------------------------------------------------------------- -- This message determines the display value of the talk page link produced -- with the ${TALKPAGE} parameter. -- It is possible to use banner parameters in this message. ['talk-page-link-display'] = 'talk page', -------------------------------------------------------------------------------- -- Edit requests -------------------------------------------------------------------------------- -- This message determines the display value of the edit request link produced -- with the ${EDITREQUEST} parameter. -- It is possible to use banner parameters in this message. ['edit-request-display'] = 'submit an edit request', -------------------------------------------------------------------------------- -- Expiry date format -------------------------------------------------------------------------------- -- This is the format for the blurb expiry date. It should be valid input for -- the first parameter of the #time parser function. ['expiry-date-format'] = 'F j, Y "at" H:i e', -------------------------------------------------------------------------------- -- Tracking categories -------------------------------------------------------------------------------- -- These messages determine which tracking categories the module outputs. ['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates', ['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules', -------------------------------------------------------------------------------- -- Images -------------------------------------------------------------------------------- -- These are images that are not defined by their protection action and protection level. ['image-filename-indef'] = 'Full-protection-shackle.svg', ['image-filename-default'] = 'Transparent.gif', -------------------------------------------------------------------------------- -- End messages -------------------------------------------------------------------------------- } -------------------------------------------------------------------------------- -- End configuration -------------------------------------------------------------------------------- } a20552ae38cb5253a4fa29aa126abc74215a589f Template:Navbox/doc 10 135 304 2023-05-10T11:20:26Z wikipedia>CrafterNova 0 wording fix wikitext text/x-wiki {{for|vertically-aligned navigation|Template:Sidebar}} {{documentation subpage}} {{high-use|all-pages=y}} {{Template display|nomobile}} {{Lua|Module:Navbox}} {{Navbox suite}} {{Lua sidebar}} This template allows a [[Wikipedia:Navigation template|navigational template]] to be set up relatively quickly by supplying it with one or more lists of links. It comes equipped with default styles that should work for most navigational templates. Changing the default styles is possible, but not recommended. Using this template, or one of its "Navbox suite" sister templates, is highly recommended for standardization of navigational templates, and for ease of use. {{Navbox visibility}} == Usage == Please remove the parameters that are left blank. <pre style="overflow: auto;">{{Navbox | name = {{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}} | title = | listclass = hlist | state = {{{state|}}} | above = | image = | group1 = | list1 = | group2 = | list2 = | group3 = | list3 = <!-- ... --> | below = }} </pre> == Parameter list == {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | title = {{{title}}} | above = {{{above}}} | image = {{{image}}} | group1 = {{{group1}}} | list1 = {{{list1}}} | group2 = {{{group2}}} | list2 = {{{list2}}} | group3 = {{{group3}}} | list3 = {{{list3}}} | group4 = {{{group4}}} | list4 = {{{list4}}} | below = {{{below}}} <br /> See alternate navbox formats under: [[#Layout of table|''Layout of table'']] }} The navbox uses lowercase parameter names, as shown in the box (''above''). The required ''name'' and ''title'' will create a one-line box if other parameters are omitted. Notice "group1" (etc.) is optional, as are sections named "above/below". {{clear}} The basic and most common parameters are as follows (see [[#Parameter descriptions|below]] for the full list): : <code>name</code> – the name (Wikipedia location) of the template. : <code>title</code> – text in the title bar, such as: <nowiki>[[Widget stuff]]</nowiki>. : <code>listclass</code> – a CSS class for the list cells, usually <code>hlist</code> for horizontal lists. Alternatively, use bodyclass for the whole box. : <code>state</code> – controls when a navbox is expanded or collapsed. : <code>titlestyle</code> – a CSS style for the title-bar, such as: <code>background: gray;</code> : <code>groupstyle</code> – a CSS style for the group-cells, such as: <code>background: #eee;</code> : <code>above</code> – text to appear above the group/list section (could be a list of overall wikilinks). : <code>image</code> – an optional right-side image, coded as the whole image, such as: <code><nowiki>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</nowiki></code> :: Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight. : <code>imageleft</code> – an optional left-side image (code the same as the "image" parameter). : <code>group<sub>n</sub></code> – the left-side text before list-n (if group-n omitted, list-n extends to the left edge of the box, and defaults to <code>text-align:center</code> styling). : <code>list<sub>n</sub></code> – text listing wikilinks using a [[Help:List|wikilist]] format. : <code>below</code> – optional text to appear below the group/list section. == Parameter descriptions == The following is a complete list of parameters for using {{tl|Navbox}}. In most cases, the only required parameters are <code>name</code>, <code>title</code>, and <code>list1</code>, though [[Template:Navbox/doc#Child navboxes|child navboxes]] do not even require those to be set. {{tl|Navbox}} shares numerous common parameter names with its sister templates, {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}, for consistency and ease of use. Parameters marked with an asterisk (*) are common to all three master templates. === Setup parameters === ; ''name''* : The name of the template, which is needed for the "V&nbsp;• T&nbsp;• E" ("View&nbsp;• Talk&nbsp;• Edit") links to work properly on all pages where the template is used. You can enter <code><nowiki>{{subst:PAGENAME}}</nowiki></code> for this value as a shortcut. The name parameter is only mandatory if a <code>title</code> is specified, and the <code>border</code> parameter is not set, and the <code>navbar</code> parameter is not used to disable the navbar. ; ''state''* <span style="font-weight:normal;">[<code>autocollapse, collapsed, expanded, plain, off</code>]</span> :* Defaults to <code>autocollapse</code>. A navbox with <code>autocollapse</code> will start out collapsed if there are two or more collapsible elements on the same page. Otherwise, the navbox will be expanded. For the technically minded, see [[MediaWiki:Common.js]] (search for "autocollapse"). :* If set to <code>collapsed</code>, the navbox will always start out in a collapsed state. :* If set to <code>expanded</code>, the navbox will always start out in an expanded state. :* If set to <code>plain</code>, the navbox will always be expanded with no [hide] link on the right, and the title will remain centered (by using padding to offset the <small>V&nbsp;• T&nbsp;• E</small> links). :* If set to <code>off</code>, the navbox will always be expanded with no [hide] link on the right, but no padding will be used to keep the title centered. This is for advanced use only; the "plain" option should suffice for most applications where the [show]/[hide] button needs to be hidden. : To show the box when standalone (non-included) but then auto-hide contents when in an article, put "expanded" inside {{tag|noinclude|p}} tags. This setting will force the box to be visible when standalone (even when followed by other boxes), displaying "[hide]", but then it will auto-collapse the box when stacked inside an article: <pre>| state =&nbsp;</nowiki></code>{{tag|noinclude|content=expanded}}</pre> Often times, editors will want a default initial state for a navbox, which may be overridden in an article. Here is the trick to do this: :* In your intermediate template, create a parameter also named "state" as a pass-through like this: <pre><nowiki>| state = {{{state<includeonly>|your_desired_initial_state</includeonly>}}}</nowiki></pre> :* The {{tag|includeonly|o}}<code>|</code> will make the template expanded when viewing the template page by itself. :** Example 1: {{tl|Peso}} with ''autocollapse'' as the default initial state. [[Catalan peseta]] transcludes it and has only one navbox; thus, the peso navbox shows. [[Chilean peso]] has more than two navboxes; thus, the peso navbox collapses. :** Example 2: {{tl|Historical currencies of Hungary}} with ''expanded'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|expanded</includeonly>}}}</pre> All transcluding articles show the content by default, unless there is a hypothetical article that specifies <code><nowiki>{{templatename|state=collapsed}}</nowiki></code> when transcluding. :** Example 3: {{tl|Tourism}} with ''collapsed'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|collapsed</includeonly>}}}</pre> All transcluding articles will show the template as collapsed by default, but the template will still be uncollapsed when displayed on its own page. :* The template {{tl|Collapsible option}} explains how to use the <code>state</code> parameter. It can be added to a {{tag|noinclude|p}} section after the template definition or to the instructions on the {{tl|documentation subpage}}. ; ''navbar''* : If set to <code>plain</code>, the <span style="font-size: 88%;">V&nbsp;• T&nbsp;• E</span> links on the left side of the titlebar will not be displayed, and padding will be automatically used to keep the title centered. Use <code>off</code> to remove the <span style="font-size: 88%;">V&nbsp;• T&nbsp;• E</span> links, but not apply padding (this is for advanced use only; the "plain" option should suffice for most applications where a navbar is not desired). It is highly recommended that one not hide the navbar, in order to make it easier for users to edit the template, and to keep a standard style across pages. ; ''border''* : ''See later section on [[#Child navboxes|using navboxes within one another]] for examples and a more complete description.'' If set to <code>child</code> or <code>subgroup</code>, then the navbox can be used as a borderless child that fits snugly in another navbox. The border is hidden and there is no padding on the sides of the table, so it fits into the ''list'' area of its parent navbox. If set to <code>none</code>, then the border is hidden and padding is removed, and the navbox may be used as a child of another container (do not use the <code>none</code> option inside of another navbox; similarly, only use the <code>child</code>/<code>subgroup</code> option inside of another navbox). If set to anything else (default), then a regular navbox is displayed with a 1px border. An alternate way to specify the border to be a subgroup style is like this (i.e. use the first unnamed parameter instead of the named ''border'' parameter): :<pre>{{Navbox|child|...}}</pre> === Cells === ; ''title''* : Text that appears centered in the top row of the table. It is usually the template's topic, i.e. a succinct description of the body contents. This should be a single line, but if a second line is needed, use <code><nowiki>{{-}}</nowiki></code> to ensure proper centering. This parameter is technically not mandatory, but using {{tl|Navbox}} is rather pointless without a title. ; ''above''* : A full-width cell displayed between the titlebar and first group/list, i.e. ''above'' the template's body (groups, lists and image). In a template without an image, ''above'' behaves in the same way as the ''list1'' parameter without the ''group1'' parameter. ; ''group<sub>n</sub>''* : (i.e. ''group1'', ''group2'', etc.) If specified, text appears in a header cell displayed to the left of ''list<sub>n</sub>''. If omitted, ''list<sub>n</sub>'' uses the full width of the table. ; ''list<sub>n</sub>''* : (i.e. ''list1'', ''list2'', etc.) The body of the template, usually a list of links. Format is inline, although the text can be entered on separate lines if the entire list is enclosed within <code><nowiki><div> </div></nowiki></code>. At least one ''list'' parameter is required; each additional ''list'' is displayed in a separate row of the table. Each ''list<sub>n</sub>'' may be preceded by a corresponding ''group<sub>n</sub>'' parameter, if provided (see below). :Entries should be separated using a [[newline]] and an [[asterisk]] (*). If instead two asterisks are used, it provides [[Nesting (computing)|nesting]] within the previous entry by enclosing the entry with brackets. Increasing the number of asterisks used increases the number of brackets around entries. ; ''image''* : An image to be displayed in a cell below the title and to the right of the body (the groups/lists). For the image to display properly, the ''list1'' parameter must be specified. The ''image'' parameter accepts standard wikicode for displaying an image, ''e.g.'': <pre>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</pre> nb: including "|right" will produce the usual left margin to provide separation from the list items and [[Zebra striping (computer graphics)|zebra striping]]. :Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight. A rare example of a correct usage would be [[special:permalink/995622594|this one]]: a map shows (in green) the location of a region within the state of Kazakhstan, and this is consistently implemented for [[:category:Kazakhstan region templates|all state's regions]]. ; ''imageleft''* : An image to be displayed in a cell below the title and to the left of the body (lists). For the image to display properly, the ''list1'' parameter must be specified and no groups can be specified. It accepts the same sort of parameter that ''image'' accepts. ; ''below''* : A full-width cell displayed ''below'' the template's body (groups, lists and image). In a template without an image, ''below'' behaves in the same way as the template's final ''list<sub>n</sub>'' parameter without a ''group<sub>n</sub>'' parameter. For an example of the ''below'' parameter in use, see {{oldid|Main Page|352612160|this}} version of {{tl|Lists of the provinces and territories of Canada}}. {{tl|icon}} is often used for non-article links, for example <code><nowiki>{{icon|category}} [[:Category:</nowiki>''name''<nowiki>|Category]]</nowiki></code>. === Style parameters === Styles are generally advised against, to maintain consistency among templates and pages in Wikipedia; but the option to modify styles is given. ; ''bodystyle''* : Specifies [[Cascading Style Sheets|CSS]] styles to apply to the template body. This option should be used sparingly as it can lead to visual inconsistencies. Examples: :* <code>bodystyle = background: #''nnnnnn'';</code> :* <code>bodystyle = width: ''N''&nbsp;[em/%/px or width: auto];</code> :* <code>bodystyle = float: [''left/right/none''];</code> :* <code>bodystyle = clear: [''right/left/both/none''];</code> ; ''basestyle''* : CSS styles to apply to the ''title'', ''above'', ''below'', and ''group'' cells all at once. The styles are not applied to ''list'' cells. This is convenient for easily changing the basic color of the navbox without having to repeat the style specifications for the different parts of the navbox. Example: <code>basestyle = background: lightskyblue;</code> ; ''titlestyle''* : [[Cascading Style Sheets|CSS]] styles to apply to ''title'', most often the titlebar's background color: :* <code>titlestyle = background: ''#nnnnnn'';</code> :* <code>titlestyle = background: ''name'';</code> :* <code>titlestyle = background: none;</code> — for no background color ; ''groupstyle''* : CSS styles to apply to the ''groupN'' cells. This option overrides any styles that are applied to the entire table. Examples: :* <code>groupstyle = background: #''nnnnnn'';</code> :* <code>groupstyle = text-align: [''left/center/right''];</code> :* <code>groupstyle = vertical-align: [''top/middle/bottom''];</code> ; ''group<sub>n</sub>style''* : CSS styles to apply to a specific group, in addition to any styles specified by the ''groupstyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>group3style = background: red; color: white;</code> ; ''groupwidth'' : A number and unit specifying a uniform width for the group cells, in cases where little content in the list cells may cause group cells to be too wide. No default. However, may be overridden by the ''group(n)style'' parameter. Example: <code>groupwidth = 9em</code> ; ''liststyle''* : CSS styles to apply to all lists. Overruled by the ''oddstyle'' and ''evenstyle'' parameters (if specified) hereafter. When using backgound colors in the navbox, see the [[#Intricacies|note hereafter]]. ; ''list<sub>n</sub>style''* : CSS styles to apply to a specific list, in addition to any styles specified by the ''liststyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>list5style = background: #ddddff;</code> ; ''listpadding''* : A number and unit specifying the padding in each ''list'' cell. The ''list'' cells come equipped with a default padding of 0.25em on the left and right, and 0 on the top and bottom. Due to complex technical reasons, simply setting "liststyle = padding: 0.5em;" (or any other padding setting) will not work. Examples: :* <code>listpadding = 0.5em 0;</code> (sets 0.5em padding for the top/bottom, and 0 padding for the left/right.) :* <code>listpadding = 0;</code> (removes all list padding.) ; ''oddstyle'' ; ''evenstyle'' : Applies to odd/even list numbers. Overrules styles defined by ''liststyle''. The default behavior is to add striped colors (white and gray) to odd/even rows, respectively, in order to improve readability. These should not be changed except in extraordinary circumstances. ; ''evenodd'' <span style="font-weight: normal;"><code>[swap, even, odd, off]</code></span> : If set to <code>swap</code>, then the automatic striping of even and odd rows is reversed. Normally, even rows get a light gray background for striping; when this parameter is used, the odd rows receive the gray striping instead of the even rows. Setting to <code>even</code> or <code>odd</code> sets all rows to have that striping color. Setting to <code>off</code> disables automatic row striping. ; ''abovestyle''* ; ''belowstyle''* : CSS styles to apply to the top cell (specified via the ''above'' parameter) and bottom cell (specified via the ''below'' parameter). Typically used to set background color or text alignment: :* <code>abovestyle = background: #''nnnnnn'';</code> :* <code>abovestyle = text-align: [''left/center/right''];</code> :* <code>belowstyle = background: #''nnnnnn'';</code> :* <code>belowstyle = text-align: [''left/center/right''];</code> ; ''imagestyle''* ; ''imageleftstyle''* : CSS styles to apply to the cells where the image/imageleft sits. These styles should only be used in exceptional circumstances, usually to fix width problems if the width of groups is set and the width of the image cell grows too large. Example: <code>imagestyle = width:5em;</code> ===== Default styles ===== The style settings listed here are those that editors using the navbox change most often. The other more complex style settings were left out of this list to keep it simple. Most styles are set in [[MediaWiki:Common.css]]. <syntaxhighlight lang="css"> bodystyle = background: #fdfdfd; width: 100%; vertical-align: middle; titlestyle = background: #ccccff; padding-left: 1em; padding-right: 1em; text-align: center; abovestyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center; belowstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center; groupstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: right; liststyle = background: transparent; text-align: left/center; oddstyle = background: transparent; evenstyle = background: #f7f7f7; </syntaxhighlight> Since ''liststyle'' and ''oddstyle'' are transparent, odd lists have the color of the ''bodystyle'', which defaults to #fdfdfd (white with a hint of gray). A list defaults to <code>text-align: left;</code> if it has a group, if not it defaults to <code>text-align: center;</code>. Since only ''bodystyle'' has a vertical-align all the others inherit its <code>vertical-align: middle;</code>. === Advanced parameters === ; ''bodyclass'' ; ''aboveclass'' ; ''groupclass'' ; ''listclass'' ; ''belowclass'' : This enables attaching a CSS class to group or list cells. The most common use for ''listclass'' is to give it the <code>hlist</code> class that will cause lists to render horizontally. All these parameters accept the <code>hlist</code> class, but if more than one parameter is used for <code>hlist</code>, use {{para|bodyclass|hlist}} instead. ; ''titlegroup'' : This puts a group in the title area, with the same default styles as ''group<sub>n</sub>''. It should be used only in exceptional circumstances (usually advanced meta-templates) and its use requires some knowledge of the internal code of {{tl|Navbox}}; you should be ready to manually set up CSS styles to get everything to work properly if you wish to use it. If you think you have an application for this parameter, it might be best to change your mind, or consult the talk page first. ; ''titlegroupstyle'' : The styles for the titlegroup cell. ; ''innerstyle'' : A very advanced parameter to be used ''only'' for advanced meta-templates employing the navbox. Internally, the navbox uses an outer table to draw the border, and then an inner table for everything else (title/above/groups/lists/below/images, etc.). The ''style''/''bodystyle'' parameter sets the style for the outer table, which the inner table inherits, but in advanced cases (meta-templates) it may be necessary to directly set the style for the inner table. This parameter provides access to that inner table so styles can be applied. Use at your own risk. ; ''nowrapitems'' : Setting <code>|nowrapitems=yes</code> applies nowrap to each line in a list item, and to any <code>above</code> or <code>below</code> item. ; ''orphan'' : Setting <code>|orphan=yes</code> in a child navbox fixes odd/even striping and removes [[:Category:Navbox orphans]]. ==== Microformats ==== ; ''bodyclass'' : This parameter is inserted into the "class" attribute for the navbox as a whole. ; ''titleclass'' : This parameter is inserted into the "class" attribute for the navbox's title caption. This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. To flag a navbox as containing [[hCard]] information about a person, for example, add the following parameter: <pre> | bodyclass = vcard </pre> ''and'' <pre> | titleclass = fn </pre> ''or'' (for example): <pre><nowiki> | title = The books of <span class="fn">[[Iain Banks]]</span> </nowiki></pre> ...and so forth. See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general. == Layout of table == ===Without image, above and below=== Table generated by {{tl|Navbox}} '''without''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only): {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | liststyle = background: silver; | title = {{{title}}} | group1 = {{{group1}}} | list1 = {{{list1}}} | group2 = {{{group2}}} | list2 = {{{list2}}} | list3 = {{{list3}}} ''without {{{group3}}}'' | group4 = {{{group4}}} | list4 = {{{list4}}} }} ===With image, above and below=== Table generated by {{tl|Navbox}} '''with''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only): {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | liststyle = background: silver; | image = {{{image}}} | title = {{{title}}} | above = {{{above}}} | group1 = {{{group1}}} | list1 = {{{list1}}} | group2 = {{{group2}}} | list2 = {{{list2}}} | list3 = {{{list3}}} ''without {{{group3}}}'' | group4 = {{{group4}}} | list4 = {{{list4}}} | below = {{{below}}} }} ===With image and without groups=== Table generated by {{tl|Navbox}} '''with''' ''image'', ''imageleft'', ''lists'', and '''without''' ''groups'', ''above'', ''below'' (gray list background color added for illustration only): {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | liststyle = background: silver; | image = {{{image}}} | imageleft = {{{imageleft}}} | title = {{{title}}} | list1 = {{{list1}}} | list2 = {{{list2}}} | list3 = {{{list3}}} | list4 = {{{list4}}} }} == Examples == <!-- Please do not encourage folks to use <div> within Navboxes as (unless handled carefully) they can negate liststyles/groupstyles/etc. settings. --> === No image === <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Navbox | name = Navbox/doc | title = [[MSC Malaysia]] | listclass = hlist | group1 = Centre | list1 = * [[Cyberjaya]] | group2 = Area | list2 = * [[Klang Valley]] | group3 = Major landmarks | list3 = * [[Petronas Twin Towers]] * [[Kuala Lumpur Tower]] * [[Kuala Lumpur Sentral]] * [[Technology Park Malaysia]] * [[Putrajaya]] * [[Cyberjaya]] * [[Kuala Lumpur International Airport]] | group4 = Infrastructure | list4 = * [[Express Rail Link]] * [[KL-KLIA Dedicated Expressway]] | group5 = Prime applications | list5 = * [[E-Government]] * [[MyKad]] }} </syntaxhighlight> {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | title = [[MSC Malaysia]] | listclass = hlist | group1 = Centre | list1 = * [[Cyberjaya]] | group2 = Area | list2 = * [[Klang Valley]] | group3 = Major landmarks | list3 = * [[Petronas Twin Towers]] * [[Kuala Lumpur Tower]] * [[Kuala Lumpur Sentral]] * [[Technology Park Malaysia]] * [[Putrajaya]] * [[Cyberjaya]] * [[Kuala Lumpur International Airport]] | group4 = Infrastructure | list4 = * [[Express Rail Link]] * [[KL-KLIA Dedicated Expressway]] | group5 = Prime applications | list5 = * [[E-Government]] * [[MyKad]] }} == Child navboxes == {{Selfref|For additional examples, see the [[Template:Navbox/testcases|Navbox testcases page]].}} It is possible to place multiple navboxes within a single border by using "child" as the first parameter, or by setting the ''border'' parameter. The basic code for doing this is as follows (which adds a subgroup for the first group/list area): <pre style="overflow: auto;"> {{Navbox | name = {{subst:PAGENAME}} | title = Title | group1 = [optional] | list1 = {{Navbox|child ...child navbox parameters... }} ... }} </pre> === Subgroups example === This example shows two subgroups created using <code>child</code> as the first unnamed parameter. The striping is alternated automatically. To remove the striping altogether, you can set <code>liststyle = background:transparent;</code> in each of the navboxes. {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | title = Multiple subgroup example | above = Above | below = Below | group1 = Group1 | list1 = List1 | group2 = Group2 | list2 = {{{{PAGENAMETDOC}}|child | group1 = Group2.1 | list1 = List1 | group2 = Group2.2 | list2 = List2 | group3 = Group2.3 | list3 = List3 }} | group3 = Group3 | list3 = List3 | group4 = Group4 | list4 = {{{{PAGENAMETDOC}}|child | group1 = Group4.1 | list1 = List1 | group2 = Group4.2 | list2 = List2 | group3 = Group4.3 | list3 = List3 }} }} === Multiple show/hides in a single container === {{main|Template:Navbox with collapsible groups}} The example below is generated using a regular navbox for the main container, then its list1, list2, and list3 parameters each contain another navbox, with <code>1 = child</code> set. The view (v), talk (t), edit (e) navbar links are hidden using <code>navbar = plain</code> for each of them, or could be suppressed by just leaving out the ''name'' parameter (child navboxes do not require the name parameter to be set, unlike regular navboxes). {{{{PAGENAMETDOC}} | name = Navbox/doc | title = [[French colonial empire|Former French overseas empire]] | state = uncollapsed | list1 = {{{{PAGENAMETDOC}}|child | navbar = plain | title = [[French colonial empire|Former French colonies]] in [[Africa]] and the [[Indian Ocean]] | listclass = hlist | group1 = [[Mahgreb]] | list1 = * [[French rule in Algeria|Algeria]] * [[French Morocco|Morocco]] <small>([[Arguin|Arguin Island]])</small> * [[History of Tunisia|Tunisia]] | group2 = [[French West Africa]] | list2 = * [[History of Côte d'Ivoire#French Period|Côte d'Ivoire]] * [[French Dahomey|Dahomey]] * [[French Sudan]] * [[French Guinea|Guinea]] * [[History of Mauritania#French colonization and post-colonial history|Mauritania]] * [[History of Niger#Colonization|Niger]] * [[History of Senegal|Senegal]] * [[French Upper Volta|Upper Volta]] * [[French Togoland]] * [[James Island (The Gambia)|James Island]] | group3 = [[French Equatorial Africa]] | list3 = * [[Colonial Chad|Chad]] * [[History of Gabon|Gabon]] * [[History of the Republic of the Congo|Middle Congo]] * [[Oubangui-Chari]] | group4 = [[Comoros]] | list4 = * [[Anjouan]] * [[Grande Comore]] * [[Mohéli]] * [[History of Djibouti#French Interest|French Somaliland (Djibouti)]] * [[History of Madagascar#French control|Madagascar]] * [[Mauritius|Ile de France]] * [[Seychelles]] }} | list2 = {{{{PAGENAMETDOC}}|child | navbar = plain | title = [[French colonial empire|Former French colonies]] in the [[Americas]] | listclass = hlist | list1 = * [[New France]]{{spaces|2}}<small>([[Acadia]], [[Louisiana (New France)|Louisiana]], [[Canada, New France|Canada]], [[Newfoundland (island)|Terre Neuve]]) 1655–1763 </small> | list2 = * [[Inini]] * [[Berbice]] * [[Saint-Domingue]] * <small>[[Haiti]]</small> * [[Tobago]] * [[History of the British Virgin Islands|Virgin Islands]] * [[France Antarctique]] * [[France Équinoxiale]] | below = [[French West India Company]] }} | list3 = {{{{PAGENAMETDOC}}|child | navbar = plain | title = [[French colonial empire|Former French colonies]] in [[Asia]] and [[Oceania]] | listclass = hlist | group1 = [[French India]] | list1 = * [[Chandernagor]] * [[Coromandel Coast]] * [[History of Chennai|Madras]] * [[Mahé, India|Mahé]] * [[History of Pondicherry|Pondichéry]] * [[Karaikal]] * [[Yanam (India)|Yanaon]] | group2 = [[French Indochina]] | list2 = * [[Colonial Cambodia|Cambodia]] * [[History of Laos to 1945#French Laos|Laos]] * [[French Indochina|Vietnam]] <small>([[Annam (French colony)|Annam]], [[Cochinchina]], [[Tonkin]])</small> | group3 = Other Asian | list3 = * [[Alawite State|Alaouites]] * [[Republic of Hatay|Alexandretta-Hatay]] * [[Sri Lanka|Ceylon]] * [[Kwangchowan]] | group4 = [[Oceania]] | list4 = * [[New Hebrides]] ** [[History of Vanuatu|Vanuatu]] | below = [[French East India Company]] }} }} == Relationship with other Navbox templates == This navbox template works in conjunction with two other templates: {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}. All three of these templates share common parameters for consistency and ease of use (such parameters are marked with an asterisk (*) in the [[#Parameter descriptions|parameter descriptions]] list hereinbefore). Most importantly, each template can be used as a child of one another (by using the {{para|border|child}} parameter, or by specifying the first unnamed parameter to be <code>child</code>. For example: <code><nowiki>{{Navbox|child ...}}</nowiki></code>, <code><nowiki>{{Navbox with columns|child ...}}</nowiki></code> or <code><nowiki>{{Navbox with collapsible groups|child ...}}</nowiki></code>.) == Technical details == * The {{navbar|1=:{{FULLPAGENAME}}|mini=on}} links are produced by [[Template:Navbar]]. If you have a question about them, it is probably best to ask at [[Template talk:Navbar]]. * The 2px wide border between groups and lists is drawn using the border-left property of the list cell. Thus, if you wish to change the background color of the template (for example <code>bodystyle = background:purple;</code>), then you'll need to make the border-left-color match the background color (i.e. <code>liststyle = border-left-color: purple;</code>). If you wish to have a border around each list cell, then the 2px border between the list cells and group cells will disappear; you'll have to come up with your own solution. * Adjacent navboxes have only a 1 pixel border between them. If you set the top or bottom margin of <code>style/bodystyle</code>, then this will not work. * The default margin-left and margin-right of the outer navbox table are set to "auto;". If you wish to use navbox as a float, you need to manually set the margin-left and margin-right values, because the auto margins interfere with the float option. For example, add the following code to use the navbox as a float: ** <code>bodystyle = width: 22em; float: right; margin-left: 1em; margin-right: 0;</code> === Copying to other projects or wikis === If you are trying to copy {{tlf|Navbox}} to your local wiki, there are several other things that must be installed or copied over as well: * The [[mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions must be installed. * [[Module:Navbox]] and its module and TemplateStyles dependencies, listed in the above two links * Optionally, the <code>Add support to mw-collapsible for autocollapse, innercollapse and outercollapse</code> script from [[MediaWiki:Common.js]] may be copied, if autocollapsing is desired. == TemplateData == {{TemplateDataHeader}} <templatedata> { "params": { "state": { "label": "State", "description": "Controls when a navbox is expanded or collapsed", "example": "autocollapse", "suggestedvalues": [ "autocollapse", "collapsed", "expanded", "plain", "off" ], "default": "autocollapse", "suggested": true }, "title": { "label": "Title", "description": "Text in the title bar; centered in the top row of the table. Usually the template's topic.", "example": "[[Widget stuff]]", "suggested": true }, "above": { "label": "Above", "description": "Full-width cell displayed between the titlebar and first group/list, i.e. above the template's body (groups, lists and image)", "type": "string", "suggested": true }, "image": { "label": "Image", "description": "Image to be displayed in a cell below the title and to the right of the body", "example": "[[File:XX.jpg | 80px | link= | alt= ]]", "type": "wiki-file-name", "suggested": true }, "group1": { "label": "Group 1", "description": "If specified, text appears in a header cell displayed to the left of list 1. If omitted, list 1 uses the full width of the table.", "suggested": true }, "list1": { "label": "List 1", "description": "Body of the template; usually a list of links. Format is inline. At least one list parameter is required; each additional list is displayed in a separate row of the table. Each listn may be preceded by a corresponding groupn parameter.\nEntries should be separated using a newline and an asterisk. If two asterisks are used, it provides nesting within the previous entry with brackets.", "required": true, "suggested": true }, "group2": { "suggested": true }, "list2": { "suggested": true }, "list3": { "suggested": true }, "group3": { "suggested": true }, "group4": {}, "list4": {}, "below": { "label": "Below", "description": "Full-width cell displayed below the template's body.", "suggested": true }, "imageleft": { "label": "Image left", "description": "Image to be displayed in a cell below the title and to the left of the body. For the image to display properly, list1 parameter must be specified and no groups can be specified.", "example": "[[File:XX.jpg | 80px | link= | alt= ]]", "type": "wiki-file-name" }, "name": { "label": "Name", "description": "The name of the template. Needed for \"View • Talk • Edit\" links to work properly.", "type": "string", "default": "{{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}}", "suggested": true }, "listclass": { "label": "List class", "description": "CSS class for the list cells, usually hlist for horizontal lists. Alternatively, use bodyclass for the whole box.", "example": "hlist", "type": "string" }, "navbar": { "label": "Navbar status", "example": "plain, off", "type": "string" }, "border": { "label": "Border status", "example": "child, subgroup, none", "type": "string" }, "bodystyle": {}, "basestyle": {}, "titlestyle": {}, "groupstyle": {}, "group1style": {}, "groupwidth": {}, "liststyle": {}, "list1style": {}, "listpadding": {}, "oddstyle": {}, "evenstyle": {}, "evenodd": { "suggestedvalues": [ "swap", "even", "odd", "off" ] }, "abovestyle": {}, "belowstyle": {}, "imagestyle": {}, "imageleftstyle": {} }, "description": "Creates a navigational box for links to other pages. \nDoes not display in mobile.", "paramOrder": [ "name", "title", "group1", "list1", "listclass", "state", "above", "below", "image", "group2", "list2", "group3", "list3", "group4", "list4", "imageleft", "navbar", "border", "bodystyle", "basestyle", "titlestyle", "groupstyle", "liststyle", "group1style", "list1style", "groupwidth", "listpadding", "oddstyle", "evenstyle", "evenodd", "abovestyle", "belowstyle", "imagestyle", "imageleftstyle" ] } </templatedata> == See also == * {{tl|Navboxes}} — groups several navigation boxes together. * {{tl|Nobold}} — To display text at normal font-weight within a context where the default font-weight is bold, e.g. header cells in tables. * {{tl|Sidebar}} — Vertically-aligned navigation templates. * [[Template:Navbox/testcases]] — For additional examples of template code. * [[Wikipedia:Line-break handling]] — The how-to guide about how to handle word wraps (line breaks) on Wikipedia, such as the wrapping of the link lists used in navboxes. * [[Wikipedia:Template documentation]] — Guideline to creating the accompanying documentation * {{tl|Nowrap begin}}, {{tl|·}} and {{tl|•}} are '''deprecated''' in favor of the <code>hlist</code> class for formatting lists. See [[Template:Flatlist#Technical details|Flatlist]] for a technical explanation of how <code>hlist</code> works. === Tracking categories === * {{clc|Navbox orphans}} * {{clc|Navigational boxes without horizontal lists}} * {{clc|Navboxes using background colours}} * {{clc|Potentially illegible navboxes}} * {{clc|Navboxes using borders}} {{Navigation templates}} <includeonly>{{sandbox other|| <!-- Add categories below this line, and interwikis at Wikidata --> [[Category:Navigational boxes| ]] [[Category:Templates generating microformats]] [[Category:Templates that are not mobile friendly]] [[Category:Wikipedia metatemplates]] [[Category:Collapse templates]] }}</includeonly> 9063bd1d64f66910446323fd0f80c3a65eea6e20 Module:Unicode data 828 238 700 2023-05-10T13:46:04Z wikipedia>Trappist the monk 0 +is_rtl_frame (frame) entry point to gain access to is_rtl (str) from an invoke; Scribunto text/plain local p = {} local floor = math.floor local function errorf(level, ...) if type(level) == "number" then return error(string.format(...), level + 1) else -- level is actually the format string. return error(string.format(level, ...), 2) end end local function binary_range_search(codepoint, ranges) local low, mid, high low, high = 1, ranges.length or require "Module:TableTools".length(ranges) while low <= high do mid = floor((low + high) / 2) local range = ranges[mid] if codepoint < range[1] then high = mid - 1 elseif codepoint <= range[2] then return range, mid else low = mid + 1 end end return nil, mid end p.binary_range_search = binary_range_search --[[ local function linear_range_search(codepoint, ranges) for i, range in ipairs(ranges) do if range[1] <= codepoint and codepoint <= range[2] then return range end end end --]] -- Load a module by indexing "loader" with the name of the module minus the -- "Module:Unicode data/" part. For instance, loader.blocks returns -- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be -- returned. local loader = setmetatable({}, { __index = function (self, key) local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key) if not success then data = false end self[key] = data return data end }) -- For the algorithm used to generate Hangul Syllable names, -- see "Hangul Syllable Name Generation" in section 3.12 of the -- Unicode Specification: -- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf local name_hooks = { { 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters { 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters { 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A { 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph { 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables local Hangul_data = loader.Hangul local syllable_index = codepoint - 0xAC00 return ("HANGUL SYLLABLE %s%s%s"):format( Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)], Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count) / Hangul_data.trail_count)], Hangul_data.trails[syllable_index % Hangul_data.trail_count] ) end }, -- High Surrogates, High Private Use Surrogates, Low Surrogates { 0xD800, 0xDFFF, "<surrogate-%04X>" }, { 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use -- CJK Compatibility Ideographs { 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0x17000, 0x187F7, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph { 0x18800, 0x18AFF, function (codepoint) return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF) end }, { 0x18D00, 0x18D08, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement { 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu { 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B { 0x2A700, 0x2B739, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C { 0x2B740, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension D { 0x2B820, 0x2CEA1, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E { 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F -- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane) { 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17) end}, { 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G { 0x31350, 0x323AF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H { 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use { 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use } name_hooks.length = #name_hooks local name_range_cache local function generate_name(data, codepoint) if type(data) == "string" then return data:format(codepoint) else return data(codepoint) end end --[[ -- Checks that the code point is a number and in range. -- Does not check whether code point is an integer. -- Not used local function check_codepoint(funcName, argIdx, val) require 'libraryUtil'.checkType(funcName, argIdx, val, 'number') if codepoint < 0 or 0x10FFFF < codepoint then errorf("Codepoint %04X out of range", codepoint) end end --]] -- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8 function p.lookup_name(codepoint) -- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned -- (Cn) and specifically noncharacters: -- https://www.unicode.org/faq/private_use.html#nonchar4 if 0xFDD0 <= codepoint and (codepoint <= 0xFDEF or floor(codepoint % 0x10000) >= 0xFFFE) then return ("<noncharacter-%04X>"):format(codepoint) end if name_range_cache -- Check if previously used "name hook" applies to this code point. and codepoint >= name_range_cache[1] and codepoint <= name_range_cache[2] then return generate_name(name_range_cache[3], codepoint) end local range = binary_range_search(codepoint, name_hooks) if range then name_range_cache = range return generate_name(range[3], codepoint) end local data = loader[('names/%03X'):format(codepoint / 0x1000)] if data and data[codepoint] then return data[codepoint] -- Unassigned (Cn) consists of noncharacters and reserved characters. -- The character has been established not to be a noncharacter, -- and if it were assigned, its name would already been retrieved, -- so it must be reserved. else return ("<reserved-%04X>"):format(codepoint) end end --[[ -- No image data modules on Wikipedia yet. function p.lookup_image(codepoint) local data = loader[('images/%03X'):format(codepoint / 0x1000)] if data then return data[codepoint] end end --]] local planes = { [ 0] = "Basic Multilingual Plane"; [ 1] = "Supplementary Multilingual Plane"; [ 2] = "Supplementary Ideographic Plane"; [ 3] = "Tertiary Ideographic Plane"; [14] = "Supplementary Special-purpose Plane"; [15] = "Supplementary Private Use Area-A"; [16] = "Supplementary Private Use Area-B"; } -- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable. local blocks local function block_iter(blocks, i) i = i + 1 local data = blocks[i] if data then -- Unpack doesn't work on tables loaded with mw.loadData. return i, data[1], data[2], data[3] end end -- An ipairs-type iterator generator for the list of blocks. function p.enum_blocks() local blocks = loader.blocks return block_iter, blocks, 0 end function p.lookup_plane(codepoint) local i = floor(codepoint / 0x10000) return planes[i] or ("Plane %u"):format(i) end function p.lookup_block(codepoint) local blocks = loader.blocks local range = binary_range_search(codepoint, blocks) if range then return range[3] else return "No Block" end end function p.get_block_info(name) for i, block in ipairs(loader.blocks) do if block[3] == name then return block end end end function p.is_valid_pagename(pagename) local has_nonws = false for cp in mw.ustring.gcodepoint(pagename) do if (cp == 0x0023) -- # or (cp == 0x005B) -- [ or (cp == 0x005D) -- ] or (cp == 0x007B) -- { or (cp == 0x007C) -- | or (cp == 0x007D) -- } or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block or (cp == 0xFFFD) -- REPLACEMENT CHARACTER then return false end local printable, result = p.is_printable(cp) if not printable then return false end if result ~= "space-separator" then has_nonws = true end end return has_nonws end local function manual_unpack(what, from) if what[from + 1] == nil then return what[from] end local result = {} from = from or 1 for i, item in ipairs(what) do if i >= from then table.insert(result, item) end end return unpack(result) end local function compare_ranges(range1, range2) return range1[1] < range2[1] end -- Creates a function to look up data in a module that contains "singles" (a -- code point-to-data map) and "ranges" (an array containing arrays that contain -- the low and high code points of a range and the data associated with that -- range). -- "loader" loads and returns the "singles" and "ranges" tables. -- "match_func" is passed the code point and either the data or the "dots", and -- generates the final result of the function. -- The varargs ("dots") describes the default data to be returned if there wasn't -- a match. -- In case the function is used more than once, "cache" saves ranges that have -- already been found to match, or a range whose data is the default if there -- was no match. local function memo_lookup(data_module_subpage, match_func, ...) local dots = { ... } local cache = {} local singles, ranges return function (codepoint) if not singles then local data_module = loader[data_module_subpage] singles, ranges = data_module.singles, data_module.ranges end if singles[codepoint] then return match_func(codepoint, singles[codepoint]) end local range = binary_range_search(codepoint, cache) if range then return match_func(codepoint, manual_unpack(range, 3)) end local range, index = binary_range_search(codepoint, ranges) if range then table.insert(cache, range) table.sort(cache, compare_ranges) return match_func(codepoint, manual_unpack(range, 3)) end if ranges[index] then local dots_range if codepoint > ranges[index][2] then dots_range = { ranges[index][2] + 1, ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF, unpack(dots) } else -- codepoint < range[index][1] dots_range = { ranges[index - 1] and ranges[index - 1][2] + 1 or 0, ranges[index][1] - 1, unpack(dots) } end table.sort(cache, compare_ranges) end return match_func(codepoint) end end -- Get a code point's combining class value in [[Module:Unicode data/combining]], -- and return whether this value is not zero. Zero is assigned as the default -- if the combining class value is not found in this data module. -- That is, return true if character is combining, or false if it is not. -- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for -- more information. p.is_combining = memo_lookup( "combining", function (codepoint, combining_class) return combining_class and combining_class ~= 0 or false end, 0) function p.add_dotted_circle(str) return (mw.ustring.gsub(str, ".", function(char) if p.is_combining(mw.ustring.codepoint(char)) then return '◌' .. char end end)) end local lookup_control = memo_lookup( "control", function (codepoint, ccc) return ccc or "assigned" end, "assigned") p.lookup_control = lookup_control function p.is_assigned(codepoint) return lookup_control(codepoint) ~= "unassigned" end function p.is_printable(codepoint) local result = lookup_control(codepoint) return (result == "assigned") or (result == "space-separator"), result end function p.is_whitespace(codepoint) local result = lookup_control(codepoint) return (result == "space-separator"), result end p.lookup_category = memo_lookup( "category", function (codepoint, category) return category end, "Cn") local lookup_script = memo_lookup( "scripts", function (codepoint, script_code) return script_code or 'Zzzz' end, "Zzzz") p.lookup_script = lookup_script function p.get_best_script(str) -- Check type of argument, because mw.text.decode coerces numbers to strings! require "libraryUtil".checkType("get_best_script", 1, str, "string") -- Convert HTML character references (including named character references, -- or character entities) to characters. str = mw.text.decode(str, true) local scripts = {} for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) -- Ignore "Inherited", "Undetermined", or "Uncoded" scripts. if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then scripts[script] = true end end -- If scripts does not contain two or more keys, -- return first and only key (script code) in table. if not next(scripts, next(scripts)) then return next(scripts) end -- else return majority script, or else "Zzzz"? end function p.is_Latin(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0340-U+10FFFF. If they are not found and there is at least -- one Latin-script character, the string counts as Latin, because the rest -- of the characters can only be Zyyy, Zinh, and Zzzz. -- The only scripts found below U+0370 (the first code point of the Greek -- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz. -- See the codepage in the [[UTF-8]] article. if not str:find "[\205-\244]" then for codepoint in mw.ustring.gcodepoint(str) do if lookup_script(codepoint) == "Latn" then return true end end end local Latn = false for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) if script == "Latn" then Latn = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false end end return Latn end -- Checks that a string contains only characters belonging to right-to-left -- scripts, or characters of ignorable scripts. function p.is_rtl(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0580-U+10FFFF. If they are not found, the string can only -- have characters from a left-to-right script, because the first code point -- in a right-to-left script is U+0591, in the Hebrew block. if not str:find "[\214-\244]" then return false end local result = false local rtl = loader.scripts.rtl for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) if rtl[script] then result = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false end end return result end --[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------ external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text has <br /> tags. ]] function p.is_rtl_frame (frame) local str = frame.args[1]; -- get the string from the {{#invoke:}} frame str = str:gsub ('%b<>', ''); -- strip any html and html-like tags return p.is_rtl (str); -- return if whatever remains rtl; false else end local function get_codepoint(args, arg) local codepoint_string = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) local codepoint = tonumber(codepoint_string, 16) or errorf(2, "Parameter %s is not a code point in hexadecimal base", tostring(arg)) if not (0 <= codepoint and codepoint <= 0x10FFFF) then errorf(2, "code point in parameter %s out of range", tostring(arg)) end return codepoint end local function get_func(args, arg, prefix) local suffix = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) suffix = mw.text.trim(suffix) local func_name = prefix .. suffix local func = p[func_name] or errorf(2, "There is no function '%s'", func_name) return func end -- This function allows any of the "lookup" functions to be invoked. The first -- parameter is the word after "lookup_"; the second parameter is the code point -- in hexadecimal base. function p.lookup(frame) local func = get_func(frame.args, 1, "lookup_") local codepoint = get_codepoint(frame.args, 2) local result = func(codepoint) if func == p.lookup_name then -- Prevent code point labels such as <control-0000> from being -- interpreted as HTML tags. result = result:gsub("<", "&lt;") end return result end function p.is(frame) local func = get_func(frame.args, 1, "is_") -- is_Latin and is_valid_pagename take strings. if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then return (func(frame.args[2])) else -- The rest take code points. local codepoint = get_codepoint(frame.args, 2) return (func(codepoint)) -- Adjust to one result. end end return p 444a6cd03f4361fb8aa2439f5f5f5dc1f1a4dd59 Template:As of 10 102 220 2023-05-18T21:22:11Z wikipedia>Sdkb 0 Adding {{yesno}} to make {{{since}}} and {{{lc}}} variables case-insensitive, per [[WP:SILENTCONSENSUS|silent]] consensus [[Template_talk:As_of/Archive_1#Yesno?|at talk]] wikitext text/x-wiki <!--{{As of}} begin--><includeonly><!-- ## param 1 is the year ## optional param 2 is the month ## optional param 3 is the day of the month ## optional named parameter alt=[text] is alternative display text (may include wiki markup) ## optional named parameter df=US produces American date format in displayed text ## optional named parameter lc=on gives lower-case-first output ## optional named parameter url=[URL] gives statement reference ## displayed text ([A/a]s of [Start date] by default) -->{{#if: {{{alt|}}} | {{{alt}}} | {{#if:{{{bare|}}}||{{#if:{{yesno|{{{since|}}}}}|{{#if: {{yesno|{{{lc|}}}}} | s | S }}ince | {{#if: {{yesno|{{{lc|}}}}} | a | A }}s of}}}} {{#if:{{{pre|}}}|{{{pre}}}&#32;}}{{#if: {{{3|}}} | {{#ifeq:{{lc:{{{df|}}}}}|us|{{MONTHNAME|{{{2}}}}}&nbsp;{{#expr:{{{3}}}}},&#32;|{{#expr:{{{3}}}}}&nbsp;{{MONTHNAME|{{{2}}}}}&nbsp;}}{{{1}}}|{{#if: {{{2|}}} |{{MONTHNAME|{{{2}}}}}&nbsp;}}{{{1}}}}}}}{{#if:{{{post|}}}|<nowiki />{{{post}}}}}<!-- #### That nowiki is required or, various characters (:, ;, #, and *} will be parsed as wikisyntax for list items. ## ref/update inline banner (hidden by default) --><sup class="plainlinks noexcerpt noprint asof-tag {{#if:{{{url|}}}|ref|update}}" style="display:none;">[{{#if:{{{url|}}}|{{{url}}} &#91;ref&#93;|{{fullurl:{{PAGENAME}}|action=edit}} &#91;update&#93;}}]</sup><!-- ## categorisation disabled outside main namespace -->{{DMCA|Articles containing potentially dated statements|from|<!-- ## temporal category for template (word method) -->{{#if: {{#ifexpr: {{{1}}} = 1 }} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 2004 | {{{1}}} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 1989 | {{#time:Y|{{{1}}}}} | before 1990 }}}} | <!-- ## temporal category for template (parameter method) -->{{#ifexpr: {{{1}}} > 2004 | {{#if:{{{2|}}} | {{MONTHNAME|{{{2}}}}} }} {{{1}}} | {{#ifexpr:{{{1}}} > 1989 | {{{1}}} | before 1990 }}}}}}|<!-- ## global category for template -->All articles containing potentially dated statements}}</includeonly><!--{{As of}} end--><noinclude><!-- ## dynamic example (as of today, self ref) -->{{As of|{{CURRENTYEAR}}|{{CURRENTMONTH}}|{{CURRENTDAY}}}}<sup class="plainlinks">[https://en.wikipedia.org/wiki/Template:As_of &#91;ref&#93;]</sup> {{documentation}} <!-- Add categories and inter-wikis to the /doc subpage, not here! --> </noinclude>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using as of template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:As of]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | alt | bare | df | lc | post | pre | since | url }} dd0794e75a86855d0ccc649adeaa8be5d3c3c704 Module:TNT 828 27 403 53 2023-05-20T18:33:54Z meta>Dmehus 0 Undid revision 335077 by [[Special:Contributions/Dmehus|Dmehus]] ([[User talk:Dmehus|talk]]) Revert. Did not fix it Scribunto text/plain -- -- INTRO: (!!! DO NOT RENAME THIS PAGE !!!) -- This module allows any template or module to be copy/pasted between -- wikis without any translation changes. All translation text is stored -- in the global Data:*.tab pages on Commons, and used everywhere. -- -- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- ATTENTION: -- Please do NOT rename this module - it has to be identical on all wikis. -- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT -- Please do not modify it anywhere else, as it may get copied and override your changes. -- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT -- -- DESCRIPTION: -- The "msg" function uses a Commons dataset to translate a message -- with a given key (e.g. source-table), plus optional arguments -- to the wiki markup in the current content language. -- Use lang=xx to set language. Example: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- uses a translation message with id = "source-table" --> -- | param1 }} <!-- optional parameter --> -- -- -- The "doc" function will generate the <templatedata> parameter documentation for templates. -- This way all template parameters can be stored and localized in a single Commons dataset. -- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab -- if the current page is Template:Graph:Lines/doc -- local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Forward declaration of the local functions local sanitizeDataset, loadData, link, formatMessage function p.msg(frame) local dataset, id local params = {} local lang = nil for k, v in pairs(frame.args) do if k == 1 then dataset = mw.text.trim(v) elseif k == 2 then id = mw.text.trim(v) elseif type(k) == 'number' then params[k - 2] = mw.text.trim(v) elseif k == 'lang' and v ~= '_' then lang = mw.text.trim(v) end end return formatMessage(dataset, id, params, lang) end -- Identical to p.msg() above, but used from other lua modules -- Parameters: name of dataset, message key, optional arguments -- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.format(dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('format', 1, dataset, 'string') checkType('format', 2, key, 'string') return formatMessage(dataset, key, {...}) end -- Identical to p.msg() above, but used from other lua modules with the language param -- Parameters: language code, name of dataset, message key, optional arguments -- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.formatInLanguage(lang, dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('formatInLanguage', 1, lang, 'string') checkType('formatInLanguage', 2, dataset, 'string') checkType('formatInLanguage', 3, key, 'string') return formatMessage(dataset, key, {...}, lang) end -- Obsolete function that adds a 'c:' prefix to the first param. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' function p.link(frame) return link(frame.args[1]) end function p.doc(frame) local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1]) return frame:extensionTag('templatedata', p.getTemplateData(dataset)) .. formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) end function p.getTemplateData(dataset) -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages local data = loadData(dataset) local names = {} for _, field in ipairs(data.schema.fields) do table.insert(names, field.name) end local params = {} local paramOrder = {} for _, row in ipairs(data.data) do local newVal = {} local name = nil for pos, columnName in ipairs(names) do if columnName == 'name' then name = row[pos] else newVal[columnName] = row[pos] end end if name then params[name] = newVal table.insert(paramOrder, name) end end -- Work around json encoding treating {"1":{...}} as an [{...}] params['zzz123']='' local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description }) json = string.gsub(json,'"zzz123":"",?', "") return json end -- Local functions sanitizeDataset = function(dataset) if not dataset then return nil end dataset = mw.text.trim(dataset) if dataset == '' then return nil elseif string.sub(dataset,-4) ~= '.tab' then return dataset .. '.tab' else return dataset end end loadData = function(dataset, lang) dataset = sanitizeDataset(dataset) if not dataset then error(formatMessage(i18nDataset, 'error_no_dataset', {})) end -- Give helpful error to thirdparties who try and copy this module. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error('Missing JsonConfig extension; Cannot load https://commons.wikimedia.org/wiki/Data:' .. dataset) end local data = mw.ext.data.get(dataset, lang) if data == false then if dataset == i18nDataset then -- Prevent cyclical calls error('Missing Commons dataset ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) end end return data end -- Given a dataset name, convert it to a title with the 'commons:data:' prefix link = function(dataset) return 'c:Data:' .. mw.text.trim(dataset or '') end formatMessage = function(dataset, key, params, lang) for _, row in pairs(loadData(dataset, lang).data) do local id, msg = unpack(row) if id == key then local result = mw.message.newRawMessage(msg, unpack(params or {})) return result:plain() end end if dataset == i18nDataset then -- Prevent cyclical calls error('Invalid message key "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end return p 2c570369c78089aef29c72768918373f61b7075d Template:Documentation/doc 10 162 371 2023-05-21T19:33:27Z wikipedia>WOSlinker 0 syntaxhighlight lang="wikitext" wikitext text/x-wiki <noinclude>{{pp-semi-indef}} </noinclude>{{Distinguish|Template:Documentation subpage}} {{Documentation subpage}} {{template shortcut|doc}} {{High-use}} {{Lua|Module:Documentation}} {{Never substitute}} The {{tlx|documentation}} template is used to contain the [[WP:TDOC|documented information and instructions]] of a certain template, usually from a /doc subpage. It can also be configured to load the content from other pages or be directly fed by text. For detailed instructions on how and when to use this template, see [[Wikipedia:Template documentation]] (shortcut: [[WP:TDOC]]). This template has two parts: the big "documentation box" with the documentation inside alongside a toolbar (the <code>[view][edit][hist][purge]</code> links), and the smaller "link box" that shows metadata about the documentation alongside the [[Wikipedia:Template sandbox and test cases|sandbox and testcases]] links. Use of this template allows templates to be [[Wikipedia:Protection policy|protected]], where necessary, while allowing anyone to edit the documentation and categories. == General syntax == Normally, the template is used without parameters and is placed inside {{tag|noinclude}} at the bottom of the template page (see {{section link|#Placement and tags}} for more information): <syntaxhighlight lang="wikitext"> <!--Last line of your template code--><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage --> </noinclude> </syntaxhighlight> === Transcluding a different page === To transclude a different page other than the /doc subpage, simply provide {{para|1}} like this: <syntaxhighlight lang="wikitext"> <!--Last line of your template code--><noinclude> {{Documentation|Template:Other page/doc}} </noinclude> </syntaxhighlight> Note that when loading the documentation from a page other than the local /doc subpage, it becomes tricky to handle the categories. === Using the {{para|content}} parameter === The documentation can also be fed directly as text, by using the {{para|content}} parameter: <syntaxhighlight lang="wikitext"> <!--Last line of your template code--><noinclude> {{Documentation | content = <!-- template documentation --> }}</noinclude> </syntaxhighlight> When using this parameter, the toolbar will not show. Note that the /doc subpage in the link box will still show up if it exists. Also note that when {{para|1}} and {{para|content}} is specified, {{para|content}} takes precedence and always shows in the documentation box. == Advanced syntax == === Customizing the heading === The heading in the documentation box changes depending on namespace. See the below list for the default text in each namespace: * Template namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Template documentation''' * Module namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Module documentation''' * Other namespaces: '''Documentation''' To customize the heading, simply set the parameter {{para|heading}} to anything you like, for example {{para|heading|Infobox documentation}}. Note that if the heading parameter is empty but defined (like {{para|heading|}}) the heading alongside the toolbar will not show. The {{para|heading-style}} parameter can be fed optional [[Cascading Style Sheets|CSS]] values, like {{para|heading-style|font-size:150%;color:red;}}. Not that you should omit quotation marks <code>" "</code> and add the ending semicolon <code>;</code>. === Customizing the link box === To customize the link box, simply set {{para|link box}} to something else, like {{para|link box|The above documentation is automatically generated from [[Template:Foo]]}}. To hide the link box, simply set {{para|link box}} to <code>off</code>. === Testing === You can simulate the output for a given page by using the {{para|page}} parameter. For example, if you use the code {{para|page|Template:Edit protected}}, the template will behave exactly as if it were on the page [[Template:Edit protected]], including showing the documentation from [[Template:Edit protected/doc]], linking to [[Template:Edit protected/sandbox]], etc. This parameter is useful for testing and is used extensively on the [[Module:Documentation/testcases|module testcases page]]. == Placement and tags == {{Further information|Wikipedia:Template documentation#Where to place it}} This code should be added at the bottom of the template code page, with no space before {{Tag|noinclude|o}} (which causes extra whitespace to show on pages where the template is transcluded): <syntaxhighlight lang="wikitext"><!--Last line of your template code--><noinclude> {{documentation}} <!-- Add categories to the /doc subpage --> </noinclude></syntaxhighlight> To automatically insert the above text, you can also use the [[Wikipedia:Substitution|substitution]] code shortcut {{tlxs|doc-code}}. === Categories and interwikis === Depending on where to the documentation is placed, it may be tricky to handle the categories and interwikis. See {{section link|Wikipedia:Template documentation#Categories and interwiki links}} for information about adding these. == Technical details == === Automatic functions === If the documentation page does not exist, the toolbar is replaced with a <code>[create]</code> link. It automatically [[mw:Manual:Creating pages with preloaded text|creates the page with preloaded text]] with the basic documentation syntax. Preload text is also used for the /sandbox and /testcases [create] links. The preload page for the /doc <code>[create]</code> link is [[Template:Documentation/preload]]. The preload pages for the /sandbox and /testcases links are [[Template:Documentation/preload-sandbox]] and [[Template:Documentation/preload-testcases]]. The preload page for the /sandbox <code>[mirror]</code> link is [[Template:Documentation/mirror]]. This template also automatically adds {{tl|pp-template}} to a protected template page, so no need to manually add this template to protected pages. When this template is on a /sandbox subpage it automatically adds the {{tl|Template sandbox notice}} template. === Link box features === Depending on the namespace, the link box may have less features, or may not show up at all. The following table shows this: {| class="wikitable" ! Namespace ! Behavior |- | Template | Full behavior |- | Module | Full behavior, with the addition of a "create documentation" link when the page does not exist |- | User | Full behavior |- | Other namespaces | Hidden, unless {{para|1}} is specified (which will show "The above documentation is transcluded from {{param|1}}") |} Alongside that, if {{para|1}} or {{para|content}} is specified, the "Add categories to the /doc subpage" will not show. === Subject namespaces vs. talk namespaces === This template is usually placed in the [[WP:NS#Subject namespaces|subject namespace]]. But in some cases this template needs to be on the [[WP:TALKSPACE|Talk namespace]]: * In the MediaWiki namespace, since {{tag|noinclude|o}} often does not work in system messages, and since the MediaWiki namespace needs to be kept clean for performance reasons. When placed on talk pages, this template usually is placed near the top of the page and without {{tag|noinclude}} tags. The /doc, /sandbox and /testcases pages should normally be in the subject namespace, except in the namespaces that do not have the MediaWiki [[meta:Help:Link#Subpage feature|subpage feature]] enabled: Main, File, and MediaWiki. (Categories can have subpages, but documentation is created in the Category talk namespace to prevent creating empty categories. There are also a whole bunch of other technical reasons why the /doc page must be stored under the talk page for those (but only those) namespaces. This template automatically points its [create] links for the /doc, /sandbox and /testcases to the right namespace. == Full syntax == <syntaxhighlight lang="wikitext"> {{Documentation}} or {{Documentation | [path to documentation page] }} {{Documentation | content = }} or {{Documentation | [path to documentation page] | heading-style = | heading = | link box = }} or {{Documentation | [path to documentation page] | content = | heading-style = | heading = | link box = | page = }} </syntaxhighlight> === Color scheme === {| class="wikitable" style="font-size:90%" |+ Wikipedia background colors for {{Template link|documentation}} <small>([[Help:Using colors]])</small> ! !! RGB !! HSV !! Color !! General usage !! Note |- | A&nbsp; | <kbd>#ECFCF4</kbd> || 150&deg;, 6%, 99% | style="background:#ECFCF4" | &nbsp; | Sample || Current documentation background |- | B | <kbd>#00FF80</kbd> | style="font-size:90%;" | {{nowrap|1=Hue=150&deg; <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}} | style="background:#00FF80" | &nbsp; | Basic hue || What we'd call ''the color'' |- | colspan="6" | |- | 1 | <kbd>#A3BFB1</kbd> || 150&deg;, 15%, 75% | style="background:#A3BFB1" | &nbsp; | Header border only || |- | 2 | <kbd>#CEF2E0</kbd> || 150&deg;, 15%, 95% | style="background:#CEF2E0" | &nbsp; | Main&nbsp;border; header&nbsp;background || |- | 3 | <kbd>#E6FFF2</kbd> || 150&deg;, 10%, 100% | style="background:#E6FFF2" | &nbsp; | 2nd header, accent colour || |- | 4 | <kbd>#F5FFFA</kbd> || 150&deg;, 4%, 100% | style="background:#F5FFFA" | &nbsp; | Main background || So saturation in A is a bit off |} {{collapse top|title=Colors for documentation navbox}} As a suggestion, here are colors for a navbox intended for documentation pages only. They follow the shading of regular blue navbox colors: <syntaxhighlight lang="wikitext"> | titlestyle = background:#ccffe5 | basestyle = background:#ddffee <!-- basestyle= sets groupstyle, abovestyle, belowstyle together --> </syntaxhighlight> For subgroups, in child navboxes: <syntaxhighlight lang="wikitext"> {{Navbox|child | groupstyle = background:#e6fff2 ... </syntaxhighlight> Example:{{Template link expanded|Periodic table templates}} {{collapse bottom}} ==See also== * {{tl|Documentation subpage}}, a notice placed at the top of a /doc subpage explaining its role and including a link to the page it documents. * {{tl|Barnstar documentation}}, a variant of {{tl|Documentation}} for use with [[Wikipedia:Barnstars|barnstar]] templates. * [[Wikipedia:Template documentation]] is a how-to guide to template documentation. * [[Wikipedia:Template sandbox and test cases]] explains the use of /sandbox and /testcases subpages and includes more information about template testing. <includeonly><!-- Make sure that only page [[Template:Documentation]] is categorised. No other page (no subpages, not when transcluded). -->{{#ifeq:{{FULLPAGENAME}}|Template:Documentation| [[Category:Template documentation| ]] [[Category:Template namespace templates|Documentation]] }}</includeonly> 431959208b67db006bc22ce92572aa643072c326 Module:Navbox 828 94 204 2023-05-28T13:26:56Z wikipedia>Uzume 0 strict Scribunto text/plain require('strict') local p = {} local navbar = require('Module:Navbar')._navbar local cfg = mw.loadData('Module:Navbox/configuration') local getArgs -- lazily initialized local args local format = string.format local function striped(wikitext, border) -- Return wikitext with markers replaced for odd/even striping. -- Child (subgroup) navboxes are flagged with a category that is removed -- by parent navboxes. The result is that the category shows all pages -- where a child navbox is not contained in a parent navbox. local orphanCat = cfg.category.orphan if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then -- No change; striping occurs in outermost navbox. return wikitext .. orphanCat end local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part if args[cfg.arg.evenodd] then if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then first, second = second, first else first = args[cfg.arg.evenodd] second = first end end local changer if first == second then changer = first else local index = 0 changer = function (code) if code == '0' then -- Current occurrence is for a group before a nested table. -- Set it to first as a valid although pointless class. -- The next occurrence will be the first row after a title -- in a subgroup and will also be first. index = 0 return first end index = index + 1 return index % 2 == 1 and first or second end end local regex = orphanCat:gsub('([%[%]])', '%%%1') return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count end local function processItem(item, nowrapitems) if item:sub(1, 2) == '{|' then -- Applying nowrap to lines in a table does not make sense. -- Add newlines to compensate for trim of x in |parm=x in a template. return '\n' .. item ..'\n' end if nowrapitems == cfg.keyword.nowrapitems_yes then local lines = {} for line in (item .. '\n'):gmatch('([^\n]*)\n') do local prefix, content = line:match('^([*:;#]+)%s*(.*)') if prefix and not content:match(cfg.pattern.nowrap) then line = format(cfg.nowrap_item, prefix, content) end table.insert(lines, line) end item = table.concat(lines, '\n') end if item:match('^[*:;#]') then return '\n' .. item ..'\n' end return item end local function has_navbar() return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain and ( args[cfg.arg.name] or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '') ~= cfg.pattern.navbox ) end local function renderNavBar(titleCell) if has_navbar() then titleCell:wikitext(navbar{ [cfg.navbar.name] = args[cfg.arg.name], [cfg.navbar.mini] = 1, [cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' .. (args[cfg.arg.titlestyle] or '') .. ';background:none transparent;border:none;box-shadow:none;padding:0;' }) end end local function renderTitleRow(tbl) if not args[cfg.arg.title] then return end local titleRow = tbl:tag('tr') local titleCell = titleRow:tag('th'):attr('scope', 'col') local titleColspan = 2 if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end if args[cfg.arg.image] then titleColspan = titleColspan + 1 end titleCell :cssText(args[cfg.arg.basestyle]) :cssText(args[cfg.arg.titlestyle]) :addClass(cfg.class.navbox_title) :attr('colspan', titleColspan) renderNavBar(titleCell) titleCell :tag('div') -- id for aria-labelledby attribute :attr('id', mw.uri.anchorEncode(args[cfg.arg.title])) :addClass(args[cfg.arg.titleclass]) :css('font-size', '114%') :css('margin', '0 4em') :wikitext(processItem(args[cfg.arg.title])) end local function getAboveBelowColspan() local ret = 2 if args[cfg.arg.imageleft] then ret = ret + 1 end if args[cfg.arg.image] then ret = ret + 1 end return ret end local function renderAboveRow(tbl) if not args[cfg.arg.above] then return end tbl:tag('tr') :tag('td') :addClass(cfg.class.navbox_abovebelow) :addClass(args[cfg.arg.aboveclass]) :cssText(args[cfg.arg.basestyle]) :cssText(args[cfg.arg.abovestyle]) :attr('colspan', getAboveBelowColspan()) :tag('div') -- id for aria-labelledby attribute, if no title :attr('id', (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil) :wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems])) end local function renderBelowRow(tbl) if not args[cfg.arg.below] then return end tbl:tag('tr') :tag('td') :addClass(cfg.class.navbox_abovebelow) :addClass(args[cfg.arg.belowclass]) :cssText(args[cfg.arg.basestyle]) :cssText(args[cfg.arg.belowstyle]) :attr('colspan', getAboveBelowColspan()) :tag('div') :wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems])) end local function renderListRow(tbl, index, listnum, listnums_size) local row = tbl:tag('tr') if index == 1 and args[cfg.arg.imageleft] then row :tag('td') :addClass(cfg.class.noviewer) :addClass(cfg.class.navbox_image) :addClass(args[cfg.arg.imageclass]) :css('width', '1px') -- Minimize width :css('padding', '0 2px 0 0') :cssText(args[cfg.arg.imageleftstyle]) :attr('rowspan', listnums_size) :tag('div') :wikitext(processItem(args[cfg.arg.imageleft])) end local group_and_num = format(cfg.arg.group_and_num, listnum) local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum) if args[group_and_num] then local groupCell = row:tag('th') -- id for aria-labelledby attribute, if lone group with no title or above if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then groupCell :attr('id', mw.uri.anchorEncode(args[cfg.arg.group1])) end groupCell :attr('scope', 'row') :addClass(cfg.class.navbox_group) :addClass(args[cfg.arg.groupclass]) :cssText(args[cfg.arg.basestyle]) -- If groupwidth not specified, minimize width :css('width', args[cfg.arg.groupwidth] or '1%') groupCell :cssText(args[cfg.arg.groupstyle]) :cssText(args[groupstyle_and_num]) :wikitext(args[group_and_num]) end local listCell = row:tag('td') if args[group_and_num] then listCell :addClass(cfg.class.navbox_list_with_group) else listCell:attr('colspan', 2) end if not args[cfg.arg.groupwidth] then listCell:css('width', '100%') end local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing if index % 2 == 1 then rowstyle = args[cfg.arg.oddstyle] else rowstyle = args[cfg.arg.evenstyle] end local list_and_num = format(cfg.arg.list_and_num, listnum) local listText = args[list_and_num] local oddEven = cfg.marker.oddeven if listText:sub(1, 12) == '</div><table' then -- Assume list text is for a subgroup navbox so no automatic striping for this row. oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part end local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum) local listclass_and_num = format(cfg.arg.listclass_and_num, listnum) listCell :css('padding', '0') :cssText(args[cfg.arg.liststyle]) :cssText(rowstyle) :cssText(args[liststyle_and_num]) :addClass(cfg.class.navbox_list) :addClass(cfg.class.navbox_part .. oddEven) :addClass(args[cfg.arg.listclass]) :addClass(args[listclass_and_num]) :tag('div') :css('padding', (index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em' ) :wikitext(processItem(listText, args[cfg.arg.nowrapitems])) if index == 1 and args[cfg.arg.image] then row :tag('td') :addClass(cfg.class.noviewer) :addClass(cfg.class.navbox_image) :addClass(args[cfg.arg.imageclass]) :css('width', '1px') -- Minimize width :css('padding', '0 0 0 2px') :cssText(args[cfg.arg.imagestyle]) :attr('rowspan', listnums_size) :tag('div') :wikitext(processItem(args[cfg.arg.image])) end end local function has_list_class(htmlclass) local patterns = { '^' .. htmlclass .. '$', '%s' .. htmlclass .. '$', '^' .. htmlclass .. '%s', '%s' .. htmlclass .. '%s' } for arg, _ in pairs(args) do if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then for _, pattern in ipairs(patterns) do if mw.ustring.find(args[arg] or '', pattern) then return true end end end end return false end -- there are a lot of list classes in the wild, so we add their TemplateStyles local function add_list_styles() local frame = mw.getCurrentFrame() local function add_list_templatestyles(htmlclass, templatestyles) if has_list_class(htmlclass) then return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } else return '' end end local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles) local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles) -- a second workaround for [[phab:T303378]] -- when that issue is fixed, we can actually use has_navbar not to emit the -- tag here if we want if has_navbar() and hlist_styles == '' then hlist_styles = frame:extensionTag{ name = 'templatestyles', args = { src = cfg.hlist_templatestyles } } end -- hlist -> plainlist is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because most navboxes will emit only -- one of these classes [hlist_note] return hlist_styles .. plainlist_styles end local function needsHorizontalLists(border) if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then return false end return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist) end local function hasBackgroundColors() for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle, cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do if tostring(args[key]):find('background', 1, true) then return true end end return false end local function hasBorders() for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do if tostring(args[key]):find('border', 1, true) then return true end end return false end local function isIllegible() local styleratio = require('Module:Color contrast')._styleratio for key, style in pairs(args) do if tostring(key):match(cfg.pattern.style) then if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then return true end end end return false end local function getTrackingCategories(border) local cats = {} if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end if isIllegible() then table.insert(cats, cfg.category.illegible) end if hasBorders() then table.insert(cats, cfg.category.borders) end return cats end local function renderTrackingCategories(builder, border) local title = mw.title.getCurrentTitle() if title.namespace ~= 10 then return end -- not in template space local subpage = title.subpageText if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox or subpage == cfg.keyword.subpage_testcases then return end for _, cat in ipairs(getTrackingCategories(border)) do builder:wikitext('[[Category:' .. cat .. ']]') end end local function renderMainTable(border, listnums) local tbl = mw.html.create('table') :addClass(cfg.class.nowraplinks) :addClass(args[cfg.arg.bodyclass]) local state = args[cfg.arg.state] if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then if state == cfg.keyword.state_collapsed then state = cfg.class.collapsed end tbl :addClass(cfg.class.collapsible) :addClass(state or cfg.class.autocollapse) end tbl:css('border-spacing', 0) if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then tbl :addClass(cfg.class.navbox_subgroup) :cssText(args[cfg.arg.bodystyle]) :cssText(args[cfg.arg.style]) else -- regular navbox - bodystyle and style will be applied to the wrapper table tbl :addClass(cfg.class.navbox_inner) :css('background', 'transparent') :css('color', 'inherit') end tbl:cssText(args[cfg.arg.innerstyle]) renderTitleRow(tbl) renderAboveRow(tbl) local listnums_size = #listnums for i, listnum in ipairs(listnums) do renderListRow(tbl, i, listnum, listnums_size) end renderBelowRow(tbl) return tbl end local function add_navbox_styles(hiding_templatestyles) local frame = mw.getCurrentFrame() -- This is a lambda so that it doesn't need the frame as a parameter local function add_user_styles(templatestyles) if templatestyles and templatestyles ~= '' then return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } end return '' end -- get templatestyles. load base from config so that Lua only needs to do -- the work once of parser tag expansion local base_templatestyles = cfg.templatestyles local templatestyles = add_user_styles(args[cfg.arg.templatestyles]) local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles]) -- The 'navbox-styles' div exists to wrap the styles to work around T200206 -- more elegantly. Instead of combinatorial rules, this ends up being linear -- number of CSS rules. return mw.html.create('div') :addClass(cfg.class.navbox_styles) :wikitext( add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles' base_templatestyles .. templatestyles .. child_templatestyles .. table.concat(hiding_templatestyles) ) :done() end -- work around [[phab:T303378]] -- for each arg: find all the templatestyles strip markers, insert them into a -- table. then remove all templatestyles markers from the arg local function move_hiding_templatestyles(args) local gfind = string.gfind local gsub = string.gsub local templatestyles_markers = {} local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)' for k, arg in pairs(args) do for marker in gfind(arg, strip_marker_pattern) do table.insert(templatestyles_markers, marker) end args[k] = gsub(arg, strip_marker_pattern, '') end return templatestyles_markers end function p._navbox(navboxArgs) args = navboxArgs local hiding_templatestyles = move_hiding_templatestyles(args) local listnums = {} for k, _ in pairs(args) do if type(k) == 'string' then local listnum = k:match(cfg.pattern.listnum) if listnum then table.insert(listnums, tonumber(listnum)) end end end table.sort(listnums) local border = mw.text.trim(args[cfg.arg.border] or args[1] or '') if border == cfg.keyword.border_child then border = cfg.keyword.border_subgroup end -- render the main body of the navbox local tbl = renderMainTable(border, listnums) local res = mw.html.create() -- render the appropriate wrapper for the navbox, based on the border param if border == cfg.keyword.border_none then res:node(add_navbox_styles(hiding_templatestyles)) local nav = res:tag('div') :attr('role', 'navigation') :node(tbl) -- aria-labelledby title, otherwise above, otherwise lone group if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then nav:attr( 'aria-labelledby', mw.uri.anchorEncode( args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1] ) ) else nav:attr('aria-label', cfg.aria_label) end elseif border == cfg.keyword.border_subgroup then -- We assume that this navbox is being rendered in a list cell of a -- parent navbox, and is therefore inside a div with padding:0em 0.25em. -- We start with a </div> to avoid the padding being applied, and at the -- end add a <div> to balance out the parent's </div> res :wikitext('</div>') :node(tbl) :wikitext('<div>') else res:node(add_navbox_styles(hiding_templatestyles)) local nav = res:tag('div') :attr('role', 'navigation') :addClass(cfg.class.navbox) :addClass(args[cfg.arg.navboxclass]) :cssText(args[cfg.arg.bodystyle]) :cssText(args[cfg.arg.style]) :css('padding', '3px') :node(tbl) -- aria-labelledby title, otherwise above, otherwise lone group if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then nav:attr( 'aria-labelledby', mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]) ) else nav:attr('aria-label', cfg.aria_label) end end if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then renderTrackingCategories(res, border) end return striped(tostring(res), border) end function p.navbox(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end args = getArgs(frame, {wrappers = {cfg.pattern.navbox}}) -- Read the arguments in the order they'll be output in, to make references -- number in the right order. local _ _ = args[cfg.arg.title] _ = args[cfg.arg.above] -- Limit this to 20 as covering 'most' cases (that's a SWAG) and because -- iterator approach won't work here for i = 1, 20 do _ = args[format(cfg.arg.group_and_num, i)] _ = args[format(cfg.arg.list_and_num, i)] end _ = args[cfg.arg.below] return p._navbox(args) end return p 05be9a97c035ab3f0fac69423779e261949d473c Module:Language/data/iana languages 828 240 704 2023-05-28T16:32:43Z wikipedia>Trappist the monk 0 update to 2023-05-11 data; Scribunto text/plain -- File-Date: 2023-05-11 local active = { ["aa"] = {"Afar"}, ["ab"] = {"Abkhazian"}, ["ae"] = {"Avestan"}, ["af"] = {"Afrikaans"}, ["ak"] = {"Akan"}, ["am"] = {"Amharic"}, ["an"] = {"Aragonese"}, ["ar"] = {"Arabic"}, ["as"] = {"Assamese"}, ["av"] = {"Avaric"}, ["ay"] = {"Aymara"}, ["az"] = {"Azerbaijani"}, ["ba"] = {"Bashkir"}, ["be"] = {"Belarusian"}, ["bg"] = {"Bulgarian"}, ["bh"] = {"Bihari languages"}, ["bi"] = {"Bislama"}, ["bm"] = {"Bambara"}, ["bn"] = {"Bengali", "Bangla"}, ["bo"] = {"Tibetan"}, ["br"] = {"Breton"}, ["bs"] = {"Bosnian"}, ["ca"] = {"Catalan", "Valencian"}, ["ce"] = {"Chechen"}, ["ch"] = {"Chamorro"}, ["co"] = {"Corsican"}, ["cr"] = {"Cree"}, ["cs"] = {"Czech"}, ["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"}, ["cv"] = {"Chuvash"}, ["cy"] = {"Welsh"}, ["da"] = {"Danish"}, ["de"] = {"German"}, ["dv"] = {"Dhivehi", "Divehi", "Maldivian"}, ["dz"] = {"Dzongkha"}, ["ee"] = {"Ewe"}, ["el"] = {"Modern Greek (1453-)"}, ["en"] = {"English"}, ["eo"] = {"Esperanto"}, ["es"] = {"Spanish", "Castilian"}, ["et"] = {"Estonian"}, ["eu"] = {"Basque"}, ["fa"] = {"Persian"}, ["ff"] = {"Fulah"}, ["fi"] = {"Finnish"}, ["fj"] = {"Fijian"}, ["fo"] = {"Faroese"}, ["fr"] = {"French"}, ["fy"] = {"Western Frisian"}, ["ga"] = {"Irish"}, ["gd"] = {"Scottish Gaelic", "Gaelic"}, ["gl"] = {"Galician"}, ["gn"] = {"Guarani"}, ["gu"] = {"Gujarati"}, ["gv"] = {"Manx"}, ["ha"] = {"Hausa"}, ["he"] = {"Hebrew"}, ["hi"] = {"Hindi"}, ["ho"] = {"Hiri Motu"}, ["hr"] = {"Croatian"}, ["ht"] = {"Haitian", "Haitian Creole"}, ["hu"] = {"Hungarian"}, ["hy"] = {"Armenian"}, ["hz"] = {"Herero"}, ["ia"] = {"Interlingua (International Auxiliary Language Association)"}, ["id"] = {"Indonesian"}, ["ie"] = {"Interlingue", "Occidental"}, ["ig"] = {"Igbo"}, ["ii"] = {"Sichuan Yi", "Nuosu"}, ["ik"] = {"Inupiaq"}, ["io"] = {"Ido"}, ["is"] = {"Icelandic"}, ["it"] = {"Italian"}, ["iu"] = {"Inuktitut"}, ["ja"] = {"Japanese"}, ["jv"] = {"Javanese"}, ["ka"] = {"Georgian"}, ["kg"] = {"Kongo"}, ["ki"] = {"Kikuyu", "Gikuyu"}, ["kj"] = {"Kuanyama", "Kwanyama"}, ["kk"] = {"Kazakh"}, ["kl"] = {"Kalaallisut", "Greenlandic"}, ["km"] = {"Khmer", "Central Khmer"}, ["kn"] = {"Kannada"}, ["ko"] = {"Korean"}, ["kr"] = {"Kanuri"}, ["ks"] = {"Kashmiri"}, ["ku"] = {"Kurdish"}, ["kv"] = {"Komi"}, ["kw"] = {"Cornish"}, ["ky"] = {"Kirghiz", "Kyrgyz"}, ["la"] = {"Latin"}, ["lb"] = {"Luxembourgish", "Letzeburgesch"}, ["lg"] = {"Ganda", "Luganda"}, ["li"] = {"Limburgan", "Limburger", "Limburgish"}, ["ln"] = {"Lingala"}, ["lo"] = {"Lao"}, ["lt"] = {"Lithuanian"}, ["lu"] = {"Luba-Katanga"}, ["lv"] = {"Latvian"}, ["mg"] = {"Malagasy"}, ["mh"] = {"Marshallese"}, ["mi"] = {"Maori"}, ["mk"] = {"Macedonian"}, ["ml"] = {"Malayalam"}, ["mn"] = {"Mongolian"}, ["mr"] = {"Marathi"}, ["ms"] = {"Malay (macrolanguage)"}, ["mt"] = {"Maltese"}, ["my"] = {"Burmese"}, ["na"] = {"Nauru"}, ["nb"] = {"Norwegian Bokmål"}, ["nd"] = {"North Ndebele"}, ["ne"] = {"Nepali (macrolanguage)"}, ["ng"] = {"Ndonga"}, ["nl"] = {"Dutch", "Flemish"}, ["nn"] = {"Norwegian Nynorsk"}, ["no"] = {"Norwegian"}, ["nr"] = {"South Ndebele"}, ["nv"] = {"Navajo", "Navaho"}, ["ny"] = {"Nyanja", "Chewa", "Chichewa"}, ["oc"] = {"Occitan (post 1500)"}, ["oj"] = {"Ojibwa"}, ["om"] = {"Oromo"}, ["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"}, ["os"] = {"Ossetian", "Ossetic"}, ["pa"] = {"Panjabi", "Punjabi"}, ["pi"] = {"Pali"}, ["pl"] = {"Polish"}, ["ps"] = {"Pushto", "Pashto"}, ["pt"] = {"Portuguese"}, ["qu"] = {"Quechua"}, ["rm"] = {"Romansh"}, ["rn"] = {"Rundi"}, ["ro"] = {"Romanian", "Moldavian", "Moldovan"}, ["ru"] = {"Russian"}, ["rw"] = {"Kinyarwanda"}, ["sa"] = {"Sanskrit"}, ["sc"] = {"Sardinian"}, ["sd"] = {"Sindhi"}, ["se"] = {"Northern Sami"}, ["sg"] = {"Sango"}, ["sh"] = {"Serbo-Croatian"}, ["si"] = {"Sinhala", "Sinhalese"}, ["sk"] = {"Slovak"}, ["sl"] = {"Slovenian"}, ["sm"] = {"Samoan"}, ["sn"] = {"Shona"}, ["so"] = {"Somali"}, ["sq"] = {"Albanian"}, ["sr"] = {"Serbian"}, ["ss"] = {"Swati"}, ["st"] = {"Southern Sotho"}, ["su"] = {"Sundanese"}, ["sv"] = {"Swedish"}, ["sw"] = {"Swahili (macrolanguage)"}, ["ta"] = {"Tamil"}, ["te"] = {"Telugu"}, ["tg"] = {"Tajik"}, ["th"] = {"Thai"}, ["ti"] = {"Tigrinya"}, ["tk"] = {"Turkmen"}, ["tl"] = {"Tagalog"}, ["tn"] = {"Tswana"}, ["to"] = {"Tonga (Tonga Islands)"}, ["tr"] = {"Turkish"}, ["ts"] = {"Tsonga"}, ["tt"] = {"Tatar"}, ["tw"] = {"Twi"}, ["ty"] = {"Tahitian"}, ["ug"] = {"Uighur", "Uyghur"}, ["uk"] = {"Ukrainian"}, ["ur"] = {"Urdu"}, ["uz"] = {"Uzbek"}, ["ve"] = {"Venda"}, ["vi"] = {"Vietnamese"}, ["vo"] = {"Volapük"}, ["wa"] = {"Walloon"}, ["wo"] = {"Wolof"}, ["xh"] = {"Xhosa"}, ["yi"] = {"Yiddish"}, ["yo"] = {"Yoruba"}, ["za"] = {"Zhuang", "Chuang"}, ["zh"] = {"Chinese"}, ["zu"] = {"Zulu"}, ["aaa"] = {"Ghotuo"}, ["aab"] = {"Alumu-Tesu"}, ["aac"] = {"Ari"}, ["aad"] = {"Amal"}, ["aae"] = {"Arbëreshë Albanian"}, ["aaf"] = {"Aranadan"}, ["aag"] = {"Ambrak"}, ["aah"] = {"Abu' Arapesh"}, ["aai"] = {"Arifama-Miniafia"}, ["aak"] = {"Ankave"}, ["aal"] = {"Afade"}, ["aan"] = {"Anambé"}, ["aao"] = {"Algerian Saharan Arabic"}, ["aap"] = {"Pará Arára"}, ["aaq"] = {"Eastern Abnaki"}, ["aas"] = {"Aasáx"}, ["aat"] = {"Arvanitika Albanian"}, ["aau"] = {"Abau"}, ["aav"] = {"Austro-Asiatic languages"}, ["aaw"] = {"Solong"}, ["aax"] = {"Mandobo Atas"}, ["aaz"] = {"Amarasi"}, ["aba"] = {"Abé"}, ["abb"] = {"Bankon"}, ["abc"] = {"Ambala Ayta"}, ["abd"] = {"Manide"}, ["abe"] = {"Western Abnaki"}, ["abf"] = {"Abai Sungai"}, ["abg"] = {"Abaga"}, ["abh"] = {"Tajiki Arabic"}, ["abi"] = {"Abidji"}, ["abj"] = {"Aka-Bea"}, ["abl"] = {"Lampung Nyo"}, ["abm"] = {"Abanyom"}, ["abn"] = {"Abua"}, ["abo"] = {"Abon"}, ["abp"] = {"Abellen Ayta"}, ["abq"] = {"Abaza"}, ["abr"] = {"Abron"}, ["abs"] = {"Ambonese Malay"}, ["abt"] = {"Ambulas"}, ["abu"] = {"Abure"}, ["abv"] = {"Baharna Arabic"}, ["abw"] = {"Pal"}, ["abx"] = {"Inabaknon"}, ["aby"] = {"Aneme Wake"}, ["abz"] = {"Abui"}, ["aca"] = {"Achagua"}, ["acb"] = {"Áncá"}, ["acd"] = {"Gikyode"}, ["ace"] = {"Achinese"}, ["acf"] = {"Saint Lucian Creole French"}, ["ach"] = {"Acoli"}, ["aci"] = {"Aka-Cari"}, ["ack"] = {"Aka-Kora"}, ["acl"] = {"Akar-Bale"}, ["acm"] = {"Mesopotamian Arabic"}, ["acn"] = {"Achang"}, ["acp"] = {"Eastern Acipa"}, ["acq"] = {"Ta'izzi-Adeni Arabic"}, ["acr"] = {"Achi"}, ["acs"] = {"Acroá"}, ["act"] = {"Achterhoeks"}, ["acu"] = {"Achuar-Shiwiar"}, ["acv"] = {"Achumawi"}, ["acw"] = {"Hijazi Arabic"}, ["acx"] = {"Omani Arabic"}, ["acy"] = {"Cypriot Arabic"}, ["acz"] = {"Acheron"}, ["ada"] = {"Adangme"}, ["adb"] = {"Atauran"}, ["add"] = {"Lidzonka", "Dzodinka"}, ["ade"] = {"Adele"}, ["adf"] = {"Dhofari Arabic"}, ["adg"] = {"Andegerebinha"}, ["adh"] = {"Adhola"}, ["adi"] = {"Adi"}, ["adj"] = {"Adioukrou"}, ["adl"] = {"Galo"}, ["adn"] = {"Adang"}, ["ado"] = {"Abu"}, ["adq"] = {"Adangbe"}, ["adr"] = {"Adonara"}, ["ads"] = {"Adamorobe Sign Language"}, ["adt"] = {"Adnyamathanha"}, ["adu"] = {"Aduge"}, ["adw"] = {"Amundava"}, ["adx"] = {"Amdo Tibetan"}, ["ady"] = {"Adyghe", "Adygei"}, ["adz"] = {"Adzera"}, ["aea"] = {"Areba"}, ["aeb"] = {"Tunisian Arabic"}, ["aec"] = {"Saidi Arabic"}, ["aed"] = {"Argentine Sign Language"}, ["aee"] = {"Northeast Pashai", "Northeast Pashayi"}, ["aek"] = {"Haeke"}, ["ael"] = {"Ambele"}, ["aem"] = {"Arem"}, ["aen"] = {"Armenian Sign Language"}, ["aeq"] = {"Aer"}, ["aer"] = {"Eastern Arrernte"}, ["aes"] = {"Alsea"}, ["aeu"] = {"Akeu"}, ["aew"] = {"Ambakich"}, ["aey"] = {"Amele"}, ["aez"] = {"Aeka"}, ["afa"] = {"Afro-Asiatic languages"}, ["afb"] = {"Gulf Arabic"}, ["afd"] = {"Andai"}, ["afe"] = {"Putukwam"}, ["afg"] = {"Afghan Sign Language"}, ["afh"] = {"Afrihili"}, ["afi"] = {"Akrukay", "Chini"}, ["afk"] = {"Nanubae"}, ["afn"] = {"Defaka"}, ["afo"] = {"Eloyi"}, ["afp"] = {"Tapei"}, ["afs"] = {"Afro-Seminole Creole"}, ["aft"] = {"Afitti"}, ["afu"] = {"Awutu"}, ["afz"] = {"Obokuitai"}, ["aga"] = {"Aguano"}, ["agb"] = {"Legbo"}, ["agc"] = {"Agatu"}, ["agd"] = {"Agarabi"}, ["age"] = {"Angal"}, ["agf"] = {"Arguni"}, ["agg"] = {"Angor"}, ["agh"] = {"Ngelima"}, ["agi"] = {"Agariya"}, ["agj"] = {"Argobba"}, ["agk"] = {"Isarog Agta"}, ["agl"] = {"Fembe"}, ["agm"] = {"Angaataha"}, ["agn"] = {"Agutaynen"}, ["ago"] = {"Tainae"}, ["agq"] = {"Aghem"}, ["agr"] = {"Aguaruna"}, ["ags"] = {"Esimbi"}, ["agt"] = {"Central Cagayan Agta"}, ["agu"] = {"Aguacateco"}, ["agv"] = {"Remontado Dumagat"}, ["agw"] = {"Kahua"}, ["agx"] = {"Aghul"}, ["agy"] = {"Southern Alta"}, ["agz"] = {"Mt. Iriga Agta"}, ["aha"] = {"Ahanta"}, ["ahb"] = {"Axamb"}, ["ahg"] = {"Qimant"}, ["ahh"] = {"Aghu"}, ["ahi"] = {"Tiagbamrin Aizi"}, ["ahk"] = {"Akha"}, ["ahl"] = {"Igo"}, ["ahm"] = {"Mobumrin Aizi"}, ["ahn"] = {"Àhàn"}, ["aho"] = {"Ahom"}, ["ahp"] = {"Aproumu Aizi"}, ["ahr"] = {"Ahirani"}, ["ahs"] = {"Ashe"}, ["aht"] = {"Ahtena"}, ["aia"] = {"Arosi"}, ["aib"] = {"Ainu (China)"}, ["aic"] = {"Ainbai"}, ["aid"] = {"Alngith"}, ["aie"] = {"Amara"}, ["aif"] = {"Agi"}, ["aig"] = {"Antigua and Barbuda Creole English"}, ["aih"] = {"Ai-Cham"}, ["aii"] = {"Assyrian Neo-Aramaic"}, ["aij"] = {"Lishanid Noshan"}, ["aik"] = {"Ake"}, ["ail"] = {"Aimele"}, ["aim"] = {"Aimol"}, ["ain"] = {"Ainu (Japan)"}, ["aio"] = {"Aiton"}, ["aip"] = {"Burumakok"}, ["aiq"] = {"Aimaq"}, ["air"] = {"Airoran"}, ["ait"] = {"Arikem"}, ["aiw"] = {"Aari"}, ["aix"] = {"Aighon"}, ["aiy"] = {"Ali"}, ["aja"] = {"Aja (South Sudan)"}, ["ajg"] = {"Aja (Benin)"}, ["aji"] = {"Ajië"}, ["ajn"] = {"Andajin"}, ["ajs"] = {"Algerian Jewish Sign Language"}, ["aju"] = {"Judeo-Moroccan Arabic"}, ["ajw"] = {"Ajawa"}, ["ajz"] = {"Amri Karbi"}, ["akb"] = {"Batak Angkola"}, ["akc"] = {"Mpur"}, ["akd"] = {"Ukpet-Ehom"}, ["ake"] = {"Akawaio"}, ["akf"] = {"Akpa"}, ["akg"] = {"Anakalangu"}, ["akh"] = {"Angal Heneng"}, ["aki"] = {"Aiome"}, ["akj"] = {"Aka-Jeru"}, ["akk"] = {"Akkadian"}, ["akl"] = {"Aklanon"}, ["akm"] = {"Aka-Bo"}, ["ako"] = {"Akurio"}, ["akp"] = {"Siwu"}, ["akq"] = {"Ak"}, ["akr"] = {"Araki"}, ["aks"] = {"Akaselem"}, ["akt"] = {"Akolet"}, ["aku"] = {"Akum"}, ["akv"] = {"Akhvakh"}, ["akw"] = {"Akwa"}, ["akx"] = {"Aka-Kede"}, ["aky"] = {"Aka-Kol"}, ["akz"] = {"Alabama"}, ["ala"] = {"Alago"}, ["alc"] = {"Qawasqar"}, ["ald"] = {"Alladian"}, ["ale"] = {"Aleut"}, ["alf"] = {"Alege"}, ["alg"] = {"Algonquian languages"}, ["alh"] = {"Alawa"}, ["ali"] = {"Amaimon"}, ["alj"] = {"Alangan"}, ["alk"] = {"Alak"}, ["all"] = {"Allar"}, ["alm"] = {"Amblong"}, ["aln"] = {"Gheg Albanian"}, ["alo"] = {"Larike-Wakasihu"}, ["alp"] = {"Alune"}, ["alq"] = {"Algonquin"}, ["alr"] = {"Alutor"}, ["als"] = {"Tosk Albanian"}, ["alt"] = {"Southern Altai"}, ["alu"] = {"'Are'are"}, ["alv"] = {"Atlantic-Congo languages"}, ["alw"] = {"Alaba-K’abeena", "Wanbasana"}, ["alx"] = {"Amol"}, ["aly"] = {"Alyawarr"}, ["alz"] = {"Alur"}, ["ama"] = {"Amanayé"}, ["amb"] = {"Ambo"}, ["amc"] = {"Amahuaca"}, ["ame"] = {"Yanesha'"}, ["amf"] = {"Hamer-Banna"}, ["amg"] = {"Amurdak"}, ["ami"] = {"Amis"}, ["amj"] = {"Amdang"}, ["amk"] = {"Ambai"}, ["aml"] = {"War-Jaintia"}, ["amm"] = {"Ama (Papua New Guinea)"}, ["amn"] = {"Amanab"}, ["amo"] = {"Amo"}, ["amp"] = {"Alamblak"}, ["amq"] = {"Amahai"}, ["amr"] = {"Amarakaeri"}, ["ams"] = {"Southern Amami-Oshima"}, ["amt"] = {"Amto"}, ["amu"] = {"Guerrero Amuzgo"}, ["amv"] = {"Ambelau"}, ["amw"] = {"Western Neo-Aramaic"}, ["amx"] = {"Anmatyerre"}, ["amy"] = {"Ami"}, ["amz"] = {"Atampaya"}, ["ana"] = {"Andaqui"}, ["anb"] = {"Andoa"}, ["anc"] = {"Ngas"}, ["and"] = {"Ansus"}, ["ane"] = {"Xârâcùù"}, ["anf"] = {"Animere"}, ["ang"] = {"Old English (ca. 450-1100)"}, ["anh"] = {"Nend"}, ["ani"] = {"Andi"}, ["anj"] = {"Anor"}, ["ank"] = {"Goemai"}, ["anl"] = {"Anu-Hkongso Chin"}, ["anm"] = {"Anal"}, ["ann"] = {"Obolo"}, ["ano"] = {"Andoque"}, ["anp"] = {"Angika"}, ["anq"] = {"Jarawa (India)"}, ["anr"] = {"Andh"}, ["ans"] = {"Anserma"}, ["ant"] = {"Antakarinya", "Antikarinya"}, ["anu"] = {"Anuak"}, ["anv"] = {"Denya"}, ["anw"] = {"Anaang"}, ["anx"] = {"Andra-Hus"}, ["any"] = {"Anyin"}, ["anz"] = {"Anem"}, ["aoa"] = {"Angolar"}, ["aob"] = {"Abom"}, ["aoc"] = {"Pemon"}, ["aod"] = {"Andarum"}, ["aoe"] = {"Angal Enen"}, ["aof"] = {"Bragat"}, ["aog"] = {"Angoram"}, ["aoi"] = {"Anindilyakwa"}, ["aoj"] = {"Mufian"}, ["aok"] = {"Arhö"}, ["aol"] = {"Alor"}, ["aom"] = {"Ömie"}, ["aon"] = {"Bumbita Arapesh"}, ["aor"] = {"Aore"}, ["aos"] = {"Taikat"}, ["aot"] = {"Atong (India)", "A'tong"}, ["aou"] = {"A'ou"}, ["aox"] = {"Atorada"}, ["aoz"] = {"Uab Meto"}, ["apa"] = {"Apache languages"}, ["apb"] = {"Sa'a"}, ["apc"] = {"Levantine Arabic"}, ["apd"] = {"Sudanese Arabic"}, ["ape"] = {"Bukiyip"}, ["apf"] = {"Pahanan Agta"}, ["apg"] = {"Ampanang"}, ["aph"] = {"Athpariya"}, ["api"] = {"Apiaká"}, ["apj"] = {"Jicarilla Apache"}, ["apk"] = {"Kiowa Apache"}, ["apl"] = {"Lipan Apache"}, ["apm"] = {"Mescalero-Chiricahua Apache"}, ["apn"] = {"Apinayé"}, ["apo"] = {"Ambul"}, ["app"] = {"Apma"}, ["apq"] = {"A-Pucikwar"}, ["apr"] = {"Arop-Lokep"}, ["aps"] = {"Arop-Sissano"}, ["apt"] = {"Apatani"}, ["apu"] = {"Apurinã"}, ["apv"] = {"Alapmunte"}, ["apw"] = {"Western Apache"}, ["apx"] = {"Aputai"}, ["apy"] = {"Apalaí"}, ["apz"] = {"Safeyoka"}, ["aqa"] = {"Alacalufan languages"}, ["aqc"] = {"Archi"}, ["aqd"] = {"Ampari Dogon"}, ["aqg"] = {"Arigidi"}, ["aqk"] = {"Aninka"}, ["aql"] = {"Algic languages"}, ["aqm"] = {"Atohwaim"}, ["aqn"] = {"Northern Alta"}, ["aqp"] = {"Atakapa"}, ["aqr"] = {"Arhâ"}, ["aqt"] = {"Angaité"}, ["aqz"] = {"Akuntsu"}, ["arb"] = {"Standard Arabic"}, ["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"}, ["ard"] = {"Arabana"}, ["are"] = {"Western Arrarnta"}, ["arh"] = {"Arhuaco"}, ["ari"] = {"Arikara"}, ["arj"] = {"Arapaso"}, ["ark"] = {"Arikapú"}, ["arl"] = {"Arabela"}, ["arn"] = {"Mapudungun", "Mapuche"}, ["aro"] = {"Araona"}, ["arp"] = {"Arapaho"}, ["arq"] = {"Algerian Arabic"}, ["arr"] = {"Karo (Brazil)"}, ["ars"] = {"Najdi Arabic"}, ["art"] = {"Artificial languages"}, ["aru"] = {"Aruá (Amazonas State)", "Arawá"}, ["arv"] = {"Arbore"}, ["arw"] = {"Arawak"}, ["arx"] = {"Aruá (Rodonia State)"}, ["ary"] = {"Moroccan Arabic"}, ["arz"] = {"Egyptian Arabic"}, ["asa"] = {"Asu (Tanzania)"}, ["asb"] = {"Assiniboine"}, ["asc"] = {"Casuarina Coast Asmat"}, ["ase"] = {"American Sign Language"}, ["asf"] = {"Auslan", "Australian Sign Language"}, ["asg"] = {"Cishingini"}, ["ash"] = {"Abishira"}, ["asi"] = {"Buruwai"}, ["asj"] = {"Sari"}, ["ask"] = {"Ashkun"}, ["asl"] = {"Asilulu"}, ["asn"] = {"Xingú Asuriní"}, ["aso"] = {"Dano"}, ["asp"] = {"Algerian Sign Language"}, ["asq"] = {"Austrian Sign Language"}, ["asr"] = {"Asuri"}, ["ass"] = {"Ipulo"}, ["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"}, ["asu"] = {"Tocantins Asurini"}, ["asv"] = {"Asoa"}, ["asw"] = {"Australian Aborigines Sign Language"}, ["asx"] = {"Muratayak"}, ["asy"] = {"Yaosakor Asmat"}, ["asz"] = {"As"}, ["ata"] = {"Pele-Ata"}, ["atb"] = {"Zaiwa"}, ["atc"] = {"Atsahuaca"}, ["atd"] = {"Ata Manobo"}, ["ate"] = {"Atemble"}, ["atg"] = {"Ivbie North-Okpela-Arhe"}, ["ath"] = {"Athapascan languages"}, ["ati"] = {"Attié"}, ["atj"] = {"Atikamekw"}, ["atk"] = {"Ati"}, ["atl"] = {"Mt. Iraya Agta"}, ["atm"] = {"Ata"}, ["atn"] = {"Ashtiani"}, ["ato"] = {"Atong (Cameroon)"}, ["atp"] = {"Pudtol Atta"}, ["atq"] = {"Aralle-Tabulahan"}, ["atr"] = {"Waimiri-Atroari"}, ["ats"] = {"Gros Ventre"}, ["att"] = {"Pamplona Atta"}, ["atu"] = {"Reel"}, ["atv"] = {"Northern Altai"}, ["atw"] = {"Atsugewi"}, ["atx"] = {"Arutani"}, ["aty"] = {"Aneityum"}, ["atz"] = {"Arta"}, ["aua"] = {"Asumboa"}, ["aub"] = {"Alugu"}, ["auc"] = {"Waorani"}, ["aud"] = {"Anuta"}, ["auf"] = {"Arauan languages"}, ["aug"] = {"Aguna"}, ["auh"] = {"Aushi"}, ["aui"] = {"Anuki"}, ["auj"] = {"Awjilah"}, ["auk"] = {"Heyo"}, ["aul"] = {"Aulua"}, ["aum"] = {"Asu (Nigeria)"}, ["aun"] = {"Molmo One"}, ["auo"] = {"Auyokawa"}, ["aup"] = {"Makayam"}, ["auq"] = {"Anus", "Korur"}, ["aur"] = {"Aruek"}, ["aus"] = {"Australian languages"}, ["aut"] = {"Austral"}, ["auu"] = {"Auye"}, ["auw"] = {"Awyi"}, ["aux"] = {"Aurá"}, ["auy"] = {"Awiyaana"}, ["auz"] = {"Uzbeki Arabic"}, ["avb"] = {"Avau"}, ["avd"] = {"Alviri-Vidari"}, ["avi"] = {"Avikam"}, ["avk"] = {"Kotava"}, ["avl"] = {"Eastern Egyptian Bedawi Arabic"}, ["avm"] = {"Angkamuthi"}, ["avn"] = {"Avatime"}, ["avo"] = {"Agavotaguerra"}, ["avs"] = {"Aushiri"}, ["avt"] = {"Au"}, ["avu"] = {"Avokaya"}, ["avv"] = {"Avá-Canoeiro"}, ["awa"] = {"Awadhi"}, ["awb"] = {"Awa (Papua New Guinea)"}, ["awc"] = {"Cicipu"}, ["awd"] = {"Arawakan languages"}, ["awe"] = {"Awetí"}, ["awg"] = {"Anguthimri"}, ["awh"] = {"Awbono"}, ["awi"] = {"Aekyom"}, ["awk"] = {"Awabakal"}, ["awm"] = {"Arawum"}, ["awn"] = {"Awngi"}, ["awo"] = {"Awak"}, ["awr"] = {"Awera"}, ["aws"] = {"South Awyu"}, ["awt"] = {"Araweté"}, ["awu"] = {"Central Awyu"}, ["awv"] = {"Jair Awyu"}, ["aww"] = {"Awun"}, ["awx"] = {"Awara"}, ["awy"] = {"Edera Awyu"}, ["axb"] = {"Abipon"}, ["axe"] = {"Ayerrerenge"}, ["axg"] = {"Mato Grosso Arára"}, ["axk"] = {"Yaka (Central African Republic)"}, ["axl"] = {"Lower Southern Aranda"}, ["axm"] = {"Middle Armenian"}, ["axx"] = {"Xârâgurè"}, ["aya"] = {"Awar"}, ["ayb"] = {"Ayizo Gbe"}, ["ayc"] = {"Southern Aymara"}, ["ayd"] = {"Ayabadhu"}, ["aye"] = {"Ayere"}, ["ayg"] = {"Ginyanga"}, ["ayh"] = {"Hadrami Arabic"}, ["ayi"] = {"Leyigha"}, ["ayk"] = {"Akuku"}, ["ayl"] = {"Libyan Arabic"}, ["ayn"] = {"Sanaani Arabic"}, ["ayo"] = {"Ayoreo"}, ["ayp"] = {"North Mesopotamian Arabic"}, ["ayq"] = {"Ayi (Papua New Guinea)"}, ["ayr"] = {"Central Aymara"}, ["ays"] = {"Sorsogon Ayta"}, ["ayt"] = {"Magbukun Ayta"}, ["ayu"] = {"Ayu"}, ["ayz"] = {"Mai Brat"}, ["aza"] = {"Azha"}, ["azb"] = {"South Azerbaijani"}, ["azc"] = {"Uto-Aztecan languages"}, ["azd"] = {"Eastern Durango Nahuatl"}, ["azg"] = {"San Pedro Amuzgos Amuzgo"}, ["azj"] = {"North Azerbaijani"}, ["azm"] = {"Ipalapa Amuzgo"}, ["azn"] = {"Western Durango Nahuatl"}, ["azo"] = {"Awing"}, ["azt"] = {"Faire Atta"}, ["azz"] = {"Highland Puebla Nahuatl"}, ["baa"] = {"Babatana"}, ["bab"] = {"Bainouk-Gunyuño"}, ["bac"] = {"Badui"}, ["bad"] = {"Banda languages"}, ["bae"] = {"Baré"}, ["baf"] = {"Nubaca"}, ["bag"] = {"Tuki"}, ["bah"] = {"Bahamas Creole English"}, ["bai"] = {"Bamileke languages"}, ["baj"] = {"Barakai"}, ["bal"] = {"Baluchi"}, ["ban"] = {"Balinese"}, ["bao"] = {"Waimaha"}, ["bap"] = {"Bantawa"}, ["bar"] = {"Bavarian"}, ["bas"] = {"Basa (Cameroon)"}, ["bat"] = {"Baltic languages"}, ["bau"] = {"Bada (Nigeria)"}, ["bav"] = {"Vengo"}, ["baw"] = {"Bambili-Bambui"}, ["bax"] = {"Bamun"}, ["bay"] = {"Batuley"}, ["bba"] = {"Baatonum"}, ["bbb"] = {"Barai"}, ["bbc"] = {"Batak Toba"}, ["bbd"] = {"Bau"}, ["bbe"] = {"Bangba"}, ["bbf"] = {"Baibai"}, ["bbg"] = {"Barama"}, ["bbh"] = {"Bugan"}, ["bbi"] = {"Barombi"}, ["bbj"] = {"Ghomálá'"}, ["bbk"] = {"Babanki"}, ["bbl"] = {"Bats"}, ["bbm"] = {"Babango"}, ["bbn"] = {"Uneapa"}, ["bbo"] = {"Northern Bobo Madaré", "Konabéré"}, ["bbp"] = {"West Central Banda"}, ["bbq"] = {"Bamali"}, ["bbr"] = {"Girawa"}, ["bbs"] = {"Bakpinka"}, ["bbt"] = {"Mburku"}, ["bbu"] = {"Kulung (Nigeria)"}, ["bbv"] = {"Karnai"}, ["bbw"] = {"Baba"}, ["bbx"] = {"Bubia"}, ["bby"] = {"Befang"}, ["bca"] = {"Central Bai"}, ["bcb"] = {"Bainouk-Samik"}, ["bcc"] = {"Southern Balochi"}, ["bcd"] = {"North Babar"}, ["bce"] = {"Bamenyam"}, ["bcf"] = {"Bamu"}, ["bcg"] = {"Baga Pokur"}, ["bch"] = {"Bariai"}, ["bci"] = {"Baoulé"}, ["bcj"] = {"Bardi"}, ["bck"] = {"Bunuba"}, ["bcl"] = {"Central Bikol"}, ["bcm"] = {"Bannoni"}, ["bcn"] = {"Bali (Nigeria)"}, ["bco"] = {"Kaluli"}, ["bcp"] = {"Bali (Democratic Republic of Congo)"}, ["bcq"] = {"Bench"}, ["bcr"] = {"Babine"}, ["bcs"] = {"Kohumono"}, ["bct"] = {"Bendi"}, ["bcu"] = {"Awad Bing"}, ["bcv"] = {"Shoo-Minda-Nye"}, ["bcw"] = {"Bana"}, ["bcy"] = {"Bacama"}, ["bcz"] = {"Bainouk-Gunyaamolo"}, ["bda"] = {"Bayot"}, ["bdb"] = {"Basap"}, ["bdc"] = {"Emberá-Baudó"}, ["bdd"] = {"Bunama"}, ["bde"] = {"Bade"}, ["bdf"] = {"Biage"}, ["bdg"] = {"Bonggi"}, ["bdh"] = {"Baka (South Sudan)"}, ["bdi"] = {"Burun"}, ["bdj"] = {"Bai (South Sudan)", "Bai"}, ["bdk"] = {"Budukh"}, ["bdl"] = {"Indonesian Bajau"}, ["bdm"] = {"Buduma"}, ["bdn"] = {"Baldemu"}, ["bdo"] = {"Morom"}, ["bdp"] = {"Bende"}, ["bdq"] = {"Bahnar"}, ["bdr"] = {"West Coast Bajau"}, ["bds"] = {"Burunge"}, ["bdt"] = {"Bokoto"}, ["bdu"] = {"Oroko"}, ["bdv"] = {"Bodo Parja"}, ["bdw"] = {"Baham"}, ["bdx"] = {"Budong-Budong"}, ["bdy"] = {"Bandjalang"}, ["bdz"] = {"Badeshi"}, ["bea"] = {"Beaver"}, ["beb"] = {"Bebele"}, ["bec"] = {"Iceve-Maci"}, ["bed"] = {"Bedoanas"}, ["bee"] = {"Byangsi"}, ["bef"] = {"Benabena"}, ["beg"] = {"Belait"}, ["beh"] = {"Biali"}, ["bei"] = {"Bekati'"}, ["bej"] = {"Beja", "Bedawiyet"}, ["bek"] = {"Bebeli"}, ["bem"] = {"Bemba (Zambia)"}, ["beo"] = {"Beami"}, ["bep"] = {"Besoa"}, ["beq"] = {"Beembe"}, ["ber"] = {"Berber languages"}, ["bes"] = {"Besme"}, ["bet"] = {"Guiberoua Béte"}, ["beu"] = {"Blagar"}, ["bev"] = {"Daloa Bété"}, ["bew"] = {"Betawi"}, ["bex"] = {"Jur Modo"}, ["bey"] = {"Beli (Papua New Guinea)"}, ["bez"] = {"Bena (Tanzania)"}, ["bfa"] = {"Bari"}, ["bfb"] = {"Pauri Bareli"}, ["bfc"] = {"Panyi Bai", "Northern Bai"}, ["bfd"] = {"Bafut"}, ["bfe"] = {"Betaf", "Tena"}, ["bff"] = {"Bofi"}, ["bfg"] = {"Busang Kayan"}, ["bfh"] = {"Blafe"}, ["bfi"] = {"British Sign Language"}, ["bfj"] = {"Bafanji"}, ["bfk"] = {"Ban Khor Sign Language"}, ["bfl"] = {"Banda-Ndélé"}, ["bfm"] = {"Mmen"}, ["bfn"] = {"Bunak"}, ["bfo"] = {"Malba Birifor"}, ["bfp"] = {"Beba"}, ["bfq"] = {"Badaga"}, ["bfr"] = {"Bazigar"}, ["bfs"] = {"Southern Bai"}, ["bft"] = {"Balti"}, ["bfu"] = {"Gahri"}, ["bfw"] = {"Bondo"}, ["bfx"] = {"Bantayanon"}, ["bfy"] = {"Bagheli"}, ["bfz"] = {"Mahasu Pahari"}, ["bga"] = {"Gwamhi-Wuri"}, ["bgb"] = {"Bobongko"}, ["bgc"] = {"Haryanvi"}, ["bgd"] = {"Rathwi Bareli"}, ["bge"] = {"Bauria"}, ["bgf"] = {"Bangandu"}, ["bgg"] = {"Bugun"}, ["bgi"] = {"Giangan"}, ["bgj"] = {"Bangolan"}, ["bgk"] = {"Bit", "Buxinhua"}, ["bgl"] = {"Bo (Laos)"}, ["bgn"] = {"Western Balochi"}, ["bgo"] = {"Baga Koga"}, ["bgp"] = {"Eastern Balochi"}, ["bgq"] = {"Bagri"}, ["bgr"] = {"Bawm Chin"}, ["bgs"] = {"Tagabawa"}, ["bgt"] = {"Bughotu"}, ["bgu"] = {"Mbongno"}, ["bgv"] = {"Warkay-Bipim"}, ["bgw"] = {"Bhatri"}, ["bgx"] = {"Balkan Gagauz Turkish"}, ["bgy"] = {"Benggoi"}, ["bgz"] = {"Banggai"}, ["bha"] = {"Bharia"}, ["bhb"] = {"Bhili"}, ["bhc"] = {"Biga"}, ["bhd"] = {"Bhadrawahi"}, ["bhe"] = {"Bhaya"}, ["bhf"] = {"Odiai"}, ["bhg"] = {"Binandere"}, ["bhh"] = {"Bukharic"}, ["bhi"] = {"Bhilali"}, ["bhj"] = {"Bahing"}, ["bhl"] = {"Bimin"}, ["bhm"] = {"Bathari"}, ["bhn"] = {"Bohtan Neo-Aramaic"}, ["bho"] = {"Bhojpuri"}, ["bhp"] = {"Bima"}, ["bhq"] = {"Tukang Besi South"}, ["bhr"] = {"Bara Malagasy"}, ["bhs"] = {"Buwal"}, ["bht"] = {"Bhattiyali"}, ["bhu"] = {"Bhunjia"}, ["bhv"] = {"Bahau"}, ["bhw"] = {"Biak"}, ["bhx"] = {"Bhalay"}, ["bhy"] = {"Bhele"}, ["bhz"] = {"Bada (Indonesia)"}, ["bia"] = {"Badimaya"}, ["bib"] = {"Bissa", "Bisa"}, ["bid"] = {"Bidiyo"}, ["bie"] = {"Bepour"}, ["bif"] = {"Biafada"}, ["big"] = {"Biangai"}, ["bik"] = {"Bikol"}, ["bil"] = {"Bile"}, ["bim"] = {"Bimoba"}, ["bin"] = {"Bini", "Edo"}, ["bio"] = {"Nai"}, ["bip"] = {"Bila"}, ["biq"] = {"Bipi"}, ["bir"] = {"Bisorio"}, ["bit"] = {"Berinomo"}, ["biu"] = {"Biete"}, ["biv"] = {"Southern Birifor"}, ["biw"] = {"Kol (Cameroon)"}, ["bix"] = {"Bijori"}, ["biy"] = {"Birhor"}, ["biz"] = {"Baloi"}, ["bja"] = {"Budza"}, ["bjb"] = {"Banggarla"}, ["bjc"] = {"Bariji"}, ["bje"] = {"Biao-Jiao Mien"}, ["bjf"] = {"Barzani Jewish Neo-Aramaic"}, ["bjg"] = {"Bidyogo"}, ["bjh"] = {"Bahinemo"}, ["bji"] = {"Burji"}, ["bjj"] = {"Kanauji"}, ["bjk"] = {"Barok"}, ["bjl"] = {"Bulu (Papua New Guinea)"}, ["bjm"] = {"Bajelani"}, ["bjn"] = {"Banjar"}, ["bjo"] = {"Mid-Southern Banda"}, ["bjp"] = {"Fanamaket"}, ["bjr"] = {"Binumarien"}, ["bjs"] = {"Bajan"}, ["bjt"] = {"Balanta-Ganja"}, ["bju"] = {"Busuu"}, ["bjv"] = {"Bedjond"}, ["bjw"] = {"Bakwé"}, ["bjx"] = {"Banao Itneg"}, ["bjy"] = {"Bayali"}, ["bjz"] = {"Baruga"}, ["bka"] = {"Kyak"}, ["bkc"] = {"Baka (Cameroon)"}, ["bkd"] = {"Binukid", "Talaandig"}, ["bkf"] = {"Beeke"}, ["bkg"] = {"Buraka"}, ["bkh"] = {"Bakoko"}, ["bki"] = {"Baki"}, ["bkj"] = {"Pande"}, ["bkk"] = {"Brokskat"}, ["bkl"] = {"Berik"}, ["bkm"] = {"Kom (Cameroon)"}, ["bkn"] = {"Bukitan"}, ["bko"] = {"Kwa'"}, ["bkp"] = {"Boko (Democratic Republic of Congo)"}, ["bkq"] = {"Bakairí"}, ["bkr"] = {"Bakumpai"}, ["bks"] = {"Northern Sorsoganon"}, ["bkt"] = {"Boloki"}, ["bku"] = {"Buhid"}, ["bkv"] = {"Bekwarra"}, ["bkw"] = {"Bekwel"}, ["bkx"] = {"Baikeno"}, ["bky"] = {"Bokyi"}, ["bkz"] = {"Bungku"}, ["bla"] = {"Siksika"}, ["blb"] = {"Bilua"}, ["blc"] = {"Bella Coola"}, ["bld"] = {"Bolango"}, ["ble"] = {"Balanta-Kentohe"}, ["blf"] = {"Buol"}, ["blh"] = {"Kuwaa"}, ["bli"] = {"Bolia"}, ["blj"] = {"Bolongan"}, ["blk"] = {"Pa'o Karen", "Pa'O"}, ["bll"] = {"Biloxi"}, ["blm"] = {"Beli (South Sudan)"}, ["bln"] = {"Southern Catanduanes Bikol"}, ["blo"] = {"Anii"}, ["blp"] = {"Blablanga"}, ["blq"] = {"Baluan-Pam"}, ["blr"] = {"Blang"}, ["bls"] = {"Balaesang"}, ["blt"] = {"Tai Dam"}, ["blv"] = {"Kibala", "Bolo"}, ["blw"] = {"Balangao"}, ["blx"] = {"Mag-Indi Ayta"}, ["bly"] = {"Notre"}, ["blz"] = {"Balantak"}, ["bma"] = {"Lame"}, ["bmb"] = {"Bembe"}, ["bmc"] = {"Biem"}, ["bmd"] = {"Baga Manduri"}, ["bme"] = {"Limassa"}, ["bmf"] = {"Bom-Kim"}, ["bmg"] = {"Bamwe"}, ["bmh"] = {"Kein"}, ["bmi"] = {"Bagirmi"}, ["bmj"] = {"Bote-Majhi"}, ["bmk"] = {"Ghayavi"}, ["bml"] = {"Bomboli"}, ["bmm"] = {"Northern Betsimisaraka Malagasy"}, ["bmn"] = {"Bina (Papua New Guinea)"}, ["bmo"] = {"Bambalang"}, ["bmp"] = {"Bulgebi"}, ["bmq"] = {"Bomu"}, ["bmr"] = {"Muinane"}, ["bms"] = {"Bilma Kanuri"}, ["bmt"] = {"Biao Mon"}, ["bmu"] = {"Somba-Siawari"}, ["bmv"] = {"Bum"}, ["bmw"] = {"Bomwali"}, ["bmx"] = {"Baimak"}, ["bmz"] = {"Baramu"}, ["bna"] = {"Bonerate"}, ["bnb"] = {"Bookan"}, ["bnc"] = {"Bontok"}, ["bnd"] = {"Banda (Indonesia)"}, ["bne"] = {"Bintauna"}, ["bnf"] = {"Masiwang"}, ["bng"] = {"Benga"}, ["bni"] = {"Bangi"}, ["bnj"] = {"Eastern Tawbuid"}, ["bnk"] = {"Bierebo"}, ["bnl"] = {"Boon"}, ["bnm"] = {"Batanga"}, ["bnn"] = {"Bunun"}, ["bno"] = {"Bantoanon"}, ["bnp"] = {"Bola"}, ["bnq"] = {"Bantik"}, ["bnr"] = {"Butmas-Tur"}, ["bns"] = {"Bundeli"}, ["bnt"] = {"Bantu languages"}, ["bnu"] = {"Bentong"}, ["bnv"] = {"Bonerif", "Beneraf", "Edwas"}, ["bnw"] = {"Bisis"}, ["bnx"] = {"Bangubangu"}, ["bny"] = {"Bintulu"}, ["bnz"] = {"Beezen"}, ["boa"] = {"Bora"}, ["bob"] = {"Aweer"}, ["boe"] = {"Mundabli"}, ["bof"] = {"Bolon"}, ["bog"] = {"Bamako Sign Language"}, ["boh"] = {"Boma"}, ["boi"] = {"Barbareño"}, ["boj"] = {"Anjam"}, ["bok"] = {"Bonjo"}, ["bol"] = {"Bole"}, ["bom"] = {"Berom"}, ["bon"] = {"Bine"}, ["boo"] = {"Tiemacèwè Bozo"}, ["bop"] = {"Bonkiman"}, ["boq"] = {"Bogaya"}, ["bor"] = {"Borôro"}, ["bot"] = {"Bongo"}, ["bou"] = {"Bondei"}, ["bov"] = {"Tuwuli"}, ["bow"] = {"Rema"}, ["box"] = {"Buamu"}, ["boy"] = {"Bodo (Central African Republic)"}, ["boz"] = {"Tiéyaxo Bozo"}, ["bpa"] = {"Daakaka"}, ["bpc"] = {"Mbuk"}, ["bpd"] = {"Banda-Banda"}, ["bpe"] = {"Bauni"}, ["bpg"] = {"Bonggo"}, ["bph"] = {"Botlikh"}, ["bpi"] = {"Bagupi"}, ["bpj"] = {"Binji"}, ["bpk"] = {"Orowe", "'Ôrôê"}, ["bpl"] = {"Broome Pearling Lugger Pidgin"}, ["bpm"] = {"Biyom"}, ["bpn"] = {"Dzao Min"}, ["bpo"] = {"Anasi"}, ["bpp"] = {"Kaure"}, ["bpq"] = {"Banda Malay"}, ["bpr"] = {"Koronadal Blaan"}, ["bps"] = {"Sarangani Blaan"}, ["bpt"] = {"Barrow Point"}, ["bpu"] = {"Bongu"}, ["bpv"] = {"Bian Marind"}, ["bpw"] = {"Bo (Papua New Guinea)"}, ["bpx"] = {"Palya Bareli"}, ["bpy"] = {"Bishnupriya"}, ["bpz"] = {"Bilba"}, ["bqa"] = {"Tchumbuli"}, ["bqb"] = {"Bagusa"}, ["bqc"] = {"Boko (Benin)", "Boo"}, ["bqd"] = {"Bung"}, ["bqf"] = {"Baga Kaloum"}, ["bqg"] = {"Bago-Kusuntu"}, ["bqh"] = {"Baima"}, ["bqi"] = {"Bakhtiari"}, ["bqj"] = {"Bandial"}, ["bqk"] = {"Banda-Mbrès"}, ["bql"] = {"Bilakura"}, ["bqm"] = {"Wumboko"}, ["bqn"] = {"Bulgarian Sign Language"}, ["bqo"] = {"Balo"}, ["bqp"] = {"Busa"}, ["bqq"] = {"Biritai"}, ["bqr"] = {"Burusu"}, ["bqs"] = {"Bosngun"}, ["bqt"] = {"Bamukumbit"}, ["bqu"] = {"Boguru"}, ["bqv"] = {"Koro Wachi", "Begbere-Ejar"}, ["bqw"] = {"Buru (Nigeria)"}, ["bqx"] = {"Baangi"}, ["bqy"] = {"Bengkala Sign Language"}, ["bqz"] = {"Bakaka"}, ["bra"] = {"Braj"}, ["brb"] = {"Brao", "Lave"}, ["brc"] = {"Berbice Creole Dutch"}, ["brd"] = {"Baraamu"}, ["brf"] = {"Bira"}, ["brg"] = {"Baure"}, ["brh"] = {"Brahui"}, ["bri"] = {"Mokpwe"}, ["brj"] = {"Bieria"}, ["brk"] = {"Birked"}, ["brl"] = {"Birwa"}, ["brm"] = {"Barambu"}, ["brn"] = {"Boruca"}, ["bro"] = {"Brokkat"}, ["brp"] = {"Barapasi"}, ["brq"] = {"Breri"}, ["brr"] = {"Birao"}, ["brs"] = {"Baras"}, ["brt"] = {"Bitare"}, ["bru"] = {"Eastern Bru"}, ["brv"] = {"Western Bru"}, ["brw"] = {"Bellari"}, ["brx"] = {"Bodo (India)"}, ["bry"] = {"Burui"}, ["brz"] = {"Bilbil"}, ["bsa"] = {"Abinomn"}, ["bsb"] = {"Brunei Bisaya"}, ["bsc"] = {"Bassari", "Oniyan"}, ["bse"] = {"Wushi"}, ["bsf"] = {"Bauchi"}, ["bsg"] = {"Bashkardi"}, ["bsh"] = {"Kati"}, ["bsi"] = {"Bassossi"}, ["bsj"] = {"Bangwinji"}, ["bsk"] = {"Burushaski"}, ["bsl"] = {"Basa-Gumna"}, ["bsm"] = {"Busami"}, ["bsn"] = {"Barasana-Eduria"}, ["bso"] = {"Buso"}, ["bsp"] = {"Baga Sitemu"}, ["bsq"] = {"Bassa"}, ["bsr"] = {"Bassa-Kontagora"}, ["bss"] = {"Akoose"}, ["bst"] = {"Basketo"}, ["bsu"] = {"Bahonsuai"}, ["bsv"] = {"Baga Sobané"}, ["bsw"] = {"Baiso"}, ["bsx"] = {"Yangkam"}, ["bsy"] = {"Sabah Bisaya"}, ["bta"] = {"Bata"}, ["btc"] = {"Bati (Cameroon)"}, ["btd"] = {"Batak Dairi"}, ["bte"] = {"Gamo-Ningi"}, ["btf"] = {"Birgit"}, ["btg"] = {"Gagnoa Bété"}, ["bth"] = {"Biatah Bidayuh"}, ["bti"] = {"Burate"}, ["btj"] = {"Bacanese Malay"}, ["btk"] = {"Batak languages"}, ["btm"] = {"Batak Mandailing"}, ["btn"] = {"Ratagnon"}, ["bto"] = {"Rinconada Bikol"}, ["btp"] = {"Budibud"}, ["btq"] = {"Batek"}, ["btr"] = {"Baetora"}, ["bts"] = {"Batak Simalungun"}, ["btt"] = {"Bete-Bendi"}, ["btu"] = {"Batu"}, ["btv"] = {"Bateri"}, ["btw"] = {"Butuanon"}, ["btx"] = {"Batak Karo"}, ["bty"] = {"Bobot"}, ["btz"] = {"Batak Alas-Kluet"}, ["bua"] = {"Buriat"}, ["bub"] = {"Bua"}, ["buc"] = {"Bushi"}, ["bud"] = {"Ntcham"}, ["bue"] = {"Beothuk"}, ["buf"] = {"Bushoong"}, ["bug"] = {"Buginese"}, ["buh"] = {"Younuo Bunu"}, ["bui"] = {"Bongili"}, ["buj"] = {"Basa-Gurmana"}, ["buk"] = {"Bugawac"}, ["bum"] = {"Bulu (Cameroon)"}, ["bun"] = {"Sherbro"}, ["buo"] = {"Terei"}, ["bup"] = {"Busoa"}, ["buq"] = {"Brem"}, ["bus"] = {"Bokobaru"}, ["but"] = {"Bungain"}, ["buu"] = {"Budu"}, ["buv"] = {"Bun"}, ["buw"] = {"Bubi"}, ["bux"] = {"Boghom"}, ["buy"] = {"Bullom So"}, ["buz"] = {"Bukwen"}, ["bva"] = {"Barein"}, ["bvb"] = {"Bube"}, ["bvc"] = {"Baelelea"}, ["bvd"] = {"Baeggu"}, ["bve"] = {"Berau Malay"}, ["bvf"] = {"Boor"}, ["bvg"] = {"Bonkeng"}, ["bvh"] = {"Bure"}, ["bvi"] = {"Belanda Viri"}, ["bvj"] = {"Baan"}, ["bvk"] = {"Bukat"}, ["bvl"] = {"Bolivian Sign Language"}, ["bvm"] = {"Bamunka"}, ["bvn"] = {"Buna"}, ["bvo"] = {"Bolgo"}, ["bvp"] = {"Bumang"}, ["bvq"] = {"Birri"}, ["bvr"] = {"Burarra"}, ["bvt"] = {"Bati (Indonesia)"}, ["bvu"] = {"Bukit Malay"}, ["bvv"] = {"Baniva"}, ["bvw"] = {"Boga"}, ["bvx"] = {"Dibole"}, ["bvy"] = {"Baybayanon"}, ["bvz"] = {"Bauzi"}, ["bwa"] = {"Bwatoo"}, ["bwb"] = {"Namosi-Naitasiri-Serua"}, ["bwc"] = {"Bwile"}, ["bwd"] = {"Bwaidoka"}, ["bwe"] = {"Bwe Karen"}, ["bwf"] = {"Boselewa"}, ["bwg"] = {"Barwe"}, ["bwh"] = {"Bishuo"}, ["bwi"] = {"Baniwa"}, ["bwj"] = {"Láá Láá Bwamu"}, ["bwk"] = {"Bauwaki"}, ["bwl"] = {"Bwela"}, ["bwm"] = {"Biwat"}, ["bwn"] = {"Wunai Bunu"}, ["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"}, ["bwp"] = {"Mandobo Bawah"}, ["bwq"] = {"Southern Bobo Madaré"}, ["bwr"] = {"Bura-Pabir"}, ["bws"] = {"Bomboma"}, ["bwt"] = {"Bafaw-Balong"}, ["bwu"] = {"Buli (Ghana)"}, ["bww"] = {"Bwa"}, ["bwx"] = {"Bu-Nao Bunu"}, ["bwy"] = {"Cwi Bwamu"}, ["bwz"] = {"Bwisi"}, ["bxa"] = {"Tairaha"}, ["bxb"] = {"Belanda Bor"}, ["bxc"] = {"Molengue"}, ["bxd"] = {"Pela"}, ["bxe"] = {"Birale"}, ["bxf"] = {"Bilur", "Minigir"}, ["bxg"] = {"Bangala"}, ["bxh"] = {"Buhutu"}, ["bxi"] = {"Pirlatapa"}, ["bxj"] = {"Bayungu"}, ["bxk"] = {"Bukusu", "Lubukusu"}, ["bxl"] = {"Jalkunan"}, ["bxm"] = {"Mongolia Buriat"}, ["bxn"] = {"Burduna"}, ["bxo"] = {"Barikanchi"}, ["bxp"] = {"Bebil"}, ["bxq"] = {"Beele"}, ["bxr"] = {"Russia Buriat"}, ["bxs"] = {"Busam"}, ["bxu"] = {"China Buriat"}, ["bxv"] = {"Berakou"}, ["bxw"] = {"Bankagooma"}, ["bxz"] = {"Binahari"}, ["bya"] = {"Batak"}, ["byb"] = {"Bikya"}, ["byc"] = {"Ubaghara"}, ["byd"] = {"Benyadu'"}, ["bye"] = {"Pouye"}, ["byf"] = {"Bete"}, ["byg"] = {"Baygo"}, ["byh"] = {"Bhujel"}, ["byi"] = {"Buyu"}, ["byj"] = {"Bina (Nigeria)"}, ["byk"] = {"Biao"}, ["byl"] = {"Bayono"}, ["bym"] = {"Bidjara"}, ["byn"] = {"Bilin", "Blin"}, ["byo"] = {"Biyo"}, ["byp"] = {"Bumaji"}, ["byq"] = {"Basay"}, ["byr"] = {"Baruya", "Yipma"}, ["bys"] = {"Burak"}, ["byt"] = {"Berti"}, ["byv"] = {"Medumba"}, ["byw"] = {"Belhariya"}, ["byx"] = {"Qaqet"}, ["byz"] = {"Banaro"}, ["bza"] = {"Bandi"}, ["bzb"] = {"Andio"}, ["bzc"] = {"Southern Betsimisaraka Malagasy"}, ["bzd"] = {"Bribri"}, ["bze"] = {"Jenaama Bozo"}, ["bzf"] = {"Boikin"}, ["bzg"] = {"Babuza"}, ["bzh"] = {"Mapos Buang"}, ["bzi"] = {"Bisu"}, ["bzj"] = {"Belize Kriol English"}, ["bzk"] = {"Nicaragua Creole English"}, ["bzl"] = {"Boano (Sulawesi)"}, ["bzm"] = {"Bolondo"}, ["bzn"] = {"Boano (Maluku)"}, ["bzo"] = {"Bozaba"}, ["bzp"] = {"Kemberano"}, ["bzq"] = {"Buli (Indonesia)"}, ["bzr"] = {"Biri"}, ["bzs"] = {"Brazilian Sign Language"}, ["bzt"] = {"Brithenig"}, ["bzu"] = {"Burmeso"}, ["bzv"] = {"Naami"}, ["bzw"] = {"Basa (Nigeria)"}, ["bzx"] = {"Kɛlɛngaxo Bozo"}, ["bzy"] = {"Obanliku"}, ["bzz"] = {"Evant"}, ["caa"] = {"Chortí"}, ["cab"] = {"Garifuna"}, ["cac"] = {"Chuj"}, ["cad"] = {"Caddo"}, ["cae"] = {"Lehar", "Laalaa"}, ["caf"] = {"Southern Carrier"}, ["cag"] = {"Nivaclé"}, ["cah"] = {"Cahuarano"}, ["cai"] = {"Central American Indian languages"}, ["caj"] = {"Chané"}, ["cak"] = {"Kaqchikel", "Cakchiquel"}, ["cal"] = {"Carolinian"}, ["cam"] = {"Cemuhî"}, ["can"] = {"Chambri"}, ["cao"] = {"Chácobo"}, ["cap"] = {"Chipaya"}, ["caq"] = {"Car Nicobarese"}, ["car"] = {"Galibi Carib"}, ["cas"] = {"Tsimané"}, ["cau"] = {"Caucasian languages"}, ["cav"] = {"Cavineña"}, ["caw"] = {"Callawalla"}, ["cax"] = {"Chiquitano"}, ["cay"] = {"Cayuga"}, ["caz"] = {"Canichana"}, ["cba"] = {"Chibchan languages"}, ["cbb"] = {"Cabiyarí"}, ["cbc"] = {"Carapana"}, ["cbd"] = {"Carijona"}, ["cbg"] = {"Chimila"}, ["cbi"] = {"Chachi"}, ["cbj"] = {"Ede Cabe"}, ["cbk"] = {"Chavacano"}, ["cbl"] = {"Bualkhaw Chin"}, ["cbn"] = {"Nyahkur"}, ["cbo"] = {"Izora"}, ["cbq"] = {"Tsucuba", "Cuba"}, ["cbr"] = {"Cashibo-Cacataibo"}, ["cbs"] = {"Cashinahua"}, ["cbt"] = {"Chayahuita"}, ["cbu"] = {"Candoshi-Shapra"}, ["cbv"] = {"Cacua"}, ["cbw"] = {"Kinabalian"}, ["cby"] = {"Carabayo"}, ["ccc"] = {"Chamicuro"}, ["ccd"] = {"Cafundo Creole"}, ["cce"] = {"Chopi"}, ["ccg"] = {"Samba Daka"}, ["cch"] = {"Atsam"}, ["ccj"] = {"Kasanga"}, ["ccl"] = {"Cutchi-Swahili"}, ["ccm"] = {"Malaccan Creole Malay"}, ["ccn"] = {"North Caucasian languages"}, ["cco"] = {"Comaltepec Chinantec"}, ["ccp"] = {"Chakma"}, ["ccr"] = {"Cacaopera"}, ["ccs"] = {"South Caucasian languages"}, ["cda"] = {"Choni"}, ["cdc"] = {"Chadic languages"}, ["cdd"] = {"Caddoan languages"}, ["cde"] = {"Chenchu"}, ["cdf"] = {"Chiru"}, ["cdh"] = {"Chambeali"}, ["cdi"] = {"Chodri"}, ["cdj"] = {"Churahi"}, ["cdm"] = {"Chepang"}, ["cdn"] = {"Chaudangsi"}, ["cdo"] = {"Min Dong Chinese"}, ["cdr"] = {"Cinda-Regi-Tiyal"}, ["cds"] = {"Chadian Sign Language"}, ["cdy"] = {"Chadong"}, ["cdz"] = {"Koda"}, ["cea"] = {"Lower Chehalis"}, ["ceb"] = {"Cebuano"}, ["ceg"] = {"Chamacoco"}, ["cek"] = {"Eastern Khumi Chin"}, ["cel"] = {"Celtic languages"}, ["cen"] = {"Cen"}, ["cet"] = {"Centúúm"}, ["cey"] = {"Ekai Chin"}, ["cfa"] = {"Dijim-Bwilim"}, ["cfd"] = {"Cara"}, ["cfg"] = {"Como Karim"}, ["cfm"] = {"Falam Chin"}, ["cga"] = {"Changriwa"}, ["cgc"] = {"Kagayanen"}, ["cgg"] = {"Chiga"}, ["cgk"] = {"Chocangacakha"}, ["chb"] = {"Chibcha"}, ["chc"] = {"Catawba"}, ["chd"] = {"Highland Oaxaca Chontal"}, ["chf"] = {"Tabasco Chontal"}, ["chg"] = {"Chagatai"}, ["chh"] = {"Chinook"}, ["chj"] = {"Ojitlán Chinantec"}, ["chk"] = {"Chuukese"}, ["chl"] = {"Cahuilla"}, ["chm"] = {"Mari (Russia)"}, ["chn"] = {"Chinook jargon"}, ["cho"] = {"Choctaw"}, ["chp"] = {"Chipewyan", "Dene Suline"}, ["chq"] = {"Quiotepec Chinantec"}, ["chr"] = {"Cherokee"}, ["cht"] = {"Cholón"}, ["chw"] = {"Chuwabu"}, ["chx"] = {"Chantyal"}, ["chy"] = {"Cheyenne"}, ["chz"] = {"Ozumacín Chinantec"}, ["cia"] = {"Cia-Cia"}, ["cib"] = {"Ci Gbe"}, ["cic"] = {"Chickasaw"}, ["cid"] = {"Chimariko"}, ["cie"] = {"Cineni"}, ["cih"] = {"Chinali"}, ["cik"] = {"Chitkuli Kinnauri"}, ["cim"] = {"Cimbrian"}, ["cin"] = {"Cinta Larga"}, ["cip"] = {"Chiapanec"}, ["cir"] = {"Tiri", "Haméa", "Méa"}, ["ciw"] = {"Chippewa"}, ["ciy"] = {"Chaima"}, ["cja"] = {"Western Cham"}, ["cje"] = {"Chru"}, ["cjh"] = {"Upper Chehalis"}, ["cji"] = {"Chamalal"}, ["cjk"] = {"Chokwe"}, ["cjm"] = {"Eastern Cham"}, ["cjn"] = {"Chenapian"}, ["cjo"] = {"Ashéninka Pajonal"}, ["cjp"] = {"Cabécar"}, ["cjs"] = {"Shor"}, ["cjv"] = {"Chuave"}, ["cjy"] = {"Jinyu Chinese"}, ["ckb"] = {"Central Kurdish"}, ["ckh"] = {"Chak"}, ["ckl"] = {"Cibak"}, ["ckm"] = {"Chakavian"}, ["ckn"] = {"Kaang Chin"}, ["cko"] = {"Anufo"}, ["ckq"] = {"Kajakse"}, ["ckr"] = {"Kairak"}, ["cks"] = {"Tayo"}, ["ckt"] = {"Chukot"}, ["cku"] = {"Koasati"}, ["ckv"] = {"Kavalan"}, ["ckx"] = {"Caka"}, ["cky"] = {"Cakfem-Mushere"}, ["ckz"] = {"Cakchiquel-Quiché Mixed Language"}, ["cla"] = {"Ron"}, ["clc"] = {"Chilcotin"}, ["cld"] = {"Chaldean Neo-Aramaic"}, ["cle"] = {"Lealao Chinantec"}, ["clh"] = {"Chilisso"}, ["cli"] = {"Chakali"}, ["clj"] = {"Laitu Chin"}, ["clk"] = {"Idu-Mishmi"}, ["cll"] = {"Chala"}, ["clm"] = {"Clallam"}, ["clo"] = {"Lowland Oaxaca Chontal"}, ["clt"] = {"Lautu Chin"}, ["clu"] = {"Caluyanun"}, ["clw"] = {"Chulym"}, ["cly"] = {"Eastern Highland Chatino"}, ["cma"] = {"Maa"}, ["cmc"] = {"Chamic languages"}, ["cme"] = {"Cerma"}, ["cmg"] = {"Classical Mongolian"}, ["cmi"] = {"Emberá-Chamí"}, ["cml"] = {"Campalagian"}, ["cmm"] = {"Michigamea"}, ["cmn"] = {"Mandarin Chinese"}, ["cmo"] = {"Central Mnong"}, ["cmr"] = {"Mro-Khimi Chin"}, ["cms"] = {"Messapic"}, ["cmt"] = {"Camtho"}, ["cna"] = {"Changthang"}, ["cnb"] = {"Chinbon Chin"}, ["cnc"] = {"Côông"}, ["cng"] = {"Northern Qiang"}, ["cnh"] = {"Hakha Chin", "Haka Chin"}, ["cni"] = {"Asháninka"}, ["cnk"] = {"Khumi Chin"}, ["cnl"] = {"Lalana Chinantec"}, ["cno"] = {"Con"}, ["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"}, ["cnq"] = {"Chung"}, ["cnr"] = {"Montenegrin"}, ["cns"] = {"Central Asmat"}, ["cnt"] = {"Tepetotutla Chinantec"}, ["cnu"] = {"Chenoua"}, ["cnw"] = {"Ngawn Chin"}, ["cnx"] = {"Middle Cornish"}, ["coa"] = {"Cocos Islands Malay"}, ["cob"] = {"Chicomuceltec"}, ["coc"] = {"Cocopa"}, ["cod"] = {"Cocama-Cocamilla"}, ["coe"] = {"Koreguaje"}, ["cof"] = {"Colorado"}, ["cog"] = {"Chong"}, ["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"}, ["coj"] = {"Cochimi"}, ["cok"] = {"Santa Teresa Cora"}, ["col"] = {"Columbia-Wenatchi"}, ["com"] = {"Comanche"}, ["con"] = {"Cofán"}, ["coo"] = {"Comox"}, ["cop"] = {"Coptic"}, ["coq"] = {"Coquille"}, ["cot"] = {"Caquinte"}, ["cou"] = {"Wamey"}, ["cov"] = {"Cao Miao"}, ["cow"] = {"Cowlitz"}, ["cox"] = {"Nanti"}, ["coz"] = {"Chochotec"}, ["cpa"] = {"Palantla Chinantec"}, ["cpb"] = {"Ucayali-Yurúa Ashéninka"}, ["cpc"] = {"Ajyíninka Apurucayali"}, ["cpe"] = {"English-based creoles and pidgins"}, ["cpf"] = {"French-based creoles and pidgins"}, ["cpg"] = {"Cappadocian Greek"}, ["cpi"] = {"Chinese Pidgin English"}, ["cpn"] = {"Cherepon"}, ["cpo"] = {"Kpeego"}, ["cpp"] = {"Portuguese-based creoles and pidgins"}, ["cps"] = {"Capiznon"}, ["cpu"] = {"Pichis Ashéninka"}, ["cpx"] = {"Pu-Xian Chinese"}, ["cpy"] = {"South Ucayali Ashéninka"}, ["cqd"] = {"Chuanqiandian Cluster Miao"}, ["cra"] = {"Chara"}, ["crb"] = {"Island Carib"}, ["crc"] = {"Lonwolwol"}, ["crd"] = {"Coeur d'Alene"}, ["crf"] = {"Caramanta"}, ["crg"] = {"Michif"}, ["crh"] = {"Crimean Tatar", "Crimean Turkish"}, ["cri"] = {"Sãotomense"}, ["crj"] = {"Southern East Cree"}, ["crk"] = {"Plains Cree"}, ["crl"] = {"Northern East Cree"}, ["crm"] = {"Moose Cree"}, ["crn"] = {"El Nayar Cora"}, ["cro"] = {"Crow"}, ["crp"] = {"Creoles and pidgins"}, ["crq"] = {"Iyo'wujwa Chorote"}, ["crr"] = {"Carolina Algonquian"}, ["crs"] = {"Seselwa Creole French"}, ["crt"] = {"Iyojwa'ja Chorote"}, ["crv"] = {"Chaura"}, ["crw"] = {"Chrau"}, ["crx"] = {"Carrier"}, ["cry"] = {"Cori"}, ["crz"] = {"Cruzeño"}, ["csa"] = {"Chiltepec Chinantec"}, ["csb"] = {"Kashubian"}, ["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"}, ["csd"] = {"Chiangmai Sign Language"}, ["cse"] = {"Czech Sign Language"}, ["csf"] = {"Cuba Sign Language"}, ["csg"] = {"Chilean Sign Language"}, ["csh"] = {"Asho Chin"}, ["csi"] = {"Coast Miwok"}, ["csj"] = {"Songlai Chin"}, ["csk"] = {"Jola-Kasa"}, ["csl"] = {"Chinese Sign Language"}, ["csm"] = {"Central Sierra Miwok"}, ["csn"] = {"Colombian Sign Language"}, ["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"}, ["csp"] = {"Southern Ping Chinese", "Southern Pinghua"}, ["csq"] = {"Croatia Sign Language"}, ["csr"] = {"Costa Rican Sign Language"}, ["css"] = {"Southern Ohlone"}, ["cst"] = {"Northern Ohlone"}, ["csu"] = {"Central Sudanic languages"}, ["csv"] = {"Sumtu Chin"}, ["csw"] = {"Swampy Cree"}, ["csx"] = {"Cambodian Sign Language"}, ["csy"] = {"Siyin Chin"}, ["csz"] = {"Coos"}, ["cta"] = {"Tataltepec Chatino"}, ["ctc"] = {"Chetco"}, ["ctd"] = {"Tedim Chin"}, ["cte"] = {"Tepinapa Chinantec"}, ["ctg"] = {"Chittagonian"}, ["cth"] = {"Thaiphum Chin"}, ["ctl"] = {"Tlacoatzintepec Chinantec"}, ["ctm"] = {"Chitimacha"}, ["ctn"] = {"Chhintange"}, ["cto"] = {"Emberá-Catío"}, ["ctp"] = {"Western Highland Chatino"}, ["cts"] = {"Northern Catanduanes Bikol"}, ["ctt"] = {"Wayanad Chetti"}, ["ctu"] = {"Chol"}, ["cty"] = {"Moundadan Chetty"}, ["ctz"] = {"Zacatepec Chatino"}, ["cua"] = {"Cua"}, ["cub"] = {"Cubeo"}, ["cuc"] = {"Usila Chinantec"}, ["cuh"] = {"Chuka", "Gichuka"}, ["cui"] = {"Cuiba"}, ["cuj"] = {"Mashco Piro"}, ["cuk"] = {"San Blas Kuna"}, ["cul"] = {"Culina", "Kulina"}, ["cuo"] = {"Cumanagoto"}, ["cup"] = {"Cupeño"}, ["cuq"] = {"Cun"}, ["cur"] = {"Chhulung"}, ["cus"] = {"Cushitic languages"}, ["cut"] = {"Teutila Cuicatec"}, ["cuu"] = {"Tai Ya"}, ["cuv"] = {"Cuvok"}, ["cuw"] = {"Chukwa"}, ["cux"] = {"Tepeuxila Cuicatec"}, ["cuy"] = {"Cuitlatec"}, ["cvg"] = {"Chug"}, ["cvn"] = {"Valle Nacional Chinantec"}, ["cwa"] = {"Kabwa"}, ["cwb"] = {"Maindo"}, ["cwd"] = {"Woods Cree"}, ["cwe"] = {"Kwere"}, ["cwg"] = {"Chewong", "Cheq Wong"}, ["cwt"] = {"Kuwaataay"}, ["cxh"] = {"Cha'ari"}, ["cya"] = {"Nopala Chatino"}, ["cyb"] = {"Cayubaba"}, ["cyo"] = {"Cuyonon"}, ["czh"] = {"Huizhou Chinese"}, ["czk"] = {"Knaanic"}, ["czn"] = {"Zenzontepec Chatino"}, ["czo"] = {"Min Zhong Chinese"}, ["czt"] = {"Zotung Chin"}, ["daa"] = {"Dangaléat"}, ["dac"] = {"Dambi"}, ["dad"] = {"Marik"}, ["dae"] = {"Duupa"}, ["dag"] = {"Dagbani"}, ["dah"] = {"Gwahatike"}, ["dai"] = {"Day"}, ["daj"] = {"Dar Fur Daju"}, ["dak"] = {"Dakota"}, ["dal"] = {"Dahalo"}, ["dam"] = {"Damakawa"}, ["dao"] = {"Daai Chin"}, ["daq"] = {"Dandami Maria"}, ["dar"] = {"Dargwa"}, ["das"] = {"Daho-Doo"}, ["dau"] = {"Dar Sila Daju"}, ["dav"] = {"Taita", "Dawida"}, ["daw"] = {"Davawenyo"}, ["dax"] = {"Dayi"}, ["day"] = {"Land Dayak languages"}, ["daz"] = {"Dao"}, ["dba"] = {"Bangime"}, ["dbb"] = {"Deno"}, ["dbd"] = {"Dadiya"}, ["dbe"] = {"Dabe"}, ["dbf"] = {"Edopi"}, ["dbg"] = {"Dogul Dom Dogon"}, ["dbi"] = {"Doka"}, ["dbj"] = {"Ida'an"}, ["dbl"] = {"Dyirbal"}, ["dbm"] = {"Duguri"}, ["dbn"] = {"Duriankere"}, ["dbo"] = {"Dulbu"}, ["dbp"] = {"Duwai"}, ["dbq"] = {"Daba"}, ["dbr"] = {"Dabarre"}, ["dbt"] = {"Ben Tey Dogon"}, ["dbu"] = {"Bondum Dom Dogon"}, ["dbv"] = {"Dungu"}, ["dbw"] = {"Bankan Tey Dogon"}, ["dby"] = {"Dibiyaso"}, ["dcc"] = {"Deccan"}, ["dcr"] = {"Negerhollands"}, ["dda"] = {"Dadi Dadi"}, ["ddd"] = {"Dongotono"}, ["dde"] = {"Doondo"}, ["ddg"] = {"Fataluku"}, ["ddi"] = {"West Goodenough"}, ["ddj"] = {"Jaru"}, ["ddn"] = {"Dendi (Benin)"}, ["ddo"] = {"Dido"}, ["ddr"] = {"Dhudhuroa"}, ["dds"] = {"Donno So Dogon"}, ["ddw"] = {"Dawera-Daweloor"}, ["dec"] = {"Dagik"}, ["ded"] = {"Dedua"}, ["dee"] = {"Dewoin"}, ["def"] = {"Dezfuli"}, ["deg"] = {"Degema"}, ["deh"] = {"Dehwari"}, ["dei"] = {"Demisa"}, ["dek"] = {"Dek"}, ["del"] = {"Delaware"}, ["dem"] = {"Dem"}, ["den"] = {"Slave (Athapascan)"}, ["dep"] = {"Pidgin Delaware"}, ["deq"] = {"Dendi (Central African Republic)"}, ["der"] = {"Deori"}, ["des"] = {"Desano"}, ["dev"] = {"Domung"}, ["dez"] = {"Dengese"}, ["dga"] = {"Southern Dagaare"}, ["dgb"] = {"Bunoge Dogon"}, ["dgc"] = {"Casiguran Dumagat Agta"}, ["dgd"] = {"Dagaari Dioula"}, ["dge"] = {"Degenan"}, ["dgg"] = {"Doga"}, ["dgh"] = {"Dghwede"}, ["dgi"] = {"Northern Dagara"}, ["dgk"] = {"Dagba"}, ["dgl"] = {"Andaandi", "Dongolawi"}, ["dgn"] = {"Dagoman"}, ["dgo"] = {"Dogri (individual language)"}, ["dgr"] = {"Dogrib", "Tłı̨chǫ"}, ["dgs"] = {"Dogoso"}, ["dgt"] = {"Ndra'ngith"}, ["dgw"] = {"Daungwurrung"}, ["dgx"] = {"Doghoro"}, ["dgz"] = {"Daga"}, ["dhd"] = {"Dhundari"}, ["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"}, ["dhi"] = {"Dhimal"}, ["dhl"] = {"Dhalandji"}, ["dhm"] = {"Zemba"}, ["dhn"] = {"Dhanki"}, ["dho"] = {"Dhodia"}, ["dhr"] = {"Dhargari"}, ["dhs"] = {"Dhaiso"}, ["dhu"] = {"Dhurga"}, ["dhv"] = {"Dehu", "Drehu"}, ["dhw"] = {"Dhanwar (Nepal)"}, ["dhx"] = {"Dhungaloo"}, ["dia"] = {"Dia"}, ["dib"] = {"South Central Dinka"}, ["dic"] = {"Lakota Dida"}, ["did"] = {"Didinga"}, ["dif"] = {"Dieri", "Diyari"}, ["dig"] = {"Digo", "Chidigo"}, ["dih"] = {"Kumiai"}, ["dii"] = {"Dimbong"}, ["dij"] = {"Dai"}, ["dik"] = {"Southwestern Dinka"}, ["dil"] = {"Dilling"}, ["dim"] = {"Dime"}, ["din"] = {"Dinka"}, ["dio"] = {"Dibo"}, ["dip"] = {"Northeastern Dinka"}, ["diq"] = {"Dimli (individual language)"}, ["dir"] = {"Dirim"}, ["dis"] = {"Dimasa"}, ["diu"] = {"Diriku"}, ["diw"] = {"Northwestern Dinka"}, ["dix"] = {"Dixon Reef"}, ["diy"] = {"Diuwe"}, ["diz"] = {"Ding"}, ["dja"] = {"Djadjawurrung"}, ["djb"] = {"Djinba"}, ["djc"] = {"Dar Daju Daju"}, ["djd"] = {"Djamindjung", "Ngaliwurru"}, ["dje"] = {"Zarma"}, ["djf"] = {"Djangun"}, ["dji"] = {"Djinang"}, ["djj"] = {"Djeebbana"}, ["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"}, ["djm"] = {"Jamsay Dogon"}, ["djn"] = {"Jawoyn", "Djauan"}, ["djo"] = {"Jangkang"}, ["djr"] = {"Djambarrpuyngu"}, ["dju"] = {"Kapriman"}, ["djw"] = {"Djawi"}, ["dka"] = {"Dakpakha"}, ["dkg"] = {"Kadung"}, ["dkk"] = {"Dakka"}, ["dkr"] = {"Kuijau"}, ["dks"] = {"Southeastern Dinka"}, ["dkx"] = {"Mazagway"}, ["dlg"] = {"Dolgan"}, ["dlk"] = {"Dahalik"}, ["dlm"] = {"Dalmatian"}, ["dln"] = {"Darlong"}, ["dma"] = {"Duma"}, ["dmb"] = {"Mombo Dogon"}, ["dmc"] = {"Gavak"}, ["dmd"] = {"Madhi Madhi"}, ["dme"] = {"Dugwor"}, ["dmf"] = {"Medefaidrin"}, ["dmg"] = {"Upper Kinabatangan"}, ["dmk"] = {"Domaaki"}, ["dml"] = {"Dameli"}, ["dmm"] = {"Dama"}, ["dmn"] = {"Mande languages"}, ["dmo"] = {"Kemedzung"}, ["dmr"] = {"East Damar"}, ["dms"] = {"Dampelas"}, ["dmu"] = {"Dubu", "Tebi"}, ["dmv"] = {"Dumpas"}, ["dmw"] = {"Mudburra"}, ["dmx"] = {"Dema"}, ["dmy"] = {"Demta", "Sowari"}, ["dna"] = {"Upper Grand Valley Dani"}, ["dnd"] = {"Daonda"}, ["dne"] = {"Ndendeule"}, ["dng"] = {"Dungan"}, ["dni"] = {"Lower Grand Valley Dani"}, ["dnj"] = {"Dan"}, ["dnk"] = {"Dengka"}, ["dnn"] = {"Dzùùngoo"}, ["dno"] = {"Ndrulo", "Northern Lendu"}, ["dnr"] = {"Danaru"}, ["dnt"] = {"Mid Grand Valley Dani"}, ["dnu"] = {"Danau"}, ["dnv"] = {"Danu"}, ["dnw"] = {"Western Dani"}, ["dny"] = {"Dení"}, ["doa"] = {"Dom"}, ["dob"] = {"Dobu"}, ["doc"] = {"Northern Dong"}, ["doe"] = {"Doe"}, ["dof"] = {"Domu"}, ["doh"] = {"Dong"}, ["doi"] = {"Dogri (macrolanguage)"}, ["dok"] = {"Dondo"}, ["dol"] = {"Doso"}, ["don"] = {"Toura (Papua New Guinea)"}, ["doo"] = {"Dongo"}, ["dop"] = {"Lukpa"}, ["doq"] = {"Dominican Sign Language"}, ["dor"] = {"Dori'o"}, ["dos"] = {"Dogosé"}, ["dot"] = {"Dass"}, ["dov"] = {"Dombe"}, ["dow"] = {"Doyayo"}, ["dox"] = {"Bussa"}, ["doy"] = {"Dompo"}, ["doz"] = {"Dorze"}, ["dpp"] = {"Papar"}, ["dra"] = {"Dravidian languages"}, ["drb"] = {"Dair"}, ["drc"] = {"Minderico"}, ["drd"] = {"Darmiya"}, ["dre"] = {"Dolpo"}, ["drg"] = {"Rungus"}, ["dri"] = {"C'Lela"}, ["drl"] = {"Paakantyi"}, ["drn"] = {"West Damar"}, ["dro"] = {"Daro-Matu Melanau"}, ["drq"] = {"Dura"}, ["drs"] = {"Gedeo"}, ["drt"] = {"Drents"}, ["dru"] = {"Rukai"}, ["dry"] = {"Darai"}, ["dsb"] = {"Lower Sorbian"}, ["dse"] = {"Dutch Sign Language"}, ["dsh"] = {"Daasanach"}, ["dsi"] = {"Disa"}, ["dsk"] = {"Dokshi"}, ["dsl"] = {"Danish Sign Language"}, ["dsn"] = {"Dusner"}, ["dso"] = {"Desiya"}, ["dsq"] = {"Tadaksahak"}, ["dsz"] = {"Mardin Sign Language"}, ["dta"] = {"Daur"}, ["dtb"] = {"Labuk-Kinabatangan Kadazan"}, ["dtd"] = {"Ditidaht"}, ["dth"] = {"Adithinngithigh"}, ["dti"] = {"Ana Tinga Dogon"}, ["dtk"] = {"Tene Kan Dogon"}, ["dtm"] = {"Tomo Kan Dogon"}, ["dtn"] = {"Daatsʼíin"}, ["dto"] = {"Tommo So Dogon"}, ["dtp"] = {"Kadazan Dusun", "Central Dusun"}, ["dtr"] = {"Lotud"}, ["dts"] = {"Toro So Dogon"}, ["dtt"] = {"Toro Tegu Dogon"}, ["dtu"] = {"Tebul Ure Dogon"}, ["dty"] = {"Dotyali"}, ["dua"] = {"Duala"}, ["dub"] = {"Dubli"}, ["duc"] = {"Duna"}, ["due"] = {"Umiray Dumaget Agta"}, ["duf"] = {"Dumbea", "Drubea"}, ["dug"] = {"Duruma", "Chiduruma"}, ["duh"] = {"Dungra Bhil"}, ["dui"] = {"Dumun"}, ["duk"] = {"Uyajitaya"}, ["dul"] = {"Alabat Island Agta"}, ["dum"] = {"Middle Dutch (ca. 1050-1350)"}, ["dun"] = {"Dusun Deyah"}, ["duo"] = {"Dupaninan Agta"}, ["dup"] = {"Duano"}, ["duq"] = {"Dusun Malang"}, ["dur"] = {"Dii"}, ["dus"] = {"Dumi"}, ["duu"] = {"Drung"}, ["duv"] = {"Duvle"}, ["duw"] = {"Dusun Witu"}, ["dux"] = {"Duungooma"}, ["duy"] = {"Dicamay Agta"}, ["duz"] = {"Duli-Gey"}, ["dva"] = {"Duau"}, ["dwa"] = {"Diri"}, ["dwk"] = {"Dawik Kui"}, ["dwr"] = {"Dawro"}, ["dws"] = {"Dutton World Speedwords"}, ["dwu"] = {"Dhuwal"}, ["dww"] = {"Dawawa"}, ["dwy"] = {"Dhuwaya"}, ["dwz"] = {"Dewas Rai"}, ["dya"] = {"Dyan"}, ["dyb"] = {"Dyaberdyaber"}, ["dyd"] = {"Dyugun"}, ["dyg"] = {"Villa Viciosa Agta"}, ["dyi"] = {"Djimini Senoufo"}, ["dym"] = {"Yanda Dom Dogon"}, ["dyn"] = {"Dyangadi", "Dhanggatti"}, ["dyo"] = {"Jola-Fonyi"}, ["dyr"] = {"Dyarim"}, ["dyu"] = {"Dyula"}, ["dyy"] = {"Djabugay", "Dyaabugay"}, ["dza"] = {"Tunzu"}, ["dzd"] = {"Daza"}, ["dze"] = {"Djiwarli"}, ["dzg"] = {"Dazaga"}, ["dzl"] = {"Dzalakha"}, ["dzn"] = {"Dzando"}, ["eaa"] = {"Karenggapa"}, ["ebc"] = {"Beginci"}, ["ebg"] = {"Ebughu"}, ["ebk"] = {"Eastern Bontok"}, ["ebo"] = {"Teke-Ebo"}, ["ebr"] = {"Ebrié"}, ["ebu"] = {"Embu", "Kiembu"}, ["ecr"] = {"Eteocretan"}, ["ecs"] = {"Ecuadorian Sign Language"}, ["ecy"] = {"Eteocypriot"}, ["eee"] = {"E"}, ["efa"] = {"Efai"}, ["efe"] = {"Efe"}, ["efi"] = {"Efik"}, ["ega"] = {"Ega"}, ["egl"] = {"Emilian"}, ["egm"] = {"Benamanga"}, ["ego"] = {"Eggon"}, ["egx"] = {"Egyptian languages"}, ["egy"] = {"Egyptian (Ancient)"}, ["ehs"] = {"Miyakubo Sign Language"}, ["ehu"] = {"Ehueun"}, ["eip"] = {"Eipomek"}, ["eit"] = {"Eitiep"}, ["eiv"] = {"Askopan"}, ["eja"] = {"Ejamat"}, ["eka"] = {"Ekajuk"}, ["eke"] = {"Ekit"}, ["ekg"] = {"Ekari"}, ["eki"] = {"Eki"}, ["ekk"] = {"Standard Estonian"}, ["ekl"] = {"Kol (Bangladesh)", "Kol"}, ["ekm"] = {"Elip"}, ["eko"] = {"Koti"}, ["ekp"] = {"Ekpeye"}, ["ekr"] = {"Yace"}, ["eky"] = {"Eastern Kayah"}, ["ele"] = {"Elepi"}, ["elh"] = {"El Hugeirat"}, ["eli"] = {"Nding"}, ["elk"] = {"Elkei"}, ["elm"] = {"Eleme"}, ["elo"] = {"El Molo"}, ["elu"] = {"Elu"}, ["elx"] = {"Elamite"}, ["ema"] = {"Emai-Iuleha-Ora"}, ["emb"] = {"Embaloh"}, ["eme"] = {"Emerillon"}, ["emg"] = {"Eastern Meohang"}, ["emi"] = {"Mussau-Emira"}, ["emk"] = {"Eastern Maninkakan"}, ["emm"] = {"Mamulique"}, ["emn"] = {"Eman"}, ["emp"] = {"Northern Emberá"}, ["emq"] = {"Eastern Minyag"}, ["ems"] = {"Pacific Gulf Yupik"}, ["emu"] = {"Eastern Muria"}, ["emw"] = {"Emplawas"}, ["emx"] = {"Erromintxela"}, ["emy"] = {"Epigraphic Mayan"}, ["emz"] = {"Mbessa"}, ["ena"] = {"Apali"}, ["enb"] = {"Markweeta"}, ["enc"] = {"En"}, ["end"] = {"Ende"}, ["enf"] = {"Forest Enets"}, ["enh"] = {"Tundra Enets"}, ["enl"] = {"Enlhet"}, ["enm"] = {"Middle English (1100-1500)"}, ["enn"] = {"Engenni"}, ["eno"] = {"Enggano"}, ["enq"] = {"Enga"}, ["enr"] = {"Emumu", "Emem"}, ["enu"] = {"Enu"}, ["env"] = {"Enwan (Edo State)"}, ["enw"] = {"Enwan (Akwa Ibom State)"}, ["enx"] = {"Enxet"}, ["eot"] = {"Beti (Côte d'Ivoire)"}, ["epi"] = {"Epie"}, ["era"] = {"Eravallan"}, ["erg"] = {"Sie"}, ["erh"] = {"Eruwa"}, ["eri"] = {"Ogea"}, ["erk"] = {"South Efate"}, ["ero"] = {"Horpa"}, ["err"] = {"Erre"}, ["ers"] = {"Ersu"}, ["ert"] = {"Eritai"}, ["erw"] = {"Erokwanas"}, ["ese"] = {"Ese Ejja"}, ["esg"] = {"Aheri Gondi"}, ["esh"] = {"Eshtehardi"}, ["esi"] = {"North Alaskan Inupiatun"}, ["esk"] = {"Northwest Alaska Inupiatun"}, ["esl"] = {"Egypt Sign Language"}, ["esm"] = {"Esuma"}, ["esn"] = {"Salvadoran Sign Language"}, ["eso"] = {"Estonian Sign Language"}, ["esq"] = {"Esselen"}, ["ess"] = {"Central Siberian Yupik"}, ["esu"] = {"Central Yupik"}, ["esx"] = {"Eskimo-Aleut languages"}, ["esy"] = {"Eskayan"}, ["etb"] = {"Etebi"}, ["etc"] = {"Etchemin"}, ["eth"] = {"Ethiopian Sign Language"}, ["etn"] = {"Eton (Vanuatu)"}, ["eto"] = {"Eton (Cameroon)"}, ["etr"] = {"Edolo"}, ["ets"] = {"Yekhee"}, ["ett"] = {"Etruscan"}, ["etu"] = {"Ejagham"}, ["etx"] = {"Eten"}, ["etz"] = {"Semimi"}, ["eud"] = {"Eudeve"}, ["euq"] = {"Basque (family)"}, ["eve"] = {"Even"}, ["evh"] = {"Uvbie"}, ["evn"] = {"Evenki"}, ["ewo"] = {"Ewondo"}, ["ext"] = {"Extremaduran"}, ["eya"] = {"Eyak"}, ["eyo"] = {"Keiyo"}, ["eza"] = {"Ezaa"}, ["eze"] = {"Uzekwe"}, ["faa"] = {"Fasu"}, ["fab"] = {"Fa d'Ambu"}, ["fad"] = {"Wagi"}, ["faf"] = {"Fagani"}, ["fag"] = {"Finongan"}, ["fah"] = {"Baissa Fali"}, ["fai"] = {"Faiwol"}, ["faj"] = {"Faita"}, ["fak"] = {"Fang (Cameroon)"}, ["fal"] = {"South Fali"}, ["fam"] = {"Fam"}, ["fan"] = {"Fang (Equatorial Guinea)"}, ["fap"] = {"Paloor"}, ["far"] = {"Fataleka"}, ["fat"] = {"Fanti"}, ["fau"] = {"Fayu"}, ["fax"] = {"Fala"}, ["fay"] = {"Southwestern Fars"}, ["faz"] = {"Northwestern Fars"}, ["fbl"] = {"West Albay Bikol"}, ["fcs"] = {"Quebec Sign Language"}, ["fer"] = {"Feroge"}, ["ffi"] = {"Foia Foia"}, ["ffm"] = {"Maasina Fulfulde"}, ["fgr"] = {"Fongoro"}, ["fia"] = {"Nobiin"}, ["fie"] = {"Fyer"}, ["fif"] = {"Faifi"}, ["fil"] = {"Filipino", "Pilipino"}, ["fip"] = {"Fipa"}, ["fir"] = {"Firan"}, ["fit"] = {"Tornedalen Finnish", "Meänkieli"}, ["fiu"] = {"Finno-Ugrian languages"}, ["fiw"] = {"Fiwaga"}, ["fkk"] = {"Kirya-Konzəl"}, ["fkv"] = {"Kven Finnish"}, ["fla"] = {"Kalispel-Pend d'Oreille"}, ["flh"] = {"Foau"}, ["fli"] = {"Fali"}, ["fll"] = {"North Fali"}, ["fln"] = {"Flinders Island"}, ["flr"] = {"Fuliiru"}, ["fly"] = {"Flaaitaal", "Tsotsitaal"}, ["fmp"] = {"Fe'fe'"}, ["fmu"] = {"Far Western Muria"}, ["fnb"] = {"Fanbak"}, ["fng"] = {"Fanagalo"}, ["fni"] = {"Fania"}, ["fod"] = {"Foodo"}, ["foi"] = {"Foi"}, ["fom"] = {"Foma"}, ["fon"] = {"Fon"}, ["for"] = {"Fore"}, ["fos"] = {"Siraya"}, ["fox"] = {"Formosan languages"}, ["fpe"] = {"Fernando Po Creole English"}, ["fqs"] = {"Fas"}, ["frc"] = {"Cajun French"}, ["frd"] = {"Fordata"}, ["frk"] = {"Frankish"}, ["frm"] = {"Middle French (ca. 1400-1600)"}, ["fro"] = {"Old French (842-ca. 1400)"}, ["frp"] = {"Arpitan", "Francoprovençal"}, ["frq"] = {"Forak"}, ["frr"] = {"Northern Frisian"}, ["frs"] = {"Eastern Frisian"}, ["frt"] = {"Fortsenal"}, ["fse"] = {"Finnish Sign Language"}, ["fsl"] = {"French Sign Language"}, ["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"}, ["fub"] = {"Adamawa Fulfulde"}, ["fuc"] = {"Pulaar"}, ["fud"] = {"East Futuna"}, ["fue"] = {"Borgu Fulfulde"}, ["fuf"] = {"Pular"}, ["fuh"] = {"Western Niger Fulfulde"}, ["fui"] = {"Bagirmi Fulfulde"}, ["fuj"] = {"Ko"}, ["fum"] = {"Fum"}, ["fun"] = {"Fulniô"}, ["fuq"] = {"Central-Eastern Niger Fulfulde"}, ["fur"] = {"Friulian"}, ["fut"] = {"Futuna-Aniwa"}, ["fuu"] = {"Furu"}, ["fuv"] = {"Nigerian Fulfulde"}, ["fuy"] = {"Fuyug"}, ["fvr"] = {"Fur"}, ["fwa"] = {"Fwâi"}, ["fwe"] = {"Fwe"}, ["gaa"] = {"Ga"}, ["gab"] = {"Gabri"}, ["gac"] = {"Mixed Great Andamanese"}, ["gad"] = {"Gaddang"}, ["gae"] = {"Guarequena"}, ["gaf"] = {"Gende"}, ["gag"] = {"Gagauz"}, ["gah"] = {"Alekano"}, ["gai"] = {"Borei"}, ["gaj"] = {"Gadsup"}, ["gak"] = {"Gamkonora"}, ["gal"] = {"Galolen"}, ["gam"] = {"Kandawo"}, ["gan"] = {"Gan Chinese"}, ["gao"] = {"Gants"}, ["gap"] = {"Gal"}, ["gaq"] = {"Gata'"}, ["gar"] = {"Galeya"}, ["gas"] = {"Adiwasi Garasia"}, ["gat"] = {"Kenati"}, ["gau"] = {"Mudhili Gadaba"}, ["gaw"] = {"Nobonob"}, ["gax"] = {"Borana-Arsi-Guji Oromo"}, ["gay"] = {"Gayo"}, ["gaz"] = {"West Central Oromo"}, ["gba"] = {"Gbaya (Central African Republic)"}, ["gbb"] = {"Kaytetye"}, ["gbd"] = {"Karajarri"}, ["gbe"] = {"Niksek"}, ["gbf"] = {"Gaikundi"}, ["gbg"] = {"Gbanziri"}, ["gbh"] = {"Defi Gbe"}, ["gbi"] = {"Galela"}, ["gbj"] = {"Bodo Gadaba"}, ["gbk"] = {"Gaddi"}, ["gbl"] = {"Gamit"}, ["gbm"] = {"Garhwali"}, ["gbn"] = {"Mo'da"}, ["gbo"] = {"Northern Grebo"}, ["gbp"] = {"Gbaya-Bossangoa"}, ["gbq"] = {"Gbaya-Bozoum"}, ["gbr"] = {"Gbagyi"}, ["gbs"] = {"Gbesi Gbe"}, ["gbu"] = {"Gagadu"}, ["gbv"] = {"Gbanu"}, ["gbw"] = {"Gabi-Gabi"}, ["gbx"] = {"Eastern Xwla Gbe"}, ["gby"] = {"Gbari"}, ["gbz"] = {"Zoroastrian Dari"}, ["gcc"] = {"Mali"}, ["gcd"] = {"Ganggalida"}, ["gce"] = {"Galice"}, ["gcf"] = {"Guadeloupean Creole French"}, ["gcl"] = {"Grenadian Creole English"}, ["gcn"] = {"Gaina"}, ["gcr"] = {"Guianese Creole French"}, ["gct"] = {"Colonia Tovar German"}, ["gda"] = {"Gade Lohar"}, ["gdb"] = {"Pottangi Ollar Gadaba"}, ["gdc"] = {"Gugu Badhun"}, ["gdd"] = {"Gedaged"}, ["gde"] = {"Gude"}, ["gdf"] = {"Guduf-Gava"}, ["gdg"] = {"Ga'dang"}, ["gdh"] = {"Gadjerawang", "Gajirrabeng"}, ["gdi"] = {"Gundi"}, ["gdj"] = {"Gurdjar"}, ["gdk"] = {"Gadang"}, ["gdl"] = {"Dirasha"}, ["gdm"] = {"Laal"}, ["gdn"] = {"Umanakaina"}, ["gdo"] = {"Ghodoberi"}, ["gdq"] = {"Mehri"}, ["gdr"] = {"Wipi"}, ["gds"] = {"Ghandruk Sign Language"}, ["gdt"] = {"Kungardutyi"}, ["gdu"] = {"Gudu"}, ["gdx"] = {"Godwari"}, ["gea"] = {"Geruma"}, ["geb"] = {"Kire"}, ["gec"] = {"Gboloo Grebo"}, ["ged"] = {"Gade"}, ["gef"] = {"Gerai"}, ["geg"] = {"Gengle"}, ["geh"] = {"Hutterite German", "Hutterisch"}, ["gei"] = {"Gebe"}, ["gej"] = {"Gen"}, ["gek"] = {"Ywom"}, ["gel"] = {"ut-Ma'in"}, ["gem"] = {"Germanic languages"}, ["geq"] = {"Geme"}, ["ges"] = {"Geser-Gorom"}, ["gev"] = {"Eviya"}, ["gew"] = {"Gera"}, ["gex"] = {"Garre"}, ["gey"] = {"Enya"}, ["gez"] = {"Geez"}, ["gfk"] = {"Patpatar"}, ["gft"] = {"Gafat"}, ["gga"] = {"Gao"}, ["ggb"] = {"Gbii"}, ["ggd"] = {"Gugadj"}, ["gge"] = {"Gurr-goni"}, ["ggg"] = {"Gurgula"}, ["ggk"] = {"Kungarakany"}, ["ggl"] = {"Ganglau"}, ["ggt"] = {"Gitua"}, ["ggu"] = {"Gagu", "Gban"}, ["ggw"] = {"Gogodala"}, ["gha"] = {"Ghadamès"}, ["ghc"] = {"Hiberno-Scottish Gaelic"}, ["ghe"] = {"Southern Ghale"}, ["ghh"] = {"Northern Ghale"}, ["ghk"] = {"Geko Karen"}, ["ghl"] = {"Ghulfan"}, ["ghn"] = {"Ghanongga"}, ["gho"] = {"Ghomara"}, ["ghr"] = {"Ghera"}, ["ghs"] = {"Guhu-Samane"}, ["ght"] = {"Kuke", "Kutang Ghale"}, ["gia"] = {"Kija"}, ["gib"] = {"Gibanawa"}, ["gic"] = {"Gail"}, ["gid"] = {"Gidar"}, ["gie"] = {"Gaɓogbo", "Guébie"}, ["gig"] = {"Goaria"}, ["gih"] = {"Githabul"}, ["gii"] = {"Girirra"}, ["gil"] = {"Gilbertese"}, ["gim"] = {"Gimi (Eastern Highlands)"}, ["gin"] = {"Hinukh"}, ["gip"] = {"Gimi (West New Britain)"}, ["giq"] = {"Green Gelao"}, ["gir"] = {"Red Gelao"}, ["gis"] = {"North Giziga"}, ["git"] = {"Gitxsan"}, ["giu"] = {"Mulao"}, ["giw"] = {"White Gelao"}, ["gix"] = {"Gilima"}, ["giy"] = {"Giyug"}, ["giz"] = {"South Giziga"}, ["gjk"] = {"Kachi Koli"}, ["gjm"] = {"Gunditjmara"}, ["gjn"] = {"Gonja"}, ["gjr"] = {"Gurindji Kriol"}, ["gju"] = {"Gujari"}, ["gka"] = {"Guya"}, ["gkd"] = {"Magɨ (Madang Province)"}, ["gke"] = {"Ndai"}, ["gkn"] = {"Gokana"}, ["gko"] = {"Kok-Nar"}, ["gkp"] = {"Guinea Kpelle"}, ["gku"] = {"ǂUngkue"}, ["glb"] = {"Belning"}, ["glc"] = {"Bon Gula"}, ["gld"] = {"Nanai"}, ["glh"] = {"Northwest Pashai", "Northwest Pashayi"}, ["glj"] = {"Gula Iro"}, ["glk"] = {"Gilaki"}, ["gll"] = {"Garlali"}, ["glo"] = {"Galambu"}, ["glr"] = {"Glaro-Twabo"}, ["glu"] = {"Gula (Chad)"}, ["glw"] = {"Glavda"}, ["gly"] = {"Gule"}, ["gma"] = {"Gambera"}, ["gmb"] = {"Gula'alaa"}, ["gmd"] = {"Mághdì"}, ["gme"] = {"East Germanic languages"}, ["gmg"] = {"Magɨyi"}, ["gmh"] = {"Middle High German (ca. 1050-1500)"}, ["gml"] = {"Middle Low German"}, ["gmm"] = {"Gbaya-Mbodomo"}, ["gmn"] = {"Gimnime"}, ["gmq"] = {"North Germanic languages"}, ["gmr"] = {"Mirning", "Mirniny"}, ["gmu"] = {"Gumalu"}, ["gmv"] = {"Gamo"}, ["gmw"] = {"West Germanic languages"}, ["gmx"] = {"Magoma"}, ["gmy"] = {"Mycenaean Greek"}, ["gmz"] = {"Mgbolizhia"}, ["gna"] = {"Kaansa"}, ["gnb"] = {"Gangte"}, ["gnc"] = {"Guanche"}, ["gnd"] = {"Zulgo-Gemzek"}, ["gne"] = {"Ganang"}, ["gng"] = {"Ngangam"}, ["gnh"] = {"Lere"}, ["gni"] = {"Gooniyandi"}, ["gnj"] = {"Ngen"}, ["gnk"] = {"ǁGana"}, ["gnl"] = {"Gangulu"}, ["gnm"] = {"Ginuman"}, ["gnn"] = {"Gumatj"}, ["gno"] = {"Northern Gondi"}, ["gnq"] = {"Gana"}, ["gnr"] = {"Gureng Gureng"}, ["gnt"] = {"Guntai"}, ["gnu"] = {"Gnau"}, ["gnw"] = {"Western Bolivian Guaraní"}, ["gnz"] = {"Ganzi"}, ["goa"] = {"Guro"}, ["gob"] = {"Playero"}, ["goc"] = {"Gorakor"}, ["god"] = {"Godié"}, ["goe"] = {"Gongduk"}, ["gof"] = {"Gofa"}, ["gog"] = {"Gogo"}, ["goh"] = {"Old High German (ca. 750-1050)"}, ["goi"] = {"Gobasi"}, ["goj"] = {"Gowlan"}, ["gok"] = {"Gowli"}, ["gol"] = {"Gola"}, ["gom"] = {"Goan Konkani"}, ["gon"] = {"Gondi"}, ["goo"] = {"Gone Dau"}, ["gop"] = {"Yeretuar"}, ["goq"] = {"Gorap"}, ["gor"] = {"Gorontalo"}, ["gos"] = {"Gronings"}, ["got"] = {"Gothic"}, ["gou"] = {"Gavar"}, ["gov"] = {"Goo"}, ["gow"] = {"Gorowa"}, ["gox"] = {"Gobu"}, ["goy"] = {"Goundo"}, ["goz"] = {"Gozarkhani"}, ["gpa"] = {"Gupa-Abawa"}, ["gpe"] = {"Ghanaian Pidgin English"}, ["gpn"] = {"Taiap"}, ["gqa"] = {"Ga'anda"}, ["gqi"] = {"Guiqiong"}, ["gqn"] = {"Guana (Brazil)"}, ["gqr"] = {"Gor"}, ["gqu"] = {"Qau"}, ["gra"] = {"Rajput Garasia"}, ["grb"] = {"Grebo"}, ["grc"] = {"Ancient Greek (to 1453)"}, ["grd"] = {"Guruntum-Mbaaru"}, ["grg"] = {"Madi"}, ["grh"] = {"Gbiri-Niragu"}, ["gri"] = {"Ghari"}, ["grj"] = {"Southern Grebo"}, ["grk"] = {"Greek languages"}, ["grm"] = {"Kota Marudu Talantang"}, ["gro"] = {"Groma"}, ["grq"] = {"Gorovu"}, ["grr"] = {"Taznatit"}, ["grs"] = {"Gresi"}, ["grt"] = {"Garo"}, ["gru"] = {"Kistane"}, ["grv"] = {"Central Grebo"}, ["grw"] = {"Gweda"}, ["grx"] = {"Guriaso"}, ["gry"] = {"Barclayville Grebo"}, ["grz"] = {"Guramalum"}, ["gse"] = {"Ghanaian Sign Language"}, ["gsg"] = {"German Sign Language"}, ["gsl"] = {"Gusilay"}, ["gsm"] = {"Guatemalan Sign Language"}, ["gsn"] = {"Nema", "Gusan"}, ["gso"] = {"Southwest Gbaya"}, ["gsp"] = {"Wasembo"}, ["gss"] = {"Greek Sign Language"}, ["gsw"] = {"Swiss German", "Alemannic", "Alsatian"}, ["gta"] = {"Guató"}, ["gtu"] = {"Aghu-Tharnggala"}, ["gua"] = {"Shiki"}, ["gub"] = {"Guajajára"}, ["guc"] = {"Wayuu"}, ["gud"] = {"Yocoboué Dida"}, ["gue"] = {"Gurindji"}, ["guf"] = {"Gupapuyngu"}, ["gug"] = {"Paraguayan Guaraní"}, ["guh"] = {"Guahibo"}, ["gui"] = {"Eastern Bolivian Guaraní"}, ["guk"] = {"Gumuz"}, ["gul"] = {"Sea Island Creole English"}, ["gum"] = {"Guambiano"}, ["gun"] = {"Mbyá Guaraní"}, ["guo"] = {"Guayabero"}, ["gup"] = {"Gunwinggu"}, ["guq"] = {"Aché"}, ["gur"] = {"Farefare"}, ["gus"] = {"Guinean Sign Language"}, ["gut"] = {"Maléku Jaíka"}, ["guu"] = {"Yanomamö"}, ["guw"] = {"Gun"}, ["gux"] = {"Gourmanchéma"}, ["guz"] = {"Gusii", "Ekegusii"}, ["gva"] = {"Guana (Paraguay)"}, ["gvc"] = {"Guanano"}, ["gve"] = {"Duwet"}, ["gvf"] = {"Golin"}, ["gvj"] = {"Guajá"}, ["gvl"] = {"Gulay"}, ["gvm"] = {"Gurmana"}, ["gvn"] = {"Kuku-Yalanji"}, ["gvo"] = {"Gavião Do Jiparaná"}, ["gvp"] = {"Pará Gavião"}, ["gvr"] = {"Gurung"}, ["gvs"] = {"Gumawana"}, ["gvy"] = {"Guyani"}, ["gwa"] = {"Mbato"}, ["gwb"] = {"Gwa"}, ["gwc"] = {"Gawri", "Kalami"}, ["gwd"] = {"Gawwada"}, ["gwe"] = {"Gweno"}, ["gwf"] = {"Gowro"}, ["gwg"] = {"Moo"}, ["gwi"] = {"Gwichʼin"}, ["gwj"] = {"ǀGwi"}, ["gwm"] = {"Awngthim"}, ["gwn"] = {"Gwandara"}, ["gwr"] = {"Gwere"}, ["gwt"] = {"Gawar-Bati"}, ["gwu"] = {"Guwamu"}, ["gww"] = {"Kwini"}, ["gwx"] = {"Gua"}, ["gxx"] = {"Wè Southern"}, ["gya"] = {"Northwest Gbaya"}, ["gyb"] = {"Garus"}, ["gyd"] = {"Kayardild"}, ["gye"] = {"Gyem"}, ["gyf"] = {"Gungabula"}, ["gyg"] = {"Gbayi"}, ["gyi"] = {"Gyele"}, ["gyl"] = {"Gayil"}, ["gym"] = {"Ngäbere"}, ["gyn"] = {"Guyanese Creole English"}, ["gyo"] = {"Gyalsumdo"}, ["gyr"] = {"Guarayu"}, ["gyy"] = {"Gunya"}, ["gyz"] = {"Geji", "Gyaazi"}, ["gza"] = {"Ganza"}, ["gzi"] = {"Gazi"}, ["gzn"] = {"Gane"}, ["haa"] = {"Han"}, ["hab"] = {"Hanoi Sign Language"}, ["hac"] = {"Gurani"}, ["had"] = {"Hatam"}, ["hae"] = {"Eastern Oromo"}, ["haf"] = {"Haiphong Sign Language"}, ["hag"] = {"Hanga"}, ["hah"] = {"Hahon"}, ["hai"] = {"Haida"}, ["haj"] = {"Hajong"}, ["hak"] = {"Hakka Chinese"}, ["hal"] = {"Halang"}, ["ham"] = {"Hewa"}, ["han"] = {"Hangaza"}, ["hao"] = {"Hakö"}, ["hap"] = {"Hupla"}, ["haq"] = {"Ha"}, ["har"] = {"Harari"}, ["has"] = {"Haisla"}, ["hav"] = {"Havu"}, ["haw"] = {"Hawaiian"}, ["hax"] = {"Southern Haida"}, ["hay"] = {"Haya"}, ["haz"] = {"Hazaragi"}, ["hba"] = {"Hamba"}, ["hbb"] = {"Huba"}, ["hbn"] = {"Heiban"}, ["hbo"] = {"Ancient Hebrew"}, ["hbu"] = {"Habu"}, ["hca"] = {"Andaman Creole Hindi"}, ["hch"] = {"Huichol"}, ["hdn"] = {"Northern Haida"}, ["hds"] = {"Honduras Sign Language"}, ["hdy"] = {"Hadiyya"}, ["hea"] = {"Northern Qiandong Miao"}, ["hed"] = {"Herdé"}, ["heg"] = {"Helong"}, ["heh"] = {"Hehe"}, ["hei"] = {"Heiltsuk"}, ["hem"] = {"Hemba"}, ["hgm"] = {"Haiǁom"}, ["hgw"] = {"Haigwai"}, ["hhi"] = {"Hoia Hoia"}, ["hhr"] = {"Kerak"}, ["hhy"] = {"Hoyahoya"}, ["hia"] = {"Lamang"}, ["hib"] = {"Hibito"}, ["hid"] = {"Hidatsa"}, ["hif"] = {"Fiji Hindi"}, ["hig"] = {"Kamwe"}, ["hih"] = {"Pamosu"}, ["hii"] = {"Hinduri"}, ["hij"] = {"Hijuk"}, ["hik"] = {"Seit-Kaitetu"}, ["hil"] = {"Hiligaynon"}, ["him"] = {"Himachali languages", "Western Pahari languages"}, ["hio"] = {"Tsoa"}, ["hir"] = {"Himarimã"}, ["hit"] = {"Hittite"}, ["hiw"] = {"Hiw"}, ["hix"] = {"Hixkaryána"}, ["hji"] = {"Haji"}, ["hka"] = {"Kahe"}, ["hke"] = {"Hunde"}, ["hkh"] = {"Khah", "Poguli"}, ["hkk"] = {"Hunjara-Kaina Ke"}, ["hkn"] = {"Mel-Khaonh"}, ["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"}, ["hla"] = {"Halia"}, ["hlb"] = {"Halbi"}, ["hld"] = {"Halang Doan"}, ["hle"] = {"Hlersu"}, ["hlt"] = {"Matu Chin"}, ["hlu"] = {"Hieroglyphic Luwian"}, ["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"}, ["hmb"] = {"Humburi Senni Songhay"}, ["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"}, ["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"}, ["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"}, ["hmf"] = {"Hmong Don"}, ["hmg"] = {"Southwestern Guiyang Hmong"}, ["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"}, ["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"}, ["hmj"] = {"Ge", "Gejia"}, ["hmk"] = {"Maek"}, ["hml"] = {"Luopohe Hmong", "Luopohe Miao"}, ["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"}, ["hmn"] = {"Hmong", "Mong"}, ["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"}, ["hmq"] = {"Eastern Qiandong Miao"}, ["hmr"] = {"Hmar"}, ["hms"] = {"Southern Qiandong Miao"}, ["hmt"] = {"Hamtai"}, ["hmu"] = {"Hamap"}, ["hmv"] = {"Hmong Dô"}, ["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"}, ["hmx"] = {"Hmong-Mien languages"}, ["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"}, ["hmz"] = {"Hmong Shua", "Sinicized Miao"}, ["hna"] = {"Mina (Cameroon)"}, ["hnd"] = {"Southern Hindko"}, ["hne"] = {"Chhattisgarhi"}, ["hng"] = {"Hungu"}, ["hnh"] = {"ǁAni"}, ["hni"] = {"Hani"}, ["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"}, ["hnn"] = {"Hanunoo"}, ["hno"] = {"Northern Hindko"}, ["hns"] = {"Caribbean Hindustani"}, ["hnu"] = {"Hung"}, ["hoa"] = {"Hoava"}, ["hob"] = {"Mari (Madang Province)"}, ["hoc"] = {"Ho"}, ["hod"] = {"Holma"}, ["hoe"] = {"Horom"}, ["hoh"] = {"Hobyót"}, ["hoi"] = {"Holikachuk"}, ["hoj"] = {"Hadothi", "Haroti"}, ["hok"] = {"Hokan languages"}, ["hol"] = {"Holu"}, ["hom"] = {"Homa"}, ["hoo"] = {"Holoholo"}, ["hop"] = {"Hopi"}, ["hor"] = {"Horo"}, ["hos"] = {"Ho Chi Minh City Sign Language"}, ["hot"] = {"Hote", "Malê"}, ["hov"] = {"Hovongan"}, ["how"] = {"Honi"}, ["hoy"] = {"Holiya"}, ["hoz"] = {"Hozo"}, ["hpo"] = {"Hpon"}, ["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"}, ["hra"] = {"Hrangkhol"}, ["hrc"] = {"Niwer Mil"}, ["hre"] = {"Hre"}, ["hrk"] = {"Haruku"}, ["hrm"] = {"Horned Miao"}, ["hro"] = {"Haroi"}, ["hrp"] = {"Nhirrpi"}, ["hrt"] = {"Hértevin"}, ["hru"] = {"Hruso"}, ["hrw"] = {"Warwar Feni"}, ["hrx"] = {"Hunsrik"}, ["hrz"] = {"Harzani"}, ["hsb"] = {"Upper Sorbian"}, ["hsh"] = {"Hungarian Sign Language"}, ["hsl"] = {"Hausa Sign Language"}, ["hsn"] = {"Xiang Chinese"}, ["hss"] = {"Harsusi"}, ["hti"] = {"Hoti"}, ["hto"] = {"Minica Huitoto"}, ["hts"] = {"Hadza"}, ["htu"] = {"Hitu"}, ["htx"] = {"Middle Hittite"}, ["hub"] = {"Huambisa"}, ["huc"] = {"ǂHua", "ǂʼAmkhoe"}, ["hud"] = {"Huaulu"}, ["hue"] = {"San Francisco Del Mar Huave"}, ["huf"] = {"Humene"}, ["hug"] = {"Huachipaeri"}, ["huh"] = {"Huilliche"}, ["hui"] = {"Huli"}, ["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"}, ["huk"] = {"Hulung"}, ["hul"] = {"Hula"}, ["hum"] = {"Hungana"}, ["huo"] = {"Hu"}, ["hup"] = {"Hupa"}, ["huq"] = {"Tsat"}, ["hur"] = {"Halkomelem"}, ["hus"] = {"Huastec"}, ["hut"] = {"Humla"}, ["huu"] = {"Murui Huitoto"}, ["huv"] = {"San Mateo Del Mar Huave"}, ["huw"] = {"Hukumina"}, ["hux"] = {"Nüpode Huitoto"}, ["huy"] = {"Hulaulá"}, ["huz"] = {"Hunzib"}, ["hvc"] = {"Haitian Vodoun Culture Language"}, ["hve"] = {"San Dionisio Del Mar Huave"}, ["hvk"] = {"Haveke"}, ["hvn"] = {"Sabu"}, ["hvv"] = {"Santa María Del Mar Huave"}, ["hwa"] = {"Wané"}, ["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"}, ["hwo"] = {"Hwana"}, ["hya"] = {"Hya"}, ["hyw"] = {"Western Armenian"}, ["hyx"] = {"Armenian (family)"}, ["iai"] = {"Iaai"}, ["ian"] = {"Iatmul"}, ["iar"] = {"Purari"}, ["iba"] = {"Iban"}, ["ibb"] = {"Ibibio"}, ["ibd"] = {"Iwaidja"}, ["ibe"] = {"Akpes"}, ["ibg"] = {"Ibanag"}, ["ibh"] = {"Bih"}, ["ibl"] = {"Ibaloi"}, ["ibm"] = {"Agoi"}, ["ibn"] = {"Ibino"}, ["ibr"] = {"Ibuoro"}, ["ibu"] = {"Ibu"}, ["iby"] = {"Ibani"}, ["ica"] = {"Ede Ica"}, ["ich"] = {"Etkywan"}, ["icl"] = {"Icelandic Sign Language"}, ["icr"] = {"Islander Creole English"}, ["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"}, ["idb"] = {"Indo-Portuguese"}, ["idc"] = {"Idon", "Ajiya"}, ["idd"] = {"Ede Idaca"}, ["ide"] = {"Idere"}, ["idi"] = {"Idi"}, ["idr"] = {"Indri"}, ["ids"] = {"Idesa"}, ["idt"] = {"Idaté"}, ["idu"] = {"Idoma"}, ["ifa"] = {"Amganad Ifugao"}, ["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"}, ["ife"] = {"Ifè"}, ["iff"] = {"Ifo"}, ["ifk"] = {"Tuwali Ifugao"}, ["ifm"] = {"Teke-Fuumu"}, ["ifu"] = {"Mayoyao Ifugao"}, ["ify"] = {"Keley-I Kallahan"}, ["igb"] = {"Ebira"}, ["ige"] = {"Igede"}, ["igg"] = {"Igana"}, ["igl"] = {"Igala"}, ["igm"] = {"Kanggape"}, ["ign"] = {"Ignaciano"}, ["igo"] = {"Isebe"}, ["igs"] = {"Interglossa"}, ["igw"] = {"Igwe"}, ["ihb"] = {"Iha Based Pidgin"}, ["ihi"] = {"Ihievbe"}, ["ihp"] = {"Iha"}, ["ihw"] = {"Bidhawal"}, ["iin"] = {"Thiin"}, ["iir"] = {"Indo-Iranian languages"}, ["ijc"] = {"Izon"}, ["ije"] = {"Biseni"}, ["ijj"] = {"Ede Ije"}, ["ijn"] = {"Kalabari"}, ["ijo"] = {"Ijo languages"}, ["ijs"] = {"Southeast Ijo"}, ["ike"] = {"Eastern Canadian Inuktitut"}, ["ikh"] = {"Ikhin-Arokho"}, ["iki"] = {"Iko"}, ["ikk"] = {"Ika"}, ["ikl"] = {"Ikulu"}, ["iko"] = {"Olulumo-Ikom"}, ["ikp"] = {"Ikpeshi"}, ["ikr"] = {"Ikaranggal"}, ["iks"] = {"Inuit Sign Language"}, ["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"}, ["ikv"] = {"Iku-Gora-Ankwa"}, ["ikw"] = {"Ikwere"}, ["ikx"] = {"Ik"}, ["ikz"] = {"Ikizu"}, ["ila"] = {"Ile Ape"}, ["ilb"] = {"Ila"}, ["ilg"] = {"Garig-Ilgar"}, ["ili"] = {"Ili Turki"}, ["ilk"] = {"Ilongot"}, ["ilm"] = {"Iranun (Malaysia)"}, ["ilo"] = {"Iloko"}, ["ilp"] = {"Iranun (Philippines)"}, ["ils"] = {"International Sign"}, ["ilu"] = {"Ili'uun"}, ["ilv"] = {"Ilue"}, ["ima"] = {"Mala Malasar"}, ["imi"] = {"Anamgura"}, ["iml"] = {"Miluk"}, ["imn"] = {"Imonda"}, ["imo"] = {"Imbongu"}, ["imr"] = {"Imroing"}, ["ims"] = {"Marsian"}, ["imt"] = {"Imotong"}, ["imy"] = {"Milyan"}, ["inb"] = {"Inga"}, ["inc"] = {"Indic languages"}, ["ine"] = {"Indo-European languages"}, ["ing"] = {"Degexit'an"}, ["inh"] = {"Ingush"}, ["inj"] = {"Jungle Inga"}, ["inl"] = {"Indonesian Sign Language"}, ["inm"] = {"Minaean"}, ["inn"] = {"Isinai"}, ["ino"] = {"Inoke-Yate"}, ["inp"] = {"Iñapari"}, ["ins"] = {"Indian Sign Language"}, ["int"] = {"Intha"}, ["inz"] = {"Ineseño"}, ["ior"] = {"Inor"}, ["iou"] = {"Tuma-Irumu"}, ["iow"] = {"Iowa-Oto"}, ["ipi"] = {"Ipili"}, ["ipo"] = {"Ipiko"}, ["iqu"] = {"Iquito"}, ["iqw"] = {"Ikwo"}, ["ira"] = {"Iranian languages"}, ["ire"] = {"Iresim"}, ["irh"] = {"Irarutu"}, ["iri"] = {"Rigwe", "Irigwe"}, ["irk"] = {"Iraqw"}, ["irn"] = {"Irántxe"}, ["iro"] = {"Iroquoian languages"}, ["irr"] = {"Ir"}, ["iru"] = {"Irula"}, ["irx"] = {"Kamberau"}, ["iry"] = {"Iraya"}, ["isa"] = {"Isabi"}, ["isc"] = {"Isconahua"}, ["isd"] = {"Isnag"}, ["ise"] = {"Italian Sign Language"}, ["isg"] = {"Irish Sign Language"}, ["ish"] = {"Esan"}, ["isi"] = {"Nkem-Nkum"}, ["isk"] = {"Ishkashimi"}, ["ism"] = {"Masimasi"}, ["isn"] = {"Isanzu"}, ["iso"] = {"Isoko"}, ["isr"] = {"Israeli Sign Language"}, ["ist"] = {"Istriot"}, ["isu"] = {"Isu (Menchum Division)"}, ["itb"] = {"Binongan Itneg"}, ["itc"] = {"Italic languages"}, ["itd"] = {"Southern Tidung"}, ["ite"] = {"Itene"}, ["iti"] = {"Inlaod Itneg"}, ["itk"] = {"Judeo-Italian"}, ["itl"] = {"Itelmen"}, ["itm"] = {"Itu Mbon Uzo"}, ["ito"] = {"Itonama"}, ["itr"] = {"Iteri"}, ["its"] = {"Isekiri"}, ["itt"] = {"Maeng Itneg"}, ["itv"] = {"Itawit"}, ["itw"] = {"Ito"}, ["itx"] = {"Itik"}, ["ity"] = {"Moyadan Itneg"}, ["itz"] = {"Itzá"}, ["ium"] = {"Iu Mien"}, ["ivb"] = {"Ibatan"}, ["ivv"] = {"Ivatan"}, ["iwk"] = {"I-Wak"}, ["iwm"] = {"Iwam"}, ["iwo"] = {"Iwur"}, ["iws"] = {"Sepik Iwam"}, ["ixc"] = {"Ixcatec"}, ["ixl"] = {"Ixil"}, ["iya"] = {"Iyayu"}, ["iyo"] = {"Mesaka"}, ["iyx"] = {"Yaka (Congo)"}, ["izh"] = {"Ingrian"}, ["izm"] = {"Kizamani"}, ["izr"] = {"Izere"}, ["izz"] = {"Izii"}, ["jaa"] = {"Jamamadí"}, ["jab"] = {"Hyam"}, ["jac"] = {"Popti'", "Jakalteko"}, ["jad"] = {"Jahanka"}, ["jae"] = {"Yabem"}, ["jaf"] = {"Jara"}, ["jah"] = {"Jah Hut"}, ["jaj"] = {"Zazao"}, ["jak"] = {"Jakun"}, ["jal"] = {"Yalahatan"}, ["jam"] = {"Jamaican Creole English"}, ["jan"] = {"Jandai"}, ["jao"] = {"Yanyuwa"}, ["jaq"] = {"Yaqay"}, ["jas"] = {"New Caledonian Javanese"}, ["jat"] = {"Jakati"}, ["jau"] = {"Yaur"}, ["jax"] = {"Jambi Malay"}, ["jay"] = {"Yan-nhangu", "Nhangu"}, ["jaz"] = {"Jawe"}, ["jbe"] = {"Judeo-Berber"}, ["jbi"] = {"Badjiri"}, ["jbj"] = {"Arandai"}, ["jbk"] = {"Barikewa"}, ["jbm"] = {"Bijim"}, ["jbn"] = {"Nafusi"}, ["jbo"] = {"Lojban"}, ["jbr"] = {"Jofotek-Bromnya"}, ["jbt"] = {"Jabutí"}, ["jbu"] = {"Jukun Takum"}, ["jbw"] = {"Yawijibaya"}, ["jcs"] = {"Jamaican Country Sign Language"}, ["jct"] = {"Krymchak"}, ["jda"] = {"Jad"}, ["jdg"] = {"Jadgali"}, ["jdt"] = {"Judeo-Tat"}, ["jeb"] = {"Jebero"}, ["jee"] = {"Jerung"}, ["jeh"] = {"Jeh"}, ["jei"] = {"Yei"}, ["jek"] = {"Jeri Kuo"}, ["jel"] = {"Yelmek"}, ["jen"] = {"Dza"}, ["jer"] = {"Jere"}, ["jet"] = {"Manem"}, ["jeu"] = {"Jonkor Bourmataguil"}, ["jgb"] = {"Ngbee"}, ["jge"] = {"Judeo-Georgian"}, ["jgk"] = {"Gwak"}, ["jgo"] = {"Ngomba"}, ["jhi"] = {"Jehai"}, ["jhs"] = {"Jhankot Sign Language"}, ["jia"] = {"Jina"}, ["jib"] = {"Jibu"}, ["jic"] = {"Tol"}, ["jid"] = {"Bu (Kaduna State)"}, ["jie"] = {"Jilbe"}, ["jig"] = {"Jingulu", "Djingili"}, ["jih"] = {"sTodsde", "Shangzhai"}, ["jii"] = {"Jiiddu"}, ["jil"] = {"Jilim"}, ["jim"] = {"Jimi (Cameroon)"}, ["jio"] = {"Jiamao"}, ["jiq"] = {"Guanyinqiao", "Lavrung"}, ["jit"] = {"Jita"}, ["jiu"] = {"Youle Jinuo"}, ["jiv"] = {"Shuar"}, ["jiy"] = {"Buyuan Jinuo"}, ["jje"] = {"Jejueo"}, ["jjr"] = {"Bankal"}, ["jka"] = {"Kaera"}, ["jkm"] = {"Mobwa Karen"}, ["jko"] = {"Kubo"}, ["jkp"] = {"Paku Karen"}, ["jkr"] = {"Koro (India)"}, ["jks"] = {"Amami Koniya Sign Language"}, ["jku"] = {"Labir"}, ["jle"] = {"Ngile"}, ["jls"] = {"Jamaican Sign Language"}, ["jma"] = {"Dima"}, ["jmb"] = {"Zumbun"}, ["jmc"] = {"Machame"}, ["jmd"] = {"Yamdena"}, ["jmi"] = {"Jimi (Nigeria)"}, ["jml"] = {"Jumli"}, ["jmn"] = {"Makuri Naga"}, ["jmr"] = {"Kamara"}, ["jms"] = {"Mashi (Nigeria)"}, ["jmw"] = {"Mouwase"}, ["jmx"] = {"Western Juxtlahuaca Mixtec"}, ["jna"] = {"Jangshung"}, ["jnd"] = {"Jandavra"}, ["jng"] = {"Yangman"}, ["jni"] = {"Janji"}, ["jnj"] = {"Yemsa"}, ["jnl"] = {"Rawat"}, ["jns"] = {"Jaunsari"}, ["job"] = {"Joba"}, ["jod"] = {"Wojenaka"}, ["jog"] = {"Jogi"}, ["jor"] = {"Jorá"}, ["jos"] = {"Jordanian Sign Language"}, ["jow"] = {"Jowulu"}, ["jpa"] = {"Jewish Palestinian Aramaic"}, ["jpr"] = {"Judeo-Persian"}, ["jpx"] = {"Japanese (family)"}, ["jqr"] = {"Jaqaru"}, ["jra"] = {"Jarai"}, ["jrb"] = {"Judeo-Arabic"}, ["jrr"] = {"Jiru"}, ["jrt"] = {"Jakattoe"}, ["jru"] = {"Japrería"}, ["jsl"] = {"Japanese Sign Language"}, ["jua"] = {"Júma"}, ["jub"] = {"Wannu"}, ["juc"] = {"Jurchen"}, ["jud"] = {"Worodougou"}, ["juh"] = {"Hõne"}, ["jui"] = {"Ngadjuri"}, ["juk"] = {"Wapan"}, ["jul"] = {"Jirel"}, ["jum"] = {"Jumjum"}, ["jun"] = {"Juang"}, ["juo"] = {"Jiba"}, ["jup"] = {"Hupdë"}, ["jur"] = {"Jurúna"}, ["jus"] = {"Jumla Sign Language"}, ["jut"] = {"Jutish"}, ["juu"] = {"Ju"}, ["juw"] = {"Wãpha"}, ["juy"] = {"Juray"}, ["jvd"] = {"Javindo"}, ["jvn"] = {"Caribbean Javanese"}, ["jwi"] = {"Jwira-Pepesa"}, ["jya"] = {"Jiarong"}, ["jye"] = {"Judeo-Yemeni Arabic"}, ["jyy"] = {"Jaya"}, ["kaa"] = {"Kara-Kalpak", "Karakalpak"}, ["kab"] = {"Kabyle"}, ["kac"] = {"Kachin", "Jingpho"}, ["kad"] = {"Adara"}, ["kae"] = {"Ketangalan"}, ["kaf"] = {"Katso"}, ["kag"] = {"Kajaman"}, ["kah"] = {"Kara (Central African Republic)"}, ["kai"] = {"Karekare"}, ["kaj"] = {"Jju"}, ["kak"] = {"Kalanguya", "Kayapa Kallahan"}, ["kam"] = {"Kamba (Kenya)"}, ["kao"] = {"Xaasongaxango"}, ["kap"] = {"Bezhta"}, ["kaq"] = {"Capanahua"}, ["kar"] = {"Karen languages"}, ["kav"] = {"Katukína"}, ["kaw"] = {"Kawi"}, ["kax"] = {"Kao"}, ["kay"] = {"Kamayurá"}, ["kba"] = {"Kalarko"}, ["kbb"] = {"Kaxuiâna"}, ["kbc"] = {"Kadiwéu"}, ["kbd"] = {"Kabardian"}, ["kbe"] = {"Kanju"}, ["kbg"] = {"Khamba"}, ["kbh"] = {"Camsá"}, ["kbi"] = {"Kaptiau"}, ["kbj"] = {"Kari"}, ["kbk"] = {"Grass Koiari"}, ["kbl"] = {"Kanembu"}, ["kbm"] = {"Iwal"}, ["kbn"] = {"Kare (Central African Republic)"}, ["kbo"] = {"Keliko"}, ["kbp"] = {"Kabiyè"}, ["kbq"] = {"Kamano"}, ["kbr"] = {"Kafa"}, ["kbs"] = {"Kande"}, ["kbt"] = {"Abadi"}, ["kbu"] = {"Kabutra"}, ["kbv"] = {"Dera (Indonesia)"}, ["kbw"] = {"Kaiep"}, ["kbx"] = {"Ap Ma"}, ["kby"] = {"Manga Kanuri"}, ["kbz"] = {"Duhwa"}, ["kca"] = {"Khanty"}, ["kcb"] = {"Kawacha"}, ["kcc"] = {"Lubila"}, ["kcd"] = {"Ngkâlmpw Kanum"}, ["kce"] = {"Kaivi"}, ["kcf"] = {"Ukaan"}, ["kcg"] = {"Tyap"}, ["kch"] = {"Vono"}, ["kci"] = {"Kamantan"}, ["kcj"] = {"Kobiana"}, ["kck"] = {"Kalanga"}, ["kcl"] = {"Kela (Papua New Guinea)", "Kala"}, ["kcm"] = {"Gula (Central African Republic)"}, ["kcn"] = {"Nubi"}, ["kco"] = {"Kinalakna"}, ["kcp"] = {"Kanga"}, ["kcq"] = {"Kamo"}, ["kcr"] = {"Katla"}, ["kcs"] = {"Koenoem"}, ["kct"] = {"Kaian"}, ["kcu"] = {"Kami (Tanzania)"}, ["kcv"] = {"Kete"}, ["kcw"] = {"Kabwari"}, ["kcx"] = {"Kachama-Ganjule"}, ["kcy"] = {"Korandje"}, ["kcz"] = {"Konongo"}, ["kda"] = {"Worimi"}, ["kdc"] = {"Kutu"}, ["kdd"] = {"Yankunytjatjara"}, ["kde"] = {"Makonde"}, ["kdf"] = {"Mamusi"}, ["kdg"] = {"Seba"}, ["kdh"] = {"Tem"}, ["kdi"] = {"Kumam"}, ["kdj"] = {"Karamojong"}, ["kdk"] = {"Numèè", "Kwényi"}, ["kdl"] = {"Tsikimba"}, ["kdm"] = {"Kagoma"}, ["kdn"] = {"Kunda"}, ["kdo"] = {"Kordofanian languages"}, ["kdp"] = {"Kaningdon-Nindem"}, ["kdq"] = {"Koch"}, ["kdr"] = {"Karaim"}, ["kdt"] = {"Kuy"}, ["kdu"] = {"Kadaru"}, ["kdw"] = {"Koneraw"}, ["kdx"] = {"Kam"}, ["kdy"] = {"Keder", "Keijar"}, ["kdz"] = {"Kwaja"}, ["kea"] = {"Kabuverdianu"}, ["keb"] = {"Kélé"}, ["kec"] = {"Keiga"}, ["ked"] = {"Kerewe"}, ["kee"] = {"Eastern Keres"}, ["kef"] = {"Kpessi"}, ["keg"] = {"Tese"}, ["keh"] = {"Keak"}, ["kei"] = {"Kei"}, ["kej"] = {"Kadar"}, ["kek"] = {"Kekchí"}, ["kel"] = {"Kela (Democratic Republic of Congo)"}, ["kem"] = {"Kemak"}, ["ken"] = {"Kenyang"}, ["keo"] = {"Kakwa"}, ["kep"] = {"Kaikadi"}, ["keq"] = {"Kamar"}, ["ker"] = {"Kera"}, ["kes"] = {"Kugbo"}, ["ket"] = {"Ket"}, ["keu"] = {"Akebu"}, ["kev"] = {"Kanikkaran"}, ["kew"] = {"West Kewa"}, ["kex"] = {"Kukna"}, ["key"] = {"Kupia"}, ["kez"] = {"Kukele"}, ["kfa"] = {"Kodava"}, ["kfb"] = {"Northwestern Kolami"}, ["kfc"] = {"Konda-Dora"}, ["kfd"] = {"Korra Koraga"}, ["kfe"] = {"Kota (India)"}, ["kff"] = {"Koya"}, ["kfg"] = {"Kudiya"}, ["kfh"] = {"Kurichiya"}, ["kfi"] = {"Kannada Kurumba"}, ["kfj"] = {"Kemiehua"}, ["kfk"] = {"Kinnauri"}, ["kfl"] = {"Kung"}, ["kfm"] = {"Khunsari"}, ["kfn"] = {"Kuk"}, ["kfo"] = {"Koro (Côte d'Ivoire)"}, ["kfp"] = {"Korwa"}, ["kfq"] = {"Korku"}, ["kfr"] = {"Kachhi", "Kutchi"}, ["kfs"] = {"Bilaspuri"}, ["kft"] = {"Kanjari"}, ["kfu"] = {"Katkari"}, ["kfv"] = {"Kurmukar"}, ["kfw"] = {"Kharam Naga"}, ["kfx"] = {"Kullu Pahari"}, ["kfy"] = {"Kumaoni"}, ["kfz"] = {"Koromfé"}, ["kga"] = {"Koyaga"}, ["kgb"] = {"Kawe"}, ["kge"] = {"Komering"}, ["kgf"] = {"Kube"}, ["kgg"] = {"Kusunda"}, ["kgi"] = {"Selangor Sign Language"}, ["kgj"] = {"Gamale Kham"}, ["kgk"] = {"Kaiwá"}, ["kgl"] = {"Kunggari"}, ["kgn"] = {"Karingani"}, ["kgo"] = {"Krongo"}, ["kgp"] = {"Kaingang"}, ["kgq"] = {"Kamoro"}, ["kgr"] = {"Abun"}, ["kgs"] = {"Kumbainggar"}, ["kgt"] = {"Somyev"}, ["kgu"] = {"Kobol"}, ["kgv"] = {"Karas"}, ["kgw"] = {"Karon Dori"}, ["kgx"] = {"Kamaru"}, ["kgy"] = {"Kyerung"}, ["kha"] = {"Khasi"}, ["khb"] = {"Lü"}, ["khc"] = {"Tukang Besi North"}, ["khd"] = {"Bädi Kanum"}, ["khe"] = {"Korowai"}, ["khf"] = {"Khuen"}, ["khg"] = {"Khams Tibetan"}, ["khh"] = {"Kehu"}, ["khi"] = {"Khoisan languages"}, ["khj"] = {"Kuturmi"}, ["khk"] = {"Halh Mongolian"}, ["khl"] = {"Lusi"}, ["khn"] = {"Khandesi"}, ["kho"] = {"Khotanese", "Sakan"}, ["khp"] = {"Kapori", "Kapauri"}, ["khq"] = {"Koyra Chiini Songhay"}, ["khr"] = {"Kharia"}, ["khs"] = {"Kasua"}, ["kht"] = {"Khamti"}, ["khu"] = {"Nkhumbi"}, ["khv"] = {"Khvarshi"}, ["khw"] = {"Khowar"}, ["khx"] = {"Kanu"}, ["khy"] = {"Kele (Democratic Republic of Congo)"}, ["khz"] = {"Keapara"}, ["kia"] = {"Kim"}, ["kib"] = {"Koalib"}, ["kic"] = {"Kickapoo"}, ["kid"] = {"Koshin"}, ["kie"] = {"Kibet"}, ["kif"] = {"Eastern Parbate Kham"}, ["kig"] = {"Kimaama", "Kimaghima"}, ["kih"] = {"Kilmeri"}, ["kii"] = {"Kitsai"}, ["kij"] = {"Kilivila"}, ["kil"] = {"Kariya"}, ["kim"] = {"Karagas"}, ["kio"] = {"Kiowa"}, ["kip"] = {"Sheshi Kham"}, ["kiq"] = {"Kosadle", "Kosare"}, ["kis"] = {"Kis"}, ["kit"] = {"Agob"}, ["kiu"] = {"Kirmanjki (individual language)"}, ["kiv"] = {"Kimbu"}, ["kiw"] = {"Northeast Kiwai"}, ["kix"] = {"Khiamniungan Naga"}, ["kiy"] = {"Kirikiri"}, ["kiz"] = {"Kisi"}, ["kja"] = {"Mlap"}, ["kjb"] = {"Q'anjob'al", "Kanjobal"}, ["kjc"] = {"Coastal Konjo"}, ["kjd"] = {"Southern Kiwai"}, ["kje"] = {"Kisar"}, ["kjg"] = {"Khmu"}, ["kjh"] = {"Khakas"}, ["kji"] = {"Zabana"}, ["kjj"] = {"Khinalugh"}, ["kjk"] = {"Highland Konjo"}, ["kjl"] = {"Western Parbate Kham"}, ["kjm"] = {"Kháng"}, ["kjn"] = {"Kunjen"}, ["kjo"] = {"Harijan Kinnauri"}, ["kjp"] = {"Pwo Eastern Karen"}, ["kjq"] = {"Western Keres"}, ["kjr"] = {"Kurudu"}, ["kjs"] = {"East Kewa"}, ["kjt"] = {"Phrae Pwo Karen"}, ["kju"] = {"Kashaya"}, ["kjv"] = {"Kaikavian Literary Language"}, ["kjx"] = {"Ramopa"}, ["kjy"] = {"Erave"}, ["kjz"] = {"Bumthangkha"}, ["kka"] = {"Kakanda"}, ["kkb"] = {"Kwerisa"}, ["kkc"] = {"Odoodee"}, ["kkd"] = {"Kinuku"}, ["kke"] = {"Kakabe"}, ["kkf"] = {"Kalaktang Monpa"}, ["kkg"] = {"Mabaka Valley Kalinga"}, ["kkh"] = {"Khün"}, ["kki"] = {"Kagulu"}, ["kkj"] = {"Kako"}, ["kkk"] = {"Kokota"}, ["kkl"] = {"Kosarek Yale"}, ["kkm"] = {"Kiong"}, ["kkn"] = {"Kon Keu"}, ["kko"] = {"Karko"}, ["kkp"] = {"Gugubera", "Koko-Bera"}, ["kkq"] = {"Kaeku"}, ["kkr"] = {"Kir-Balar"}, ["kks"] = {"Giiwo"}, ["kkt"] = {"Koi"}, ["kku"] = {"Tumi"}, ["kkv"] = {"Kangean"}, ["kkw"] = {"Teke-Kukuya"}, ["kkx"] = {"Kohin"}, ["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"}, ["kkz"] = {"Kaska"}, ["kla"] = {"Klamath-Modoc"}, ["klb"] = {"Kiliwa"}, ["klc"] = {"Kolbila"}, ["kld"] = {"Gamilaraay"}, ["kle"] = {"Kulung (Nepal)"}, ["klf"] = {"Kendeje"}, ["klg"] = {"Tagakaulo"}, ["klh"] = {"Weliki"}, ["kli"] = {"Kalumpang"}, ["klj"] = {"Khalaj"}, ["klk"] = {"Kono (Nigeria)"}, ["kll"] = {"Kagan Kalagan"}, ["klm"] = {"Migum"}, ["kln"] = {"Kalenjin"}, ["klo"] = {"Kapya"}, ["klp"] = {"Kamasa"}, ["klq"] = {"Rumu"}, ["klr"] = {"Khaling"}, ["kls"] = {"Kalasha"}, ["klt"] = {"Nukna"}, ["klu"] = {"Klao"}, ["klv"] = {"Maskelynes"}, ["klw"] = {"Tado", "Lindu"}, ["klx"] = {"Koluwawa"}, ["kly"] = {"Kalao"}, ["klz"] = {"Kabola"}, ["kma"] = {"Konni"}, ["kmb"] = {"Kimbundu"}, ["kmc"] = {"Southern Dong"}, ["kmd"] = {"Majukayang Kalinga"}, ["kme"] = {"Bakole"}, ["kmf"] = {"Kare (Papua New Guinea)"}, ["kmg"] = {"Kâte"}, ["kmh"] = {"Kalam"}, ["kmi"] = {"Kami (Nigeria)"}, ["kmj"] = {"Kumarbhag Paharia"}, ["kmk"] = {"Limos Kalinga"}, ["kml"] = {"Tanudan Kalinga"}, ["kmm"] = {"Kom (India)"}, ["kmn"] = {"Awtuw"}, ["kmo"] = {"Kwoma"}, ["kmp"] = {"Gimme"}, ["kmq"] = {"Kwama"}, ["kmr"] = {"Northern Kurdish"}, ["kms"] = {"Kamasau"}, ["kmt"] = {"Kemtuik"}, ["kmu"] = {"Kanite"}, ["kmv"] = {"Karipúna Creole French"}, ["kmw"] = {"Komo (Democratic Republic of Congo)"}, ["kmx"] = {"Waboda"}, ["kmy"] = {"Koma"}, ["kmz"] = {"Khorasani Turkish"}, ["kna"] = {"Dera (Nigeria)"}, ["knb"] = {"Lubuagan Kalinga"}, ["knc"] = {"Central Kanuri"}, ["knd"] = {"Konda"}, ["kne"] = {"Kankanaey"}, ["knf"] = {"Mankanya"}, ["kng"] = {"Koongo"}, ["kni"] = {"Kanufi"}, ["knj"] = {"Western Kanjobal"}, ["knk"] = {"Kuranko"}, ["knl"] = {"Keninjal"}, ["knm"] = {"Kanamarí"}, ["knn"] = {"Konkani (individual language)"}, ["kno"] = {"Kono (Sierra Leone)"}, ["knp"] = {"Kwanja"}, ["knq"] = {"Kintaq"}, ["knr"] = {"Kaningra"}, ["kns"] = {"Kensiu"}, ["knt"] = {"Panoan Katukína"}, ["knu"] = {"Kono (Guinea)"}, ["knv"] = {"Tabo"}, ["knw"] = {"Kung-Ekoka"}, ["knx"] = {"Kendayan", "Salako"}, ["kny"] = {"Kanyok"}, ["knz"] = {"Kalamsé"}, ["koa"] = {"Konomala"}, ["koc"] = {"Kpati"}, ["kod"] = {"Kodi"}, ["koe"] = {"Kacipo-Bale Suri"}, ["kof"] = {"Kubi"}, ["kog"] = {"Cogui", "Kogi"}, ["koh"] = {"Koyo"}, ["koi"] = {"Komi-Permyak"}, ["kok"] = {"Konkani (macrolanguage)"}, ["kol"] = {"Kol (Papua New Guinea)"}, ["koo"] = {"Konzo"}, ["kop"] = {"Waube"}, ["koq"] = {"Kota (Gabon)"}, ["kos"] = {"Kosraean"}, ["kot"] = {"Lagwan"}, ["kou"] = {"Koke"}, ["kov"] = {"Kudu-Camo"}, ["kow"] = {"Kugama"}, ["koy"] = {"Koyukon"}, ["koz"] = {"Korak"}, ["kpa"] = {"Kutto"}, ["kpb"] = {"Mullu Kurumba"}, ["kpc"] = {"Curripaco"}, ["kpd"] = {"Koba"}, ["kpe"] = {"Kpelle"}, ["kpf"] = {"Komba"}, ["kpg"] = {"Kapingamarangi"}, ["kph"] = {"Kplang"}, ["kpi"] = {"Kofei"}, ["kpj"] = {"Karajá"}, ["kpk"] = {"Kpan"}, ["kpl"] = {"Kpala"}, ["kpm"] = {"Koho"}, ["kpn"] = {"Kepkiriwát"}, ["kpo"] = {"Ikposo"}, ["kpq"] = {"Korupun-Sela"}, ["kpr"] = {"Korafe-Yegha"}, ["kps"] = {"Tehit"}, ["kpt"] = {"Karata"}, ["kpu"] = {"Kafoa"}, ["kpv"] = {"Komi-Zyrian"}, ["kpw"] = {"Kobon"}, ["kpx"] = {"Mountain Koiali"}, ["kpy"] = {"Koryak"}, ["kpz"] = {"Kupsabiny"}, ["kqa"] = {"Mum"}, ["kqb"] = {"Kovai"}, ["kqc"] = {"Doromu-Koki"}, ["kqd"] = {"Koy Sanjaq Surat"}, ["kqe"] = {"Kalagan"}, ["kqf"] = {"Kakabai"}, ["kqg"] = {"Khe"}, ["kqh"] = {"Kisankasa"}, ["kqi"] = {"Koitabu"}, ["kqj"] = {"Koromira"}, ["kqk"] = {"Kotafon Gbe"}, ["kql"] = {"Kyenele"}, ["kqm"] = {"Khisa"}, ["kqn"] = {"Kaonde"}, ["kqo"] = {"Eastern Krahn"}, ["kqp"] = {"Kimré"}, ["kqq"] = {"Krenak"}, ["kqr"] = {"Kimaragang"}, ["kqs"] = {"Northern Kissi"}, ["kqt"] = {"Klias River Kadazan"}, ["kqu"] = {"Seroa"}, ["kqv"] = {"Okolod"}, ["kqw"] = {"Kandas"}, ["kqx"] = {"Mser"}, ["kqy"] = {"Koorete"}, ["kqz"] = {"Korana"}, ["kra"] = {"Kumhali"}, ["krb"] = {"Karkin"}, ["krc"] = {"Karachay-Balkar"}, ["krd"] = {"Kairui-Midiki"}, ["kre"] = {"Panará"}, ["krf"] = {"Koro (Vanuatu)"}, ["krh"] = {"Kurama"}, ["kri"] = {"Krio"}, ["krj"] = {"Kinaray-A"}, ["krk"] = {"Kerek"}, ["krl"] = {"Karelian"}, ["krn"] = {"Sapo"}, ["kro"] = {"Kru languages"}, ["krp"] = {"Durop"}, ["krr"] = {"Krung"}, ["krs"] = {"Gbaya (Sudan)"}, ["krt"] = {"Tumari Kanuri"}, ["kru"] = {"Kurukh"}, ["krv"] = {"Kavet"}, ["krw"] = {"Western Krahn"}, ["krx"] = {"Karon"}, ["kry"] = {"Kryts"}, ["krz"] = {"Sota Kanum"}, ["ksb"] = {"Shambala"}, ["ksc"] = {"Southern Kalinga"}, ["ksd"] = {"Kuanua"}, ["kse"] = {"Kuni"}, ["ksf"] = {"Bafia"}, ["ksg"] = {"Kusaghe"}, ["ksh"] = {"Kölsch"}, ["ksi"] = {"Krisa", "I'saka"}, ["ksj"] = {"Uare"}, ["ksk"] = {"Kansa"}, ["ksl"] = {"Kumalu"}, ["ksm"] = {"Kumba"}, ["ksn"] = {"Kasiguranin"}, ["kso"] = {"Kofa"}, ["ksp"] = {"Kaba"}, ["ksq"] = {"Kwaami"}, ["ksr"] = {"Borong"}, ["kss"] = {"Southern Kisi"}, ["kst"] = {"Winyé"}, ["ksu"] = {"Khamyang"}, ["ksv"] = {"Kusu"}, ["ksw"] = {"S'gaw Karen"}, ["ksx"] = {"Kedang"}, ["ksy"] = {"Kharia Thar"}, ["ksz"] = {"Kodaku"}, ["kta"] = {"Katua"}, ["ktb"] = {"Kambaata"}, ["ktc"] = {"Kholok"}, ["ktd"] = {"Kokata", "Kukatha"}, ["kte"] = {"Nubri"}, ["ktf"] = {"Kwami"}, ["ktg"] = {"Kalkutung"}, ["kth"] = {"Karanga"}, ["kti"] = {"North Muyu"}, ["ktj"] = {"Plapo Krumen"}, ["ktk"] = {"Kaniet"}, ["ktl"] = {"Koroshi"}, ["ktm"] = {"Kurti"}, ["ktn"] = {"Karitiâna"}, ["kto"] = {"Kuot"}, ["ktp"] = {"Kaduo"}, ["ktq"] = {"Katabaga"}, ["kts"] = {"South Muyu"}, ["ktt"] = {"Ketum"}, ["ktu"] = {"Kituba (Democratic Republic of Congo)"}, ["ktv"] = {"Eastern Katu"}, ["ktw"] = {"Kato"}, ["ktx"] = {"Kaxararí"}, ["kty"] = {"Kango (Bas-Uélé District)"}, ["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"}, ["kub"] = {"Kutep"}, ["kuc"] = {"Kwinsu"}, ["kud"] = {"'Auhelawa"}, ["kue"] = {"Kuman (Papua New Guinea)"}, ["kuf"] = {"Western Katu"}, ["kug"] = {"Kupa"}, ["kuh"] = {"Kushi"}, ["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"}, ["kuj"] = {"Kuria"}, ["kuk"] = {"Kepo'"}, ["kul"] = {"Kulere"}, ["kum"] = {"Kumyk"}, ["kun"] = {"Kunama"}, ["kuo"] = {"Kumukio"}, ["kup"] = {"Kunimaipa"}, ["kuq"] = {"Karipuna"}, ["kus"] = {"Kusaal"}, ["kut"] = {"Kutenai"}, ["kuu"] = {"Upper Kuskokwim"}, ["kuv"] = {"Kur"}, ["kuw"] = {"Kpagua"}, ["kux"] = {"Kukatja"}, ["kuy"] = {"Kuuku-Ya'u"}, ["kuz"] = {"Kunza"}, ["kva"] = {"Bagvalal"}, ["kvb"] = {"Kubu"}, ["kvc"] = {"Kove"}, ["kvd"] = {"Kui (Indonesia)"}, ["kve"] = {"Kalabakan"}, ["kvf"] = {"Kabalai"}, ["kvg"] = {"Kuni-Boazi"}, ["kvh"] = {"Komodo"}, ["kvi"] = {"Kwang"}, ["kvj"] = {"Psikye"}, ["kvk"] = {"Korean Sign Language"}, ["kvl"] = {"Kayaw"}, ["kvm"] = {"Kendem"}, ["kvn"] = {"Border Kuna"}, ["kvo"] = {"Dobel"}, ["kvp"] = {"Kompane"}, ["kvq"] = {"Geba Karen"}, ["kvr"] = {"Kerinci"}, ["kvt"] = {"Lahta Karen", "Lahta"}, ["kvu"] = {"Yinbaw Karen"}, ["kvv"] = {"Kola"}, ["kvw"] = {"Wersing"}, ["kvx"] = {"Parkari Koli"}, ["kvy"] = {"Yintale Karen", "Yintale"}, ["kvz"] = {"Tsakwambo", "Tsaukambo"}, ["kwa"] = {"Dâw"}, ["kwb"] = {"Kwa"}, ["kwc"] = {"Likwala"}, ["kwd"] = {"Kwaio"}, ["kwe"] = {"Kwerba"}, ["kwf"] = {"Kwara'ae"}, ["kwg"] = {"Sara Kaba Deme"}, ["kwh"] = {"Kowiai"}, ["kwi"] = {"Awa-Cuaiquer"}, ["kwj"] = {"Kwanga"}, ["kwk"] = {"Kwakiutl"}, ["kwl"] = {"Kofyar"}, ["kwm"] = {"Kwambi"}, ["kwn"] = {"Kwangali"}, ["kwo"] = {"Kwomtari"}, ["kwp"] = {"Kodia"}, ["kwr"] = {"Kwer"}, ["kws"] = {"Kwese"}, ["kwt"] = {"Kwesten"}, ["kwu"] = {"Kwakum"}, ["kwv"] = {"Sara Kaba Náà"}, ["kww"] = {"Kwinti"}, ["kwx"] = {"Khirwar"}, ["kwy"] = {"San Salvador Kongo"}, ["kwz"] = {"Kwadi"}, ["kxa"] = {"Kairiru"}, ["kxb"] = {"Krobu"}, ["kxc"] = {"Konso", "Khonso"}, ["kxd"] = {"Brunei"}, ["kxf"] = {"Manumanaw Karen", "Manumanaw"}, ["kxh"] = {"Karo (Ethiopia)"}, ["kxi"] = {"Keningau Murut"}, ["kxj"] = {"Kulfa"}, ["kxk"] = {"Zayein Karen"}, ["kxm"] = {"Northern Khmer"}, ["kxn"] = {"Kanowit-Tanjong Melanau"}, ["kxo"] = {"Kanoé"}, ["kxp"] = {"Wadiyara Koli"}, ["kxq"] = {"Smärky Kanum"}, ["kxr"] = {"Koro (Papua New Guinea)"}, ["kxs"] = {"Kangjia"}, ["kxt"] = {"Koiwat"}, ["kxv"] = {"Kuvi"}, ["kxw"] = {"Konai"}, ["kxx"] = {"Likuba"}, ["kxy"] = {"Kayong"}, ["kxz"] = {"Kerewo"}, ["kya"] = {"Kwaya"}, ["kyb"] = {"Butbut Kalinga"}, ["kyc"] = {"Kyaka"}, ["kyd"] = {"Karey"}, ["kye"] = {"Krache"}, ["kyf"] = {"Kouya"}, ["kyg"] = {"Keyagana"}, ["kyh"] = {"Karok"}, ["kyi"] = {"Kiput"}, ["kyj"] = {"Karao"}, ["kyk"] = {"Kamayo"}, ["kyl"] = {"Kalapuya"}, ["kym"] = {"Kpatili"}, ["kyn"] = {"Northern Binukidnon"}, ["kyo"] = {"Kelon"}, ["kyp"] = {"Kang"}, ["kyq"] = {"Kenga"}, ["kyr"] = {"Kuruáya"}, ["kys"] = {"Baram Kayan"}, ["kyt"] = {"Kayagar"}, ["kyu"] = {"Western Kayah"}, ["kyv"] = {"Kayort"}, ["kyw"] = {"Kudmali"}, ["kyx"] = {"Rapoisi"}, ["kyy"] = {"Kambaira"}, ["kyz"] = {"Kayabí"}, ["kza"] = {"Western Karaboro"}, ["kzb"] = {"Kaibobo"}, ["kzc"] = {"Bondoukou Kulango"}, ["kzd"] = {"Kadai"}, ["kze"] = {"Kosena"}, ["kzf"] = {"Da'a Kaili"}, ["kzg"] = {"Kikai"}, ["kzi"] = {"Kelabit"}, ["kzk"] = {"Kazukuru"}, ["kzl"] = {"Kayeli"}, ["kzm"] = {"Kais"}, ["kzn"] = {"Kokola"}, ["kzo"] = {"Kaningi"}, ["kzp"] = {"Kaidipang"}, ["kzq"] = {"Kaike"}, ["kzr"] = {"Karang"}, ["kzs"] = {"Sugut Dusun"}, ["kzu"] = {"Kayupulau"}, ["kzv"] = {"Komyandaret"}, ["kzw"] = {"Karirí-Xocó"}, ["kzx"] = {"Kamarian"}, ["kzy"] = {"Kango (Tshopo District)"}, ["kzz"] = {"Kalabra"}, ["laa"] = {"Southern Subanen"}, ["lab"] = {"Linear A"}, ["lac"] = {"Lacandon"}, ["lad"] = {"Ladino"}, ["lae"] = {"Pattani"}, ["laf"] = {"Lafofa"}, ["lag"] = {"Rangi"}, ["lah"] = {"Lahnda"}, ["lai"] = {"Lambya"}, ["laj"] = {"Lango (Uganda)"}, ["lal"] = {"Lalia"}, ["lam"] = {"Lamba"}, ["lan"] = {"Laru"}, ["lap"] = {"Laka (Chad)"}, ["laq"] = {"Qabiao"}, ["lar"] = {"Larteh"}, ["las"] = {"Lama (Togo)"}, ["lau"] = {"Laba"}, ["law"] = {"Lauje"}, ["lax"] = {"Tiwa"}, ["lay"] = {"Lama Bai"}, ["laz"] = {"Aribwatsa"}, ["lbb"] = {"Label"}, ["lbc"] = {"Lakkia"}, ["lbe"] = {"Lak"}, ["lbf"] = {"Tinani"}, ["lbg"] = {"Laopang"}, ["lbi"] = {"La'bi"}, ["lbj"] = {"Ladakhi"}, ["lbk"] = {"Central Bontok"}, ["lbl"] = {"Libon Bikol"}, ["lbm"] = {"Lodhi"}, ["lbn"] = {"Rmeet"}, ["lbo"] = {"Laven"}, ["lbq"] = {"Wampar"}, ["lbr"] = {"Lohorung"}, ["lbs"] = {"Libyan Sign Language"}, ["lbt"] = {"Lachi"}, ["lbu"] = {"Labu"}, ["lbv"] = {"Lavatbura-Lamusong"}, ["lbw"] = {"Tolaki"}, ["lbx"] = {"Lawangan"}, ["lby"] = {"Lamalama", "Lamu-Lamu"}, ["lbz"] = {"Lardil"}, ["lcc"] = {"Legenyem"}, ["lcd"] = {"Lola"}, ["lce"] = {"Loncong", "Sekak"}, ["lcf"] = {"Lubu"}, ["lch"] = {"Luchazi"}, ["lcl"] = {"Lisela"}, ["lcm"] = {"Tungag"}, ["lcp"] = {"Western Lawa"}, ["lcq"] = {"Luhu"}, ["lcs"] = {"Lisabata-Nuniali"}, ["lda"] = {"Kla-Dan"}, ["ldb"] = {"Dũya"}, ["ldd"] = {"Luri"}, ["ldg"] = {"Lenyima"}, ["ldh"] = {"Lamja-Dengsa-Tola"}, ["ldi"] = {"Laari"}, ["ldj"] = {"Lemoro"}, ["ldk"] = {"Leelau"}, ["ldl"] = {"Kaan"}, ["ldm"] = {"Landoma"}, ["ldn"] = {"Láadan"}, ["ldo"] = {"Loo"}, ["ldp"] = {"Tso"}, ["ldq"] = {"Lufu"}, ["lea"] = {"Lega-Shabunda"}, ["leb"] = {"Lala-Bisa"}, ["lec"] = {"Leco"}, ["led"] = {"Lendu"}, ["lee"] = {"Lyélé"}, ["lef"] = {"Lelemi"}, ["leh"] = {"Lenje"}, ["lei"] = {"Lemio"}, ["lej"] = {"Lengola"}, ["lek"] = {"Leipon"}, ["lel"] = {"Lele (Democratic Republic of Congo)"}, ["lem"] = {"Nomaande"}, ["len"] = {"Lenca"}, ["leo"] = {"Leti (Cameroon)"}, ["lep"] = {"Lepcha"}, ["leq"] = {"Lembena"}, ["ler"] = {"Lenkau"}, ["les"] = {"Lese"}, ["let"] = {"Lesing-Gelimi", "Amio-Gelimi"}, ["leu"] = {"Kara (Papua New Guinea)"}, ["lev"] = {"Lamma"}, ["lew"] = {"Ledo Kaili"}, ["lex"] = {"Luang"}, ["ley"] = {"Lemolang"}, ["lez"] = {"Lezghian"}, ["lfa"] = {"Lefa"}, ["lfn"] = {"Lingua Franca Nova"}, ["lga"] = {"Lungga"}, ["lgb"] = {"Laghu"}, ["lgg"] = {"Lugbara"}, ["lgh"] = {"Laghuu"}, ["lgi"] = {"Lengilu"}, ["lgk"] = {"Lingarak", "Neverver"}, ["lgl"] = {"Wala"}, ["lgm"] = {"Lega-Mwenga"}, ["lgn"] = {"T'apo", "Opuuo"}, ["lgo"] = {"Lango (South Sudan)"}, ["lgq"] = {"Logba"}, ["lgr"] = {"Lengo"}, ["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"}, ["lgt"] = {"Pahi"}, ["lgu"] = {"Longgu"}, ["lgz"] = {"Ligenza"}, ["lha"] = {"Laha (Viet Nam)"}, ["lhh"] = {"Laha (Indonesia)"}, ["lhi"] = {"Lahu Shi"}, ["lhl"] = {"Lahul Lohar"}, ["lhm"] = {"Lhomi"}, ["lhn"] = {"Lahanan"}, ["lhp"] = {"Lhokpu"}, ["lhs"] = {"Mlahsö"}, ["lht"] = {"Lo-Toga"}, ["lhu"] = {"Lahu"}, ["lia"] = {"West-Central Limba"}, ["lib"] = {"Likum"}, ["lic"] = {"Hlai"}, ["lid"] = {"Nyindrou"}, ["lie"] = {"Likila"}, ["lif"] = {"Limbu"}, ["lig"] = {"Ligbi"}, ["lih"] = {"Lihir"}, ["lij"] = {"Ligurian"}, ["lik"] = {"Lika"}, ["lil"] = {"Lillooet"}, ["lio"] = {"Liki"}, ["lip"] = {"Sekpele"}, ["liq"] = {"Libido"}, ["lir"] = {"Liberian English"}, ["lis"] = {"Lisu"}, ["liu"] = {"Logorik"}, ["liv"] = {"Liv"}, ["liw"] = {"Col"}, ["lix"] = {"Liabuku"}, ["liy"] = {"Banda-Bambari"}, ["liz"] = {"Libinza"}, ["lja"] = {"Golpa"}, ["lje"] = {"Rampi"}, ["lji"] = {"Laiyolo"}, ["ljl"] = {"Li'o"}, ["ljp"] = {"Lampung Api"}, ["ljw"] = {"Yirandali"}, ["ljx"] = {"Yuru"}, ["lka"] = {"Lakalei"}, ["lkb"] = {"Kabras", "Lukabaras"}, ["lkc"] = {"Kucong"}, ["lkd"] = {"Lakondê"}, ["lke"] = {"Kenyi"}, ["lkh"] = {"Lakha"}, ["lki"] = {"Laki"}, ["lkj"] = {"Remun"}, ["lkl"] = {"Laeko-Libuat"}, ["lkm"] = {"Kalaamaya"}, ["lkn"] = {"Lakon", "Vure"}, ["lko"] = {"Khayo", "Olukhayo"}, ["lkr"] = {"Päri"}, ["lks"] = {"Kisa", "Olushisa"}, ["lkt"] = {"Lakota"}, ["lku"] = {"Kungkari"}, ["lky"] = {"Lokoya"}, ["lla"] = {"Lala-Roba"}, ["llb"] = {"Lolo"}, ["llc"] = {"Lele (Guinea)"}, ["lld"] = {"Ladin"}, ["lle"] = {"Lele (Papua New Guinea)"}, ["llf"] = {"Hermit"}, ["llg"] = {"Lole"}, ["llh"] = {"Lamu"}, ["lli"] = {"Teke-Laali"}, ["llj"] = {"Ladji Ladji"}, ["llk"] = {"Lelak"}, ["lll"] = {"Lilau"}, ["llm"] = {"Lasalimu"}, ["lln"] = {"Lele (Chad)"}, ["llp"] = {"North Efate"}, ["llq"] = {"Lolak"}, ["lls"] = {"Lithuanian Sign Language"}, ["llu"] = {"Lau"}, ["llx"] = {"Lauan"}, ["lma"] = {"East Limba"}, ["lmb"] = {"Merei"}, ["lmc"] = {"Limilngan"}, ["lmd"] = {"Lumun"}, ["lme"] = {"Pévé"}, ["lmf"] = {"South Lembata"}, ["lmg"] = {"Lamogai"}, ["lmh"] = {"Lambichhong"}, ["lmi"] = {"Lombi"}, ["lmj"] = {"West Lembata"}, ["lmk"] = {"Lamkang"}, ["lml"] = {"Hano"}, ["lmn"] = {"Lambadi"}, ["lmo"] = {"Lombard"}, ["lmp"] = {"Limbum"}, ["lmq"] = {"Lamatuka"}, ["lmr"] = {"Lamalera"}, ["lmu"] = {"Lamenu"}, ["lmv"] = {"Lomaiviti"}, ["lmw"] = {"Lake Miwok"}, ["lmx"] = {"Laimbue"}, ["lmy"] = {"Lamboya"}, ["lna"] = {"Langbashe"}, ["lnb"] = {"Mbalanhu"}, ["lnd"] = {"Lundayeh", "Lun Bawang"}, ["lng"] = {"Langobardic"}, ["lnh"] = {"Lanoh"}, ["lni"] = {"Daantanai'"}, ["lnj"] = {"Leningitij"}, ["lnl"] = {"South Central Banda"}, ["lnm"] = {"Langam"}, ["lnn"] = {"Lorediakarkar"}, ["lns"] = {"Lamnso'"}, ["lnu"] = {"Longuda"}, ["lnw"] = {"Lanima"}, ["lnz"] = {"Lonzo"}, ["loa"] = {"Loloda"}, ["lob"] = {"Lobi"}, ["loc"] = {"Inonhan"}, ["loe"] = {"Saluan"}, ["lof"] = {"Logol"}, ["log"] = {"Logo"}, ["loh"] = {"Laarim", "Narim"}, ["loi"] = {"Loma (Côte d'Ivoire)"}, ["loj"] = {"Lou"}, ["lok"] = {"Loko"}, ["lol"] = {"Mongo"}, ["lom"] = {"Loma (Liberia)"}, ["lon"] = {"Malawi Lomwe"}, ["loo"] = {"Lombo"}, ["lop"] = {"Lopa"}, ["loq"] = {"Lobala"}, ["lor"] = {"Téén"}, ["los"] = {"Loniu"}, ["lot"] = {"Otuho"}, ["lou"] = {"Louisiana Creole"}, ["lov"] = {"Lopi"}, ["low"] = {"Tampias Lobu"}, ["lox"] = {"Loun"}, ["loy"] = {"Loke"}, ["loz"] = {"Lozi"}, ["lpa"] = {"Lelepa"}, ["lpe"] = {"Lepki"}, ["lpn"] = {"Long Phuri Naga"}, ["lpo"] = {"Lipo"}, ["lpx"] = {"Lopit"}, ["lqr"] = {"Logir"}, ["lra"] = {"Rara Bakati'"}, ["lrc"] = {"Northern Luri"}, ["lre"] = {"Laurentian"}, ["lrg"] = {"Laragia"}, ["lri"] = {"Marachi", "Olumarachi"}, ["lrk"] = {"Loarki"}, ["lrl"] = {"Lari"}, ["lrm"] = {"Marama", "Olumarama"}, ["lrn"] = {"Lorang"}, ["lro"] = {"Laro"}, ["lrr"] = {"Southern Yamphu"}, ["lrt"] = {"Larantuka Malay"}, ["lrv"] = {"Larevat"}, ["lrz"] = {"Lemerig"}, ["lsa"] = {"Lasgerdi"}, ["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"}, ["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"}, ["lsd"] = {"Lishana Deni"}, ["lse"] = {"Lusengo"}, ["lsh"] = {"Lish"}, ["lsi"] = {"Lashi"}, ["lsl"] = {"Latvian Sign Language"}, ["lsm"] = {"Saamia", "Olusamia"}, ["lsn"] = {"Tibetan Sign Language"}, ["lso"] = {"Laos Sign Language"}, ["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"}, ["lsr"] = {"Aruop"}, ["lss"] = {"Lasi"}, ["lst"] = {"Trinidad and Tobago Sign Language"}, ["lsv"] = {"Sivia Sign Language"}, ["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"}, ["lsy"] = {"Mauritian Sign Language"}, ["ltc"] = {"Late Middle Chinese"}, ["ltg"] = {"Latgalian"}, ["lth"] = {"Thur"}, ["lti"] = {"Leti (Indonesia)"}, ["ltn"] = {"Latundê"}, ["lto"] = {"Tsotso", "Olutsotso"}, ["lts"] = {"Tachoni", "Lutachoni"}, ["ltu"] = {"Latu"}, ["lua"] = {"Luba-Lulua"}, ["luc"] = {"Aringa"}, ["lud"] = {"Ludian"}, ["lue"] = {"Luvale"}, ["luf"] = {"Laua"}, ["lui"] = {"Luiseno"}, ["luj"] = {"Luna"}, ["luk"] = {"Lunanakha"}, ["lul"] = {"Olu'bo"}, ["lum"] = {"Luimbi"}, ["lun"] = {"Lunda"}, ["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"}, ["lup"] = {"Lumbu"}, ["luq"] = {"Lucumi"}, ["lur"] = {"Laura"}, ["lus"] = {"Lushai"}, ["lut"] = {"Lushootseed"}, ["luu"] = {"Lumba-Yakkha"}, ["luv"] = {"Luwati"}, ["luw"] = {"Luo (Cameroon)"}, ["luy"] = {"Luyia", "Oluluyia"}, ["luz"] = {"Southern Luri"}, ["lva"] = {"Maku'a"}, ["lvi"] = {"Lavi"}, ["lvk"] = {"Lavukaleve"}, ["lvl"] = {"Lwel"}, ["lvs"] = {"Standard Latvian"}, ["lvu"] = {"Levuka"}, ["lwa"] = {"Lwalu"}, ["lwe"] = {"Lewo Eleng"}, ["lwg"] = {"Wanga", "Oluwanga"}, ["lwh"] = {"White Lachi"}, ["lwl"] = {"Eastern Lawa"}, ["lwm"] = {"Laomian"}, ["lwo"] = {"Luwo"}, ["lws"] = {"Malawian Sign Language"}, ["lwt"] = {"Lewotobi"}, ["lwu"] = {"Lawu"}, ["lww"] = {"Lewo"}, ["lxm"] = {"Lakurumau"}, ["lya"] = {"Layakha"}, ["lyg"] = {"Lyngngam"}, ["lyn"] = {"Luyana"}, ["lzh"] = {"Literary Chinese"}, ["lzl"] = {"Litzlitz"}, ["lzn"] = {"Leinong Naga"}, ["lzz"] = {"Laz"}, ["maa"] = {"San Jerónimo Tecóatl Mazatec"}, ["mab"] = {"Yutanduchi Mixtec"}, ["mad"] = {"Madurese"}, ["mae"] = {"Bo-Rukul"}, ["maf"] = {"Mafa"}, ["mag"] = {"Magahi"}, ["mai"] = {"Maithili"}, ["maj"] = {"Jalapa De Díaz Mazatec"}, ["mak"] = {"Makasar"}, ["mam"] = {"Mam"}, ["man"] = {"Mandingo", "Manding"}, ["map"] = {"Austronesian languages"}, ["maq"] = {"Chiquihuitlán Mazatec"}, ["mas"] = {"Masai"}, ["mat"] = {"San Francisco Matlatzinca"}, ["mau"] = {"Huautla Mazatec"}, ["mav"] = {"Sateré-Mawé"}, ["maw"] = {"Mampruli"}, ["max"] = {"North Moluccan Malay"}, ["maz"] = {"Central Mazahua"}, ["mba"] = {"Higaonon"}, ["mbb"] = {"Western Bukidnon Manobo"}, ["mbc"] = {"Macushi"}, ["mbd"] = {"Dibabawon Manobo"}, ["mbe"] = {"Molale"}, ["mbf"] = {"Baba Malay"}, ["mbh"] = {"Mangseng"}, ["mbi"] = {"Ilianen Manobo"}, ["mbj"] = {"Nadëb"}, ["mbk"] = {"Malol"}, ["mbl"] = {"Maxakalí"}, ["mbm"] = {"Ombamba"}, ["mbn"] = {"Macaguán"}, ["mbo"] = {"Mbo (Cameroon)"}, ["mbp"] = {"Malayo"}, ["mbq"] = {"Maisin"}, ["mbr"] = {"Nukak Makú"}, ["mbs"] = {"Sarangani Manobo"}, ["mbt"] = {"Matigsalug Manobo"}, ["mbu"] = {"Mbula-Bwazza"}, ["mbv"] = {"Mbulungish"}, ["mbw"] = {"Maring"}, ["mbx"] = {"Mari (East Sepik Province)"}, ["mby"] = {"Memoni"}, ["mbz"] = {"Amoltepec Mixtec"}, ["mca"] = {"Maca"}, ["mcb"] = {"Machiguenga"}, ["mcc"] = {"Bitur"}, ["mcd"] = {"Sharanahua"}, ["mce"] = {"Itundujia Mixtec"}, ["mcf"] = {"Matsés"}, ["mcg"] = {"Mapoyo"}, ["mch"] = {"Maquiritari"}, ["mci"] = {"Mese"}, ["mcj"] = {"Mvanip"}, ["mck"] = {"Mbunda"}, ["mcl"] = {"Macaguaje"}, ["mcm"] = {"Malaccan Creole Portuguese"}, ["mcn"] = {"Masana"}, ["mco"] = {"Coatlán Mixe"}, ["mcp"] = {"Makaa"}, ["mcq"] = {"Ese"}, ["mcr"] = {"Menya"}, ["mcs"] = {"Mambai"}, ["mct"] = {"Mengisa"}, ["mcu"] = {"Cameroon Mambila"}, ["mcv"] = {"Minanibai"}, ["mcw"] = {"Mawa (Chad)"}, ["mcx"] = {"Mpiemo"}, ["mcy"] = {"South Watut"}, ["mcz"] = {"Mawan"}, ["mda"] = {"Mada (Nigeria)"}, ["mdb"] = {"Morigi"}, ["mdc"] = {"Male (Papua New Guinea)"}, ["mdd"] = {"Mbum"}, ["mde"] = {"Maba (Chad)"}, ["mdf"] = {"Moksha"}, ["mdg"] = {"Massalat"}, ["mdh"] = {"Maguindanaon"}, ["mdi"] = {"Mamvu"}, ["mdj"] = {"Mangbetu"}, ["mdk"] = {"Mangbutu"}, ["mdl"] = {"Maltese Sign Language"}, ["mdm"] = {"Mayogo"}, ["mdn"] = {"Mbati"}, ["mdp"] = {"Mbala"}, ["mdq"] = {"Mbole"}, ["mdr"] = {"Mandar"}, ["mds"] = {"Maria (Papua New Guinea)"}, ["mdt"] = {"Mbere"}, ["mdu"] = {"Mboko"}, ["mdv"] = {"Santa Lucía Monteverde Mixtec"}, ["mdw"] = {"Mbosi"}, ["mdx"] = {"Dizin"}, ["mdy"] = {"Male (Ethiopia)"}, ["mdz"] = {"Suruí Do Pará"}, ["mea"] = {"Menka"}, ["meb"] = {"Ikobi"}, ["mec"] = {"Marra"}, ["med"] = {"Melpa"}, ["mee"] = {"Mengen"}, ["mef"] = {"Megam"}, ["meh"] = {"Southwestern Tlaxiaco Mixtec"}, ["mei"] = {"Midob"}, ["mej"] = {"Meyah"}, ["mek"] = {"Mekeo"}, ["mel"] = {"Central Melanau"}, ["mem"] = {"Mangala"}, ["men"] = {"Mende (Sierra Leone)"}, ["meo"] = {"Kedah Malay"}, ["mep"] = {"Miriwoong"}, ["meq"] = {"Merey"}, ["mer"] = {"Meru"}, ["mes"] = {"Masmaje"}, ["met"] = {"Mato"}, ["meu"] = {"Motu"}, ["mev"] = {"Mano"}, ["mew"] = {"Maaka"}, ["mey"] = {"Hassaniyya"}, ["mez"] = {"Menominee"}, ["mfa"] = {"Pattani Malay"}, ["mfb"] = {"Bangka"}, ["mfc"] = {"Mba"}, ["mfd"] = {"Mendankwe-Nkwen"}, ["mfe"] = {"Morisyen"}, ["mff"] = {"Naki"}, ["mfg"] = {"Mogofin"}, ["mfh"] = {"Matal"}, ["mfi"] = {"Wandala"}, ["mfj"] = {"Mefele"}, ["mfk"] = {"North Mofu"}, ["mfl"] = {"Putai"}, ["mfm"] = {"Marghi South"}, ["mfn"] = {"Cross River Mbembe"}, ["mfo"] = {"Mbe"}, ["mfp"] = {"Makassar Malay"}, ["mfq"] = {"Moba"}, ["mfr"] = {"Marrithiyel"}, ["mfs"] = {"Mexican Sign Language"}, ["mft"] = {"Mokerang"}, ["mfu"] = {"Mbwela"}, ["mfv"] = {"Mandjak"}, ["mfw"] = {"Mulaha"}, ["mfx"] = {"Melo"}, ["mfy"] = {"Mayo"}, ["mfz"] = {"Mabaan"}, ["mga"] = {"Middle Irish (900-1200)"}, ["mgb"] = {"Mararit"}, ["mgc"] = {"Morokodo"}, ["mgd"] = {"Moru"}, ["mge"] = {"Mango"}, ["mgf"] = {"Maklew"}, ["mgg"] = {"Mpumpong"}, ["mgh"] = {"Makhuwa-Meetto"}, ["mgi"] = {"Lijili"}, ["mgj"] = {"Abureni"}, ["mgk"] = {"Mawes"}, ["mgl"] = {"Maleu-Kilenge"}, ["mgm"] = {"Mambae"}, ["mgn"] = {"Mbangi"}, ["mgo"] = {"Meta'"}, ["mgp"] = {"Eastern Magar"}, ["mgq"] = {"Malila"}, ["mgr"] = {"Mambwe-Lungu"}, ["mgs"] = {"Manda (Tanzania)"}, ["mgt"] = {"Mongol"}, ["mgu"] = {"Mailu"}, ["mgv"] = {"Matengo"}, ["mgw"] = {"Matumbi"}, ["mgy"] = {"Mbunga"}, ["mgz"] = {"Mbugwe"}, ["mha"] = {"Manda (India)"}, ["mhb"] = {"Mahongwe"}, ["mhc"] = {"Mocho"}, ["mhd"] = {"Mbugu"}, ["mhe"] = {"Besisi", "Mah Meri"}, ["mhf"] = {"Mamaa"}, ["mhg"] = {"Margu"}, ["mhi"] = {"Ma'di"}, ["mhj"] = {"Mogholi"}, ["mhk"] = {"Mungaka"}, ["mhl"] = {"Mauwake"}, ["mhm"] = {"Makhuwa-Moniga"}, ["mhn"] = {"Mócheno"}, ["mho"] = {"Mashi (Zambia)"}, ["mhp"] = {"Balinese Malay"}, ["mhq"] = {"Mandan"}, ["mhr"] = {"Eastern Mari"}, ["mhs"] = {"Buru (Indonesia)"}, ["mht"] = {"Mandahuaca"}, ["mhu"] = {"Digaro-Mishmi", "Darang Deng"}, ["mhw"] = {"Mbukushu"}, ["mhx"] = {"Maru", "Lhaovo"}, ["mhy"] = {"Ma'anyan"}, ["mhz"] = {"Mor (Mor Islands)"}, ["mia"] = {"Miami"}, ["mib"] = {"Atatláhuca Mixtec"}, ["mic"] = {"Mi'kmaq", "Micmac"}, ["mid"] = {"Mandaic"}, ["mie"] = {"Ocotepec Mixtec"}, ["mif"] = {"Mofu-Gudur"}, ["mig"] = {"San Miguel El Grande Mixtec"}, ["mih"] = {"Chayuco Mixtec"}, ["mii"] = {"Chigmecatitlán Mixtec"}, ["mij"] = {"Abar", "Mungbam"}, ["mik"] = {"Mikasuki"}, ["mil"] = {"Peñoles Mixtec"}, ["mim"] = {"Alacatlatzala Mixtec"}, ["min"] = {"Minangkabau"}, ["mio"] = {"Pinotepa Nacional Mixtec"}, ["mip"] = {"Apasco-Apoala Mixtec"}, ["miq"] = {"Mískito"}, ["mir"] = {"Isthmus Mixe"}, ["mis"] = {"Uncoded languages"}, ["mit"] = {"Southern Puebla Mixtec"}, ["miu"] = {"Cacaloxtepec Mixtec"}, ["miw"] = {"Akoye"}, ["mix"] = {"Mixtepec Mixtec"}, ["miy"] = {"Ayutla Mixtec"}, ["miz"] = {"Coatzospan Mixtec"}, ["mjb"] = {"Makalero"}, ["mjc"] = {"San Juan Colorado Mixtec"}, ["mjd"] = {"Northwest Maidu"}, ["mje"] = {"Muskum"}, ["mjg"] = {"Tu"}, ["mjh"] = {"Mwera (Nyasa)"}, ["mji"] = {"Kim Mun"}, ["mjj"] = {"Mawak"}, ["mjk"] = {"Matukar"}, ["mjl"] = {"Mandeali"}, ["mjm"] = {"Medebur"}, ["mjn"] = {"Ma (Papua New Guinea)"}, ["mjo"] = {"Malankuravan"}, ["mjp"] = {"Malapandaram"}, ["mjq"] = {"Malaryan"}, ["mjr"] = {"Malavedan"}, ["mjs"] = {"Miship"}, ["mjt"] = {"Sauria Paharia"}, ["mju"] = {"Manna-Dora"}, ["mjv"] = {"Mannan"}, ["mjw"] = {"Karbi"}, ["mjx"] = {"Mahali"}, ["mjy"] = {"Mahican"}, ["mjz"] = {"Majhi"}, ["mka"] = {"Mbre"}, ["mkb"] = {"Mal Paharia"}, ["mkc"] = {"Siliput"}, ["mke"] = {"Mawchi"}, ["mkf"] = {"Miya"}, ["mkg"] = {"Mak (China)"}, ["mkh"] = {"Mon-Khmer languages"}, ["mki"] = {"Dhatki"}, ["mkj"] = {"Mokilese"}, ["mkk"] = {"Byep"}, ["mkl"] = {"Mokole"}, ["mkm"] = {"Moklen"}, ["mkn"] = {"Kupang Malay"}, ["mko"] = {"Mingang Doso"}, ["mkp"] = {"Moikodi"}, ["mkq"] = {"Bay Miwok"}, ["mkr"] = {"Malas"}, ["mks"] = {"Silacayoapan Mixtec"}, ["mkt"] = {"Vamale"}, ["mku"] = {"Konyanka Maninka"}, ["mkv"] = {"Mafea"}, ["mkw"] = {"Kituba (Congo)"}, ["mkx"] = {"Kinamiging Manobo"}, ["mky"] = {"East Makian"}, ["mkz"] = {"Makasae"}, ["mla"] = {"Malo"}, ["mlb"] = {"Mbule"}, ["mlc"] = {"Cao Lan"}, ["mle"] = {"Manambu"}, ["mlf"] = {"Mal"}, ["mlh"] = {"Mape"}, ["mli"] = {"Malimpung"}, ["mlj"] = {"Miltu"}, ["mlk"] = {"Ilwana", "Kiwilwana"}, ["mll"] = {"Malua Bay"}, ["mlm"] = {"Mulam"}, ["mln"] = {"Malango"}, ["mlo"] = {"Mlomp"}, ["mlp"] = {"Bargam"}, ["mlq"] = {"Western Maninkakan"}, ["mlr"] = {"Vame"}, ["mls"] = {"Masalit"}, ["mlu"] = {"To'abaita"}, ["mlv"] = {"Motlav", "Mwotlap"}, ["mlw"] = {"Moloko"}, ["mlx"] = {"Malfaxal", "Naha'ai"}, ["mlz"] = {"Malaynon"}, ["mma"] = {"Mama"}, ["mmb"] = {"Momina"}, ["mmc"] = {"Michoacán Mazahua"}, ["mmd"] = {"Maonan"}, ["mme"] = {"Mae"}, ["mmf"] = {"Mundat"}, ["mmg"] = {"North Ambrym"}, ["mmh"] = {"Mehináku"}, ["mmi"] = {"Musar"}, ["mmj"] = {"Majhwar"}, ["mmk"] = {"Mukha-Dora"}, ["mml"] = {"Man Met"}, ["mmm"] = {"Maii"}, ["mmn"] = {"Mamanwa"}, ["mmo"] = {"Mangga Buang"}, ["mmp"] = {"Siawi"}, ["mmq"] = {"Musak"}, ["mmr"] = {"Western Xiangxi Miao"}, ["mmt"] = {"Malalamai"}, ["mmu"] = {"Mmaala"}, ["mmv"] = {"Miriti"}, ["mmw"] = {"Emae"}, ["mmx"] = {"Madak"}, ["mmy"] = {"Migaama"}, ["mmz"] = {"Mabaale"}, ["mna"] = {"Mbula"}, ["mnb"] = {"Muna"}, ["mnc"] = {"Manchu"}, ["mnd"] = {"Mondé"}, ["mne"] = {"Naba"}, ["mnf"] = {"Mundani"}, ["mng"] = {"Eastern Mnong"}, ["mnh"] = {"Mono (Democratic Republic of Congo)"}, ["mni"] = {"Manipuri"}, ["mnj"] = {"Munji"}, ["mnk"] = {"Mandinka"}, ["mnl"] = {"Tiale"}, ["mnm"] = {"Mapena"}, ["mnn"] = {"Southern Mnong"}, ["mno"] = {"Manobo languages"}, ["mnp"] = {"Min Bei Chinese"}, ["mnq"] = {"Minriq"}, ["mnr"] = {"Mono (USA)"}, ["mns"] = {"Mansi"}, ["mnu"] = {"Mer"}, ["mnv"] = {"Rennell-Bellona"}, ["mnw"] = {"Mon"}, ["mnx"] = {"Manikion"}, ["mny"] = {"Manyawa"}, ["mnz"] = {"Moni"}, ["moa"] = {"Mwan"}, ["moc"] = {"Mocoví"}, ["mod"] = {"Mobilian"}, ["moe"] = {"Innu", "Montagnais"}, ["mog"] = {"Mongondow"}, ["moh"] = {"Mohawk"}, ["moi"] = {"Mboi"}, ["moj"] = {"Monzombo"}, ["mok"] = {"Morori"}, ["mom"] = {"Mangue"}, ["moo"] = {"Monom"}, ["mop"] = {"Mopán Maya"}, ["moq"] = {"Mor (Bomberai Peninsula)"}, ["mor"] = {"Moro"}, ["mos"] = {"Mossi"}, ["mot"] = {"Barí"}, ["mou"] = {"Mogum"}, ["mov"] = {"Mohave"}, ["mow"] = {"Moi (Congo)"}, ["mox"] = {"Molima"}, ["moy"] = {"Shekkacho"}, ["moz"] = {"Mukulu", "Gergiko"}, ["mpa"] = {"Mpoto"}, ["mpb"] = {"Malak Malak", "Mullukmulluk"}, ["mpc"] = {"Mangarrayi"}, ["mpd"] = {"Machinere"}, ["mpe"] = {"Majang"}, ["mpg"] = {"Marba"}, ["mph"] = {"Maung"}, ["mpi"] = {"Mpade"}, ["mpj"] = {"Martu Wangka", "Wangkajunga"}, ["mpk"] = {"Mbara (Chad)"}, ["mpl"] = {"Middle Watut"}, ["mpm"] = {"Yosondúa Mixtec"}, ["mpn"] = {"Mindiri"}, ["mpo"] = {"Miu"}, ["mpp"] = {"Migabac"}, ["mpq"] = {"Matís"}, ["mpr"] = {"Vangunu"}, ["mps"] = {"Dadibi"}, ["mpt"] = {"Mian"}, ["mpu"] = {"Makuráp"}, ["mpv"] = {"Mungkip"}, ["mpw"] = {"Mapidian"}, ["mpx"] = {"Misima-Panaeati"}, ["mpy"] = {"Mapia"}, ["mpz"] = {"Mpi"}, ["mqa"] = {"Maba (Indonesia)"}, ["mqb"] = {"Mbuko"}, ["mqc"] = {"Mangole"}, ["mqe"] = {"Matepi"}, ["mqf"] = {"Momuna"}, ["mqg"] = {"Kota Bangun Kutai Malay"}, ["mqh"] = {"Tlazoyaltepec Mixtec"}, ["mqi"] = {"Mariri"}, ["mqj"] = {"Mamasa"}, ["mqk"] = {"Rajah Kabunsuwan Manobo"}, ["mql"] = {"Mbelime"}, ["mqm"] = {"South Marquesan"}, ["mqn"] = {"Moronene"}, ["mqo"] = {"Modole"}, ["mqp"] = {"Manipa"}, ["mqq"] = {"Minokok"}, ["mqr"] = {"Mander"}, ["mqs"] = {"West Makian"}, ["mqt"] = {"Mok"}, ["mqu"] = {"Mandari"}, ["mqv"] = {"Mosimo"}, ["mqw"] = {"Murupi"}, ["mqx"] = {"Mamuju"}, ["mqy"] = {"Manggarai"}, ["mqz"] = {"Pano"}, ["mra"] = {"Mlabri"}, ["mrb"] = {"Marino"}, ["mrc"] = {"Maricopa"}, ["mrd"] = {"Western Magar"}, ["mre"] = {"Martha's Vineyard Sign Language"}, ["mrf"] = {"Elseng"}, ["mrg"] = {"Mising"}, ["mrh"] = {"Mara Chin"}, ["mrj"] = {"Western Mari"}, ["mrk"] = {"Hmwaveke"}, ["mrl"] = {"Mortlockese"}, ["mrm"] = {"Merlav", "Mwerlap"}, ["mrn"] = {"Cheke Holo"}, ["mro"] = {"Mru"}, ["mrp"] = {"Morouas"}, ["mrq"] = {"North Marquesan"}, ["mrr"] = {"Maria (India)"}, ["mrs"] = {"Maragus"}, ["mrt"] = {"Marghi Central"}, ["mru"] = {"Mono (Cameroon)"}, ["mrv"] = {"Mangareva"}, ["mrw"] = {"Maranao"}, ["mrx"] = {"Maremgi", "Dineor"}, ["mry"] = {"Mandaya"}, ["mrz"] = {"Marind"}, ["msb"] = {"Masbatenyo"}, ["msc"] = {"Sankaran Maninka"}, ["msd"] = {"Yucatec Maya Sign Language"}, ["mse"] = {"Musey"}, ["msf"] = {"Mekwei"}, ["msg"] = {"Moraid"}, ["msh"] = {"Masikoro Malagasy"}, ["msi"] = {"Sabah Malay"}, ["msj"] = {"Ma (Democratic Republic of Congo)"}, ["msk"] = {"Mansaka"}, ["msl"] = {"Molof", "Poule"}, ["msm"] = {"Agusan Manobo"}, ["msn"] = {"Vurës"}, ["mso"] = {"Mombum"}, ["msp"] = {"Maritsauá"}, ["msq"] = {"Caac"}, ["msr"] = {"Mongolian Sign Language"}, ["mss"] = {"West Masela"}, ["msu"] = {"Musom"}, ["msv"] = {"Maslam"}, ["msw"] = {"Mansoanka"}, ["msx"] = {"Moresada"}, ["msy"] = {"Aruamu"}, ["msz"] = {"Momare"}, ["mta"] = {"Cotabato Manobo"}, ["mtb"] = {"Anyin Morofo"}, ["mtc"] = {"Munit"}, ["mtd"] = {"Mualang"}, ["mte"] = {"Mono (Solomon Islands)"}, ["mtf"] = {"Murik (Papua New Guinea)"}, ["mtg"] = {"Una"}, ["mth"] = {"Munggui"}, ["mti"] = {"Maiwa (Papua New Guinea)"}, ["mtj"] = {"Moskona"}, ["mtk"] = {"Mbe'"}, ["mtl"] = {"Montol"}, ["mtm"] = {"Mator"}, ["mtn"] = {"Matagalpa"}, ["mto"] = {"Totontepec Mixe"}, ["mtp"] = {"Wichí Lhamtés Nocten"}, ["mtq"] = {"Muong"}, ["mtr"] = {"Mewari"}, ["mts"] = {"Yora"}, ["mtt"] = {"Mota"}, ["mtu"] = {"Tututepec Mixtec"}, ["mtv"] = {"Asaro'o"}, ["mtw"] = {"Southern Binukidnon"}, ["mtx"] = {"Tidaá Mixtec"}, ["mty"] = {"Nabi"}, ["mua"] = {"Mundang"}, ["mub"] = {"Mubi"}, ["muc"] = {"Ajumbu"}, ["mud"] = {"Mednyj Aleut"}, ["mue"] = {"Media Lengua"}, ["mug"] = {"Musgu"}, ["muh"] = {"Mündü"}, ["mui"] = {"Musi"}, ["muj"] = {"Mabire"}, ["muk"] = {"Mugom"}, ["mul"] = {"Multiple languages"}, ["mum"] = {"Maiwala"}, ["mun"] = {"Munda languages"}, ["muo"] = {"Nyong"}, ["mup"] = {"Malvi"}, ["muq"] = {"Eastern Xiangxi Miao"}, ["mur"] = {"Murle"}, ["mus"] = {"Creek"}, ["mut"] = {"Western Muria"}, ["muu"] = {"Yaaku"}, ["muv"] = {"Muthuvan"}, ["mux"] = {"Bo-Ung"}, ["muy"] = {"Muyang"}, ["muz"] = {"Mursi"}, ["mva"] = {"Manam"}, ["mvb"] = {"Mattole"}, ["mvd"] = {"Mamboru"}, ["mve"] = {"Marwari (Pakistan)"}, ["mvf"] = {"Peripheral Mongolian"}, ["mvg"] = {"Yucuañe Mixtec"}, ["mvh"] = {"Mulgi"}, ["mvi"] = {"Miyako"}, ["mvk"] = {"Mekmek"}, ["mvl"] = {"Mbara (Australia)"}, ["mvn"] = {"Minaveha"}, ["mvo"] = {"Marovo"}, ["mvp"] = {"Duri"}, ["mvq"] = {"Moere"}, ["mvr"] = {"Marau"}, ["mvs"] = {"Massep"}, ["mvt"] = {"Mpotovoro"}, ["mvu"] = {"Marfa"}, ["mvv"] = {"Tagal Murut"}, ["mvw"] = {"Machinga"}, ["mvx"] = {"Meoswar"}, ["mvy"] = {"Indus Kohistani"}, ["mvz"] = {"Mesqan"}, ["mwa"] = {"Mwatebu"}, ["mwb"] = {"Juwal"}, ["mwc"] = {"Are"}, ["mwe"] = {"Mwera (Chimwera)"}, ["mwf"] = {"Murrinh-Patha"}, ["mwg"] = {"Aiklep"}, ["mwh"] = {"Mouk-Aria"}, ["mwi"] = {"Labo", "Ninde"}, ["mwk"] = {"Kita Maninkakan"}, ["mwl"] = {"Mirandese"}, ["mwm"] = {"Sar"}, ["mwn"] = {"Nyamwanga"}, ["mwo"] = {"Central Maewo"}, ["mwp"] = {"Kala Lagaw Ya"}, ["mwq"] = {"Mün Chin"}, ["mwr"] = {"Marwari"}, ["mws"] = {"Mwimbi-Muthambi"}, ["mwt"] = {"Moken"}, ["mwu"] = {"Mittu"}, ["mwv"] = {"Mentawai"}, ["mww"] = {"Hmong Daw"}, ["mwz"] = {"Moingi"}, ["mxa"] = {"Northwest Oaxaca Mixtec"}, ["mxb"] = {"Tezoatlán Mixtec"}, ["mxc"] = {"Manyika"}, ["mxd"] = {"Modang"}, ["mxe"] = {"Mele-Fila"}, ["mxf"] = {"Malgbe"}, ["mxg"] = {"Mbangala"}, ["mxh"] = {"Mvuba"}, ["mxi"] = {"Mozarabic"}, ["mxj"] = {"Miju-Mishmi", "Geman Deng"}, ["mxk"] = {"Monumbo"}, ["mxl"] = {"Maxi Gbe"}, ["mxm"] = {"Meramera"}, ["mxn"] = {"Moi (Indonesia)"}, ["mxo"] = {"Mbowe"}, ["mxp"] = {"Tlahuitoltepec Mixe"}, ["mxq"] = {"Juquila Mixe"}, ["mxr"] = {"Murik (Malaysia)"}, ["mxs"] = {"Huitepec Mixtec"}, ["mxt"] = {"Jamiltepec Mixtec"}, ["mxu"] = {"Mada (Cameroon)"}, ["mxv"] = {"Metlatónoc Mixtec"}, ["mxw"] = {"Namo"}, ["mxx"] = {"Mahou", "Mawukakan"}, ["mxy"] = {"Southeastern Nochixtlán Mixtec"}, ["mxz"] = {"Central Masela"}, ["myb"] = {"Mbay"}, ["myc"] = {"Mayeka"}, ["mye"] = {"Myene"}, ["myf"] = {"Bambassi"}, ["myg"] = {"Manta"}, ["myh"] = {"Makah"}, ["myj"] = {"Mangayat"}, ["myk"] = {"Mamara Senoufo"}, ["myl"] = {"Moma"}, ["mym"] = {"Me'en"}, ["myn"] = {"Mayan languages"}, ["myo"] = {"Anfillo"}, ["myp"] = {"Pirahã"}, ["myr"] = {"Muniche"}, ["mys"] = {"Mesmes"}, ["myu"] = {"Mundurukú"}, ["myv"] = {"Erzya"}, ["myw"] = {"Muyuw"}, ["myx"] = {"Masaaba"}, ["myy"] = {"Macuna"}, ["myz"] = {"Classical Mandaic"}, ["mza"] = {"Santa María Zacatepec Mixtec"}, ["mzb"] = {"Tumzabt"}, ["mzc"] = {"Madagascar Sign Language"}, ["mzd"] = {"Malimba"}, ["mze"] = {"Morawa"}, ["mzg"] = {"Monastic Sign Language"}, ["mzh"] = {"Wichí Lhamtés Güisnay"}, ["mzi"] = {"Ixcatlán Mazatec"}, ["mzj"] = {"Manya"}, ["mzk"] = {"Nigeria Mambila"}, ["mzl"] = {"Mazatlán Mixe"}, ["mzm"] = {"Mumuye"}, ["mzn"] = {"Mazanderani"}, ["mzo"] = {"Matipuhy"}, ["mzp"] = {"Movima"}, ["mzq"] = {"Mori Atas"}, ["mzr"] = {"Marúbo"}, ["mzs"] = {"Macanese"}, ["mzt"] = {"Mintil"}, ["mzu"] = {"Inapang"}, ["mzv"] = {"Manza"}, ["mzw"] = {"Deg"}, ["mzx"] = {"Mawayana"}, ["mzy"] = {"Mozambican Sign Language"}, ["mzz"] = {"Maiadomu"}, ["naa"] = {"Namla"}, ["nab"] = {"Southern Nambikuára"}, ["nac"] = {"Narak"}, ["nae"] = {"Naka'ela"}, ["naf"] = {"Nabak"}, ["nag"] = {"Naga Pidgin"}, ["nah"] = {"Nahuatl languages"}, ["nai"] = {"North American Indian languages"}, ["naj"] = {"Nalu"}, ["nak"] = {"Nakanai"}, ["nal"] = {"Nalik"}, ["nam"] = {"Ngan'gityemerri"}, ["nan"] = {"Min Nan Chinese"}, ["nao"] = {"Naaba"}, ["nap"] = {"Neapolitan"}, ["naq"] = {"Khoekhoe", "Nama (Namibia)"}, ["nar"] = {"Iguta"}, ["nas"] = {"Naasioi"}, ["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"}, ["naw"] = {"Nawuri"}, ["nax"] = {"Nakwi"}, ["nay"] = {"Ngarrindjeri"}, ["naz"] = {"Coatepec Nahuatl"}, ["nba"] = {"Nyemba"}, ["nbb"] = {"Ndoe"}, ["nbc"] = {"Chang Naga"}, ["nbd"] = {"Ngbinda"}, ["nbe"] = {"Konyak Naga"}, ["nbg"] = {"Nagarchal"}, ["nbh"] = {"Ngamo"}, ["nbi"] = {"Mao Naga"}, ["nbj"] = {"Ngarinyman"}, ["nbk"] = {"Nake"}, ["nbm"] = {"Ngbaka Ma'bo"}, ["nbn"] = {"Kuri"}, ["nbo"] = {"Nkukoli"}, ["nbp"] = {"Nnam"}, ["nbq"] = {"Nggem"}, ["nbr"] = {"Numana"}, ["nbs"] = {"Namibian Sign Language"}, ["nbt"] = {"Na"}, ["nbu"] = {"Rongmei Naga"}, ["nbv"] = {"Ngamambo"}, ["nbw"] = {"Southern Ngbandi"}, ["nby"] = {"Ningera"}, ["nca"] = {"Iyo"}, ["ncb"] = {"Central Nicobarese"}, ["ncc"] = {"Ponam"}, ["ncd"] = {"Nachering"}, ["nce"] = {"Yale"}, ["ncf"] = {"Notsi"}, ["ncg"] = {"Nisga'a"}, ["nch"] = {"Central Huasteca Nahuatl"}, ["nci"] = {"Classical Nahuatl"}, ["ncj"] = {"Northern Puebla Nahuatl"}, ["nck"] = {"Na-kara"}, ["ncl"] = {"Michoacán Nahuatl"}, ["ncm"] = {"Nambo"}, ["ncn"] = {"Nauna"}, ["nco"] = {"Sibe"}, ["ncq"] = {"Northern Katang"}, ["ncr"] = {"Ncane"}, ["ncs"] = {"Nicaraguan Sign Language"}, ["nct"] = {"Chothe Naga"}, ["ncu"] = {"Chumburung"}, ["ncx"] = {"Central Puebla Nahuatl"}, ["ncz"] = {"Natchez"}, ["nda"] = {"Ndasa"}, ["ndb"] = {"Kenswei Nsei"}, ["ndc"] = {"Ndau"}, ["ndd"] = {"Nde-Nsele-Nta"}, ["ndf"] = {"Nadruvian"}, ["ndg"] = {"Ndengereko"}, ["ndh"] = {"Ndali"}, ["ndi"] = {"Samba Leko"}, ["ndj"] = {"Ndamba"}, ["ndk"] = {"Ndaka"}, ["ndl"] = {"Ndolo"}, ["ndm"] = {"Ndam"}, ["ndn"] = {"Ngundi"}, ["ndp"] = {"Ndo"}, ["ndq"] = {"Ndombe"}, ["ndr"] = {"Ndoola"}, ["nds"] = {"Low German", "Low Saxon"}, ["ndt"] = {"Ndunga"}, ["ndu"] = {"Dugun"}, ["ndv"] = {"Ndut"}, ["ndw"] = {"Ndobo"}, ["ndx"] = {"Nduga"}, ["ndy"] = {"Lutos"}, ["ndz"] = {"Ndogo"}, ["nea"] = {"Eastern Ngad'a"}, ["neb"] = {"Toura (Côte d'Ivoire)"}, ["nec"] = {"Nedebang"}, ["ned"] = {"Nde-Gbite"}, ["nee"] = {"Nêlêmwa-Nixumwak"}, ["nef"] = {"Nefamese"}, ["neg"] = {"Negidal"}, ["neh"] = {"Nyenkha"}, ["nei"] = {"Neo-Hittite"}, ["nej"] = {"Neko"}, ["nek"] = {"Neku"}, ["nem"] = {"Nemi"}, ["nen"] = {"Nengone"}, ["neo"] = {"Ná-Meo"}, ["neq"] = {"North Central Mixe"}, ["ner"] = {"Yahadian"}, ["nes"] = {"Bhoti Kinnauri"}, ["net"] = {"Nete"}, ["neu"] = {"Neo"}, ["nev"] = {"Nyaheun"}, ["new"] = {"Newari", "Nepal Bhasa"}, ["nex"] = {"Neme"}, ["ney"] = {"Neyo"}, ["nez"] = {"Nez Perce"}, ["nfa"] = {"Dhao"}, ["nfd"] = {"Ahwai"}, ["nfl"] = {"Ayiwo", "Äiwoo"}, ["nfr"] = {"Nafaanra"}, ["nfu"] = {"Mfumte"}, ["nga"] = {"Ngbaka"}, ["ngb"] = {"Northern Ngbandi"}, ["ngc"] = {"Ngombe (Democratic Republic of Congo)"}, ["ngd"] = {"Ngando (Central African Republic)"}, ["nge"] = {"Ngemba"}, ["ngf"] = {"Trans-New Guinea languages"}, ["ngg"] = {"Ngbaka Manza"}, ["ngh"] = {"Nǁng"}, ["ngi"] = {"Ngizim"}, ["ngj"] = {"Ngie"}, ["ngk"] = {"Dalabon"}, ["ngl"] = {"Lomwe"}, ["ngm"] = {"Ngatik Men's Creole"}, ["ngn"] = {"Ngwo"}, ["ngp"] = {"Ngulu"}, ["ngq"] = {"Ngurimi", "Ngoreme"}, ["ngr"] = {"Engdewu"}, ["ngs"] = {"Gvoko"}, ["ngt"] = {"Kriang", "Ngeq"}, ["ngu"] = {"Guerrero Nahuatl"}, ["ngv"] = {"Nagumi"}, ["ngw"] = {"Ngwaba"}, ["ngx"] = {"Nggwahyi"}, ["ngy"] = {"Tibea"}, ["ngz"] = {"Ngungwel"}, ["nha"] = {"Nhanda"}, ["nhb"] = {"Beng"}, ["nhc"] = {"Tabasco Nahuatl"}, ["nhd"] = {"Chiripá", "Ava Guaraní"}, ["nhe"] = {"Eastern Huasteca Nahuatl"}, ["nhf"] = {"Nhuwala"}, ["nhg"] = {"Tetelcingo Nahuatl"}, ["nhh"] = {"Nahari"}, ["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"}, ["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"}, ["nhm"] = {"Morelos Nahuatl"}, ["nhn"] = {"Central Nahuatl"}, ["nho"] = {"Takuu"}, ["nhp"] = {"Isthmus-Pajapan Nahuatl"}, ["nhq"] = {"Huaxcaleca Nahuatl"}, ["nhr"] = {"Naro"}, ["nht"] = {"Ometepec Nahuatl"}, ["nhu"] = {"Noone"}, ["nhv"] = {"Temascaltepec Nahuatl"}, ["nhw"] = {"Western Huasteca Nahuatl"}, ["nhx"] = {"Isthmus-Mecayapan Nahuatl"}, ["nhy"] = {"Northern Oaxaca Nahuatl"}, ["nhz"] = {"Santa María La Alta Nahuatl"}, ["nia"] = {"Nias"}, ["nib"] = {"Nakame"}, ["nic"] = {"Niger-Kordofanian languages"}, ["nid"] = {"Ngandi"}, ["nie"] = {"Niellim"}, ["nif"] = {"Nek"}, ["nig"] = {"Ngalakgan"}, ["nih"] = {"Nyiha (Tanzania)"}, ["nii"] = {"Nii"}, ["nij"] = {"Ngaju"}, ["nik"] = {"Southern Nicobarese"}, ["nil"] = {"Nila"}, ["nim"] = {"Nilamba"}, ["nin"] = {"Ninzo"}, ["nio"] = {"Nganasan"}, ["niq"] = {"Nandi"}, ["nir"] = {"Nimboran"}, ["nis"] = {"Nimi"}, ["nit"] = {"Southeastern Kolami"}, ["niu"] = {"Niuean"}, ["niv"] = {"Gilyak"}, ["niw"] = {"Nimo"}, ["nix"] = {"Hema"}, ["niy"] = {"Ngiti"}, ["niz"] = {"Ningil"}, ["nja"] = {"Nzanyi"}, ["njb"] = {"Nocte Naga"}, ["njd"] = {"Ndonde Hamba"}, ["njh"] = {"Lotha Naga"}, ["nji"] = {"Gudanji"}, ["njj"] = {"Njen"}, ["njl"] = {"Njalgulgule"}, ["njm"] = {"Angami Naga"}, ["njn"] = {"Liangmai Naga"}, ["njo"] = {"Ao Naga"}, ["njr"] = {"Njerep"}, ["njs"] = {"Nisa"}, ["njt"] = {"Ndyuka-Trio Pidgin"}, ["nju"] = {"Ngadjunmaya"}, ["njx"] = {"Kunyi"}, ["njy"] = {"Njyem"}, ["njz"] = {"Nyishi"}, ["nka"] = {"Nkoya"}, ["nkb"] = {"Khoibu Naga"}, ["nkc"] = {"Nkongho"}, ["nkd"] = {"Koireng"}, ["nke"] = {"Duke"}, ["nkf"] = {"Inpui Naga"}, ["nkg"] = {"Nekgini"}, ["nkh"] = {"Khezha Naga"}, ["nki"] = {"Thangal Naga"}, ["nkj"] = {"Nakai"}, ["nkk"] = {"Nokuku"}, ["nkm"] = {"Namat"}, ["nkn"] = {"Nkangala"}, ["nko"] = {"Nkonya"}, ["nkp"] = {"Niuatoputapu"}, ["nkq"] = {"Nkami"}, ["nkr"] = {"Nukuoro"}, ["nks"] = {"North Asmat"}, ["nkt"] = {"Nyika (Tanzania)"}, ["nku"] = {"Bouna Kulango"}, ["nkv"] = {"Nyika (Malawi and Zambia)"}, ["nkw"] = {"Nkutu"}, ["nkx"] = {"Nkoroo"}, ["nkz"] = {"Nkari"}, ["nla"] = {"Ngombale"}, ["nlc"] = {"Nalca"}, ["nle"] = {"East Nyala"}, ["nlg"] = {"Gela"}, ["nli"] = {"Grangali"}, ["nlj"] = {"Nyali"}, ["nlk"] = {"Ninia Yali"}, ["nll"] = {"Nihali"}, ["nlm"] = {"Mankiyali"}, ["nlo"] = {"Ngul"}, ["nlq"] = {"Lao Naga"}, ["nlu"] = {"Nchumbulu"}, ["nlv"] = {"Orizaba Nahuatl"}, ["nlw"] = {"Walangama"}, ["nlx"] = {"Nahali"}, ["nly"] = {"Nyamal"}, ["nlz"] = {"Nalögo"}, ["nma"] = {"Maram Naga"}, ["nmb"] = {"Big Nambas", "V'ënen Taut"}, ["nmc"] = {"Ngam"}, ["nmd"] = {"Ndumu"}, ["nme"] = {"Mzieme Naga"}, ["nmf"] = {"Tangkhul Naga (India)"}, ["nmg"] = {"Kwasio"}, ["nmh"] = {"Monsang Naga"}, ["nmi"] = {"Nyam"}, ["nmj"] = {"Ngombe (Central African Republic)"}, ["nmk"] = {"Namakura"}, ["nml"] = {"Ndemli"}, ["nmm"] = {"Manangba"}, ["nmn"] = {"ǃXóõ"}, ["nmo"] = {"Moyon Naga"}, ["nmp"] = {"Nimanbur"}, ["nmq"] = {"Nambya"}, ["nmr"] = {"Nimbari"}, ["nms"] = {"Letemboi"}, ["nmt"] = {"Namonuito"}, ["nmu"] = {"Northeast Maidu"}, ["nmv"] = {"Ngamini"}, ["nmw"] = {"Nimoa", "Rifao"}, ["nmx"] = {"Nama (Papua New Guinea)"}, ["nmy"] = {"Namuyi"}, ["nmz"] = {"Nawdm"}, ["nna"] = {"Nyangumarta"}, ["nnb"] = {"Nande"}, ["nnc"] = {"Nancere"}, ["nnd"] = {"West Ambae"}, ["nne"] = {"Ngandyera"}, ["nnf"] = {"Ngaing"}, ["nng"] = {"Maring Naga"}, ["nnh"] = {"Ngiemboon"}, ["nni"] = {"North Nuaulu"}, ["nnj"] = {"Nyangatom"}, ["nnk"] = {"Nankina"}, ["nnl"] = {"Northern Rengma Naga"}, ["nnm"] = {"Namia"}, ["nnn"] = {"Ngete"}, ["nnp"] = {"Wancho Naga"}, ["nnq"] = {"Ngindo"}, ["nnr"] = {"Narungga"}, ["nnt"] = {"Nanticoke"}, ["nnu"] = {"Dwang"}, ["nnv"] = {"Nugunu (Australia)"}, ["nnw"] = {"Southern Nuni"}, ["nny"] = {"Nyangga"}, ["nnz"] = {"Nda'nda'"}, ["noa"] = {"Woun Meu"}, ["noc"] = {"Nuk"}, ["nod"] = {"Northern Thai"}, ["noe"] = {"Nimadi"}, ["nof"] = {"Nomane"}, ["nog"] = {"Nogai"}, ["noh"] = {"Nomu"}, ["noi"] = {"Noiri"}, ["noj"] = {"Nonuya"}, ["nok"] = {"Nooksack"}, ["nol"] = {"Nomlaki"}, ["non"] = {"Old Norse"}, ["nop"] = {"Numanggang"}, ["noq"] = {"Ngongo"}, ["nos"] = {"Eastern Nisu"}, ["not"] = {"Nomatsiguenga"}, ["nou"] = {"Ewage-Notu"}, ["nov"] = {"Novial"}, ["now"] = {"Nyambo"}, ["noy"] = {"Noy"}, ["noz"] = {"Nayi"}, ["npa"] = {"Nar Phu"}, ["npb"] = {"Nupbikha"}, ["npg"] = {"Ponyo-Gongwang Naga"}, ["nph"] = {"Phom Naga"}, ["npi"] = {"Nepali (individual language)"}, ["npl"] = {"Southeastern Puebla Nahuatl"}, ["npn"] = {"Mondropolon"}, ["npo"] = {"Pochuri Naga"}, ["nps"] = {"Nipsan"}, ["npu"] = {"Puimei Naga"}, ["npx"] = {"Noipx"}, ["npy"] = {"Napu"}, ["nqg"] = {"Southern Nago"}, ["nqk"] = {"Kura Ede Nago"}, ["nql"] = {"Ngendelengo"}, ["nqm"] = {"Ndom"}, ["nqn"] = {"Nen"}, ["nqo"] = {"N'Ko", "N’Ko"}, ["nqq"] = {"Kyan-Karyaw Naga"}, ["nqt"] = {"Nteng"}, ["nqy"] = {"Akyaung Ari Naga"}, ["nra"] = {"Ngom"}, ["nrb"] = {"Nara"}, ["nrc"] = {"Noric"}, ["nre"] = {"Southern Rengma Naga"}, ["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"}, ["nrg"] = {"Narango"}, ["nri"] = {"Chokri Naga"}, ["nrk"] = {"Ngarla"}, ["nrl"] = {"Ngarluma"}, ["nrm"] = {"Narom"}, ["nrn"] = {"Norn"}, ["nrp"] = {"North Picene"}, ["nrr"] = {"Norra", "Nora"}, ["nrt"] = {"Northern Kalapuya"}, ["nru"] = {"Narua"}, ["nrx"] = {"Ngurmbur"}, ["nrz"] = {"Lala"}, ["nsa"] = {"Sangtam Naga"}, ["nsb"] = {"Lower Nossob"}, ["nsc"] = {"Nshi"}, ["nsd"] = {"Southern Nisu"}, ["nse"] = {"Nsenga"}, ["nsf"] = {"Northwestern Nisu"}, ["nsg"] = {"Ngasa"}, ["nsh"] = {"Ngoshie"}, ["nsi"] = {"Nigerian Sign Language"}, ["nsk"] = {"Naskapi"}, ["nsl"] = {"Norwegian Sign Language"}, ["nsm"] = {"Sumi Naga"}, ["nsn"] = {"Nehan"}, ["nso"] = {"Pedi", "Northern Sotho", "Sepedi"}, ["nsp"] = {"Nepalese Sign Language"}, ["nsq"] = {"Northern Sierra Miwok"}, ["nsr"] = {"Maritime Sign Language"}, ["nss"] = {"Nali"}, ["nst"] = {"Tase Naga"}, ["nsu"] = {"Sierra Negra Nahuatl"}, ["nsv"] = {"Southwestern Nisu"}, ["nsw"] = {"Navut"}, ["nsx"] = {"Nsongo"}, ["nsy"] = {"Nasal"}, ["nsz"] = {"Nisenan"}, ["ntd"] = {"Northern Tidung"}, ["nte"] = {"Nathembo"}, ["ntg"] = {"Ngantangarra"}, ["nti"] = {"Natioro"}, ["ntj"] = {"Ngaanyatjarra"}, ["ntk"] = {"Ikoma-Nata-Isenye"}, ["ntm"] = {"Nateni"}, ["nto"] = {"Ntomba"}, ["ntp"] = {"Northern Tepehuan"}, ["ntr"] = {"Delo"}, ["ntu"] = {"Natügu"}, ["ntw"] = {"Nottoway"}, ["ntx"] = {"Tangkhul Naga (Myanmar)"}, ["nty"] = {"Mantsi"}, ["ntz"] = {"Natanzi"}, ["nua"] = {"Yuanga"}, ["nub"] = {"Nubian languages"}, ["nuc"] = {"Nukuini"}, ["nud"] = {"Ngala"}, ["nue"] = {"Ngundu"}, ["nuf"] = {"Nusu"}, ["nug"] = {"Nungali"}, ["nuh"] = {"Ndunda"}, ["nui"] = {"Ngumbi"}, ["nuj"] = {"Nyole"}, ["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"}, ["nul"] = {"Nusa Laut"}, ["num"] = {"Niuafo'ou"}, ["nun"] = {"Anong"}, ["nuo"] = {"Nguôn"}, ["nup"] = {"Nupe-Nupe-Tako"}, ["nuq"] = {"Nukumanu"}, ["nur"] = {"Nukuria"}, ["nus"] = {"Nuer"}, ["nut"] = {"Nung (Viet Nam)"}, ["nuu"] = {"Ngbundu"}, ["nuv"] = {"Northern Nuni"}, ["nuw"] = {"Nguluwan"}, ["nux"] = {"Mehek"}, ["nuy"] = {"Nunggubuyu"}, ["nuz"] = {"Tlamacazapa Nahuatl"}, ["nvh"] = {"Nasarian"}, ["nvm"] = {"Namiae"}, ["nvo"] = {"Nyokon"}, ["nwa"] = {"Nawathinehena"}, ["nwb"] = {"Nyabwa"}, ["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"}, ["nwe"] = {"Ngwe"}, ["nwg"] = {"Ngayawung"}, ["nwi"] = {"Southwest Tanna"}, ["nwm"] = {"Nyamusa-Molo"}, ["nwo"] = {"Nauo"}, ["nwr"] = {"Nawaru"}, ["nww"] = {"Ndwewe"}, ["nwx"] = {"Middle Newar"}, ["nwy"] = {"Nottoway-Meherrin"}, ["nxa"] = {"Nauete"}, ["nxd"] = {"Ngando (Democratic Republic of Congo)"}, ["nxe"] = {"Nage"}, ["nxg"] = {"Ngad'a"}, ["nxi"] = {"Nindi"}, ["nxk"] = {"Koki Naga"}, ["nxl"] = {"South Nuaulu"}, ["nxm"] = {"Numidian"}, ["nxn"] = {"Ngawun"}, ["nxo"] = {"Ndambomo"}, ["nxq"] = {"Naxi"}, ["nxr"] = {"Ninggerum"}, ["nxx"] = {"Nafri"}, ["nyb"] = {"Nyangbo"}, ["nyc"] = {"Nyanga-li"}, ["nyd"] = {"Nyore", "Olunyole"}, ["nye"] = {"Nyengo"}, ["nyf"] = {"Giryama", "Kigiryama"}, ["nyg"] = {"Nyindu"}, ["nyh"] = {"Nyikina"}, ["nyi"] = {"Ama (Sudan)"}, ["nyj"] = {"Nyanga"}, ["nyk"] = {"Nyaneka"}, ["nyl"] = {"Nyeu"}, ["nym"] = {"Nyamwezi"}, ["nyn"] = {"Nyankole"}, ["nyo"] = {"Nyoro"}, ["nyp"] = {"Nyang'i"}, ["nyq"] = {"Nayini"}, ["nyr"] = {"Nyiha (Malawi)"}, ["nys"] = {"Nyungar"}, ["nyt"] = {"Nyawaygi"}, ["nyu"] = {"Nyungwe"}, ["nyv"] = {"Nyulnyul"}, ["nyw"] = {"Nyaw"}, ["nyx"] = {"Nganyaywana"}, ["nyy"] = {"Nyakyusa-Ngonde"}, ["nza"] = {"Tigon Mbembe"}, ["nzb"] = {"Njebi"}, ["nzd"] = {"Nzadi"}, ["nzi"] = {"Nzima"}, ["nzk"] = {"Nzakara"}, ["nzm"] = {"Zeme Naga"}, ["nzr"] = {"Dir-Nyamzak-Mbarimi"}, ["nzs"] = {"New Zealand Sign Language"}, ["nzu"] = {"Teke-Nzikou"}, ["nzy"] = {"Nzakambay"}, ["nzz"] = {"Nanga Dama Dogon"}, ["oaa"] = {"Orok"}, ["oac"] = {"Oroch"}, ["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"}, ["oav"] = {"Old Avar"}, ["obi"] = {"Obispeño"}, ["obk"] = {"Southern Bontok"}, ["obl"] = {"Oblo"}, ["obm"] = {"Moabite"}, ["obo"] = {"Obo Manobo"}, ["obr"] = {"Old Burmese"}, ["obt"] = {"Old Breton"}, ["obu"] = {"Obulom"}, ["oca"] = {"Ocaina"}, ["och"] = {"Old Chinese"}, ["ocm"] = {"Old Cham"}, ["oco"] = {"Old Cornish"}, ["ocu"] = {"Atzingo Matlatzinca"}, ["oda"] = {"Odut"}, ["odk"] = {"Od"}, ["odt"] = {"Old Dutch"}, ["odu"] = {"Odual"}, ["ofo"] = {"Ofo"}, ["ofs"] = {"Old Frisian"}, ["ofu"] = {"Efutop"}, ["ogb"] = {"Ogbia"}, ["ogc"] = {"Ogbah"}, ["oge"] = {"Old Georgian"}, ["ogg"] = {"Ogbogolo"}, ["ogo"] = {"Khana"}, ["ogu"] = {"Ogbronuagum"}, ["oht"] = {"Old Hittite"}, ["ohu"] = {"Old Hungarian"}, ["oia"] = {"Oirata"}, ["oie"] = {"Okolie"}, ["oin"] = {"Inebu One"}, ["ojb"] = {"Northwestern Ojibwa"}, ["ojc"] = {"Central Ojibwa"}, ["ojg"] = {"Eastern Ojibwa"}, ["ojp"] = {"Old Japanese"}, ["ojs"] = {"Severn Ojibwa"}, ["ojv"] = {"Ontong Java"}, ["ojw"] = {"Western Ojibwa"}, ["oka"] = {"Okanagan"}, ["okb"] = {"Okobo"}, ["okc"] = {"Kobo"}, ["okd"] = {"Okodia"}, ["oke"] = {"Okpe (Southwestern Edo)"}, ["okg"] = {"Koko Babangk"}, ["okh"] = {"Koresh-e Rostam"}, ["oki"] = {"Okiek"}, ["okj"] = {"Oko-Juwoi"}, ["okk"] = {"Kwamtim One"}, ["okl"] = {"Old Kentish Sign Language"}, ["okm"] = {"Middle Korean (10th-16th cent.)"}, ["okn"] = {"Oki-No-Erabu"}, ["oko"] = {"Old Korean (3rd-9th cent.)"}, ["okr"] = {"Kirike"}, ["oks"] = {"Oko-Eni-Osayen"}, ["oku"] = {"Oku"}, ["okv"] = {"Orokaiva"}, ["okx"] = {"Okpe (Northwestern Edo)"}, ["okz"] = {"Old Khmer"}, ["ola"] = {"Walungge"}, ["old"] = {"Mochi"}, ["ole"] = {"Olekha"}, ["olk"] = {"Olkol"}, ["olm"] = {"Oloma"}, ["olo"] = {"Livvi"}, ["olr"] = {"Olrat"}, ["olt"] = {"Old Lithuanian"}, ["olu"] = {"Kuvale"}, ["oma"] = {"Omaha-Ponca"}, ["omb"] = {"East Ambae"}, ["omc"] = {"Mochica"}, ["omg"] = {"Omagua"}, ["omi"] = {"Omi"}, ["omk"] = {"Omok"}, ["oml"] = {"Ombo"}, ["omn"] = {"Minoan"}, ["omo"] = {"Utarmbung"}, ["omp"] = {"Old Manipuri"}, ["omq"] = {"Oto-Manguean languages"}, ["omr"] = {"Old Marathi"}, ["omt"] = {"Omotik"}, ["omu"] = {"Omurano"}, ["omv"] = {"Omotic languages"}, ["omw"] = {"South Tairora"}, ["omx"] = {"Old Mon"}, ["omy"] = {"Old Malay"}, ["ona"] = {"Ona"}, ["onb"] = {"Lingao"}, ["one"] = {"Oneida"}, ["ong"] = {"Olo"}, ["oni"] = {"Onin"}, ["onj"] = {"Onjob"}, ["onk"] = {"Kabore One"}, ["onn"] = {"Onobasulu"}, ["ono"] = {"Onondaga"}, ["onp"] = {"Sartang"}, ["onr"] = {"Northern One"}, ["ons"] = {"Ono"}, ["ont"] = {"Ontenu"}, ["onu"] = {"Unua"}, ["onw"] = {"Old Nubian"}, ["onx"] = {"Onin Based Pidgin"}, ["ood"] = {"Tohono O'odham"}, ["oog"] = {"Ong"}, ["oon"] = {"Önge"}, ["oor"] = {"Oorlams"}, ["oos"] = {"Old Ossetic"}, ["opa"] = {"Okpamheri"}, ["opk"] = {"Kopkaka"}, ["opm"] = {"Oksapmin"}, ["opo"] = {"Opao"}, ["opt"] = {"Opata"}, ["opy"] = {"Ofayé"}, ["ora"] = {"Oroha"}, ["orc"] = {"Orma"}, ["ore"] = {"Orejón"}, ["org"] = {"Oring"}, ["orh"] = {"Oroqen"}, ["orn"] = {"Orang Kanaq"}, ["oro"] = {"Orokolo"}, ["orr"] = {"Oruma"}, ["ors"] = {"Orang Seletar"}, ["ort"] = {"Adivasi Oriya"}, ["oru"] = {"Ormuri"}, ["orv"] = {"Old Russian"}, ["orw"] = {"Oro Win"}, ["orx"] = {"Oro"}, ["ory"] = {"Odia (individual language)", "Oriya (individual language)"}, ["orz"] = {"Ormu"}, ["osa"] = {"Osage"}, ["osc"] = {"Oscan"}, ["osi"] = {"Osing"}, ["osn"] = {"Old Sundanese"}, ["oso"] = {"Ososo"}, ["osp"] = {"Old Spanish"}, ["ost"] = {"Osatu"}, ["osu"] = {"Southern One"}, ["osx"] = {"Old Saxon"}, ["ota"] = {"Ottoman Turkish (1500-1928)"}, ["otb"] = {"Old Tibetan"}, ["otd"] = {"Ot Danum"}, ["ote"] = {"Mezquital Otomi"}, ["oti"] = {"Oti"}, ["otk"] = {"Old Turkish"}, ["otl"] = {"Tilapa Otomi"}, ["otm"] = {"Eastern Highland Otomi"}, ["otn"] = {"Tenango Otomi"}, ["oto"] = {"Otomian languages"}, ["otq"] = {"Querétaro Otomi"}, ["otr"] = {"Otoro"}, ["ots"] = {"Estado de México Otomi"}, ["ott"] = {"Temoaya Otomi"}, ["otu"] = {"Otuke"}, ["otw"] = {"Ottawa"}, ["otx"] = {"Texcatepec Otomi"}, ["oty"] = {"Old Tamil"}, ["otz"] = {"Ixtenco Otomi"}, ["oua"] = {"Tagargrent"}, ["oub"] = {"Glio-Oubi"}, ["oue"] = {"Oune"}, ["oui"] = {"Old Uighur"}, ["oum"] = {"Ouma"}, ["ovd"] = {"Elfdalian", "Övdalian"}, ["owi"] = {"Owiniga"}, ["owl"] = {"Old Welsh"}, ["oyb"] = {"Oy"}, ["oyd"] = {"Oyda"}, ["oym"] = {"Wayampi"}, ["oyy"] = {"Oya'oya"}, ["ozm"] = {"Koonzime"}, ["paa"] = {"Papuan languages"}, ["pab"] = {"Parecís"}, ["pac"] = {"Pacoh"}, ["pad"] = {"Paumarí"}, ["pae"] = {"Pagibete"}, ["paf"] = {"Paranawát"}, ["pag"] = {"Pangasinan"}, ["pah"] = {"Tenharim"}, ["pai"] = {"Pe"}, ["pak"] = {"Parakanã"}, ["pal"] = {"Pahlavi"}, ["pam"] = {"Pampanga", "Kapampangan"}, ["pao"] = {"Northern Paiute"}, ["pap"] = {"Papiamento"}, ["paq"] = {"Parya"}, ["par"] = {"Panamint", "Timbisha"}, ["pas"] = {"Papasena"}, ["pau"] = {"Palauan"}, ["pav"] = {"Pakaásnovos"}, ["paw"] = {"Pawnee"}, ["pax"] = {"Pankararé"}, ["pay"] = {"Pech"}, ["paz"] = {"Pankararú"}, ["pbb"] = {"Páez"}, ["pbc"] = {"Patamona"}, ["pbe"] = {"Mezontla Popoloca"}, ["pbf"] = {"Coyotepec Popoloca"}, ["pbg"] = {"Paraujano"}, ["pbh"] = {"E'ñapa Woromaipu"}, ["pbi"] = {"Parkwa"}, ["pbl"] = {"Mak (Nigeria)"}, ["pbm"] = {"Puebla Mazatec"}, ["pbn"] = {"Kpasam"}, ["pbo"] = {"Papel"}, ["pbp"] = {"Badyara"}, ["pbr"] = {"Pangwa"}, ["pbs"] = {"Central Pame"}, ["pbt"] = {"Southern Pashto"}, ["pbu"] = {"Northern Pashto"}, ["pbv"] = {"Pnar"}, ["pby"] = {"Pyu (Papua New Guinea)"}, ["pca"] = {"Santa Inés Ahuatempan Popoloca"}, ["pcb"] = {"Pear"}, ["pcc"] = {"Bouyei"}, ["pcd"] = {"Picard"}, ["pce"] = {"Ruching Palaung"}, ["pcf"] = {"Paliyan"}, ["pcg"] = {"Paniya"}, ["pch"] = {"Pardhan"}, ["pci"] = {"Duruwa"}, ["pcj"] = {"Parenga"}, ["pck"] = {"Paite Chin"}, ["pcl"] = {"Pardhi"}, ["pcm"] = {"Nigerian Pidgin"}, ["pcn"] = {"Piti"}, ["pcp"] = {"Pacahuara"}, ["pcw"] = {"Pyapun"}, ["pda"] = {"Anam"}, ["pdc"] = {"Pennsylvania German"}, ["pdi"] = {"Pa Di"}, ["pdn"] = {"Podena", "Fedan"}, ["pdo"] = {"Padoe"}, ["pdt"] = {"Plautdietsch"}, ["pdu"] = {"Kayan"}, ["pea"] = {"Peranakan Indonesian"}, ["peb"] = {"Eastern Pomo"}, ["ped"] = {"Mala (Papua New Guinea)"}, ["pee"] = {"Taje"}, ["pef"] = {"Northeastern Pomo"}, ["peg"] = {"Pengo"}, ["peh"] = {"Bonan"}, ["pei"] = {"Chichimeca-Jonaz"}, ["pej"] = {"Northern Pomo"}, ["pek"] = {"Penchal"}, ["pel"] = {"Pekal"}, ["pem"] = {"Phende"}, ["peo"] = {"Old Persian (ca. 600-400 B.C.)"}, ["pep"] = {"Kunja"}, ["peq"] = {"Southern Pomo"}, ["pes"] = {"Iranian Persian"}, ["pev"] = {"Pémono"}, ["pex"] = {"Petats"}, ["pey"] = {"Petjo"}, ["pez"] = {"Eastern Penan"}, ["pfa"] = {"Pááfang"}, ["pfe"] = {"Pere"}, ["pfl"] = {"Pfaelzisch"}, ["pga"] = {"Sudanese Creole Arabic"}, ["pgd"] = {"Gāndhārī"}, ["pgg"] = {"Pangwali"}, ["pgi"] = {"Pagi"}, ["pgk"] = {"Rerep"}, ["pgl"] = {"Primitive Irish"}, ["pgn"] = {"Paelignian"}, ["pgs"] = {"Pangseng"}, ["pgu"] = {"Pagu"}, ["pgz"] = {"Papua New Guinean Sign Language"}, ["pha"] = {"Pa-Hng"}, ["phd"] = {"Phudagi"}, ["phg"] = {"Phuong"}, ["phh"] = {"Phukha"}, ["phi"] = {"Philippine languages"}, ["phj"] = {"Pahari"}, ["phk"] = {"Phake"}, ["phl"] = {"Phalura", "Palula"}, ["phm"] = {"Phimbi"}, ["phn"] = {"Phoenician"}, ["pho"] = {"Phunoi"}, ["phq"] = {"Phana'"}, ["phr"] = {"Pahari-Potwari"}, ["pht"] = {"Phu Thai"}, ["phu"] = {"Phuan"}, ["phv"] = {"Pahlavani"}, ["phw"] = {"Phangduwali"}, ["pia"] = {"Pima Bajo"}, ["pib"] = {"Yine"}, ["pic"] = {"Pinji"}, ["pid"] = {"Piaroa"}, ["pie"] = {"Piro"}, ["pif"] = {"Pingelapese"}, ["pig"] = {"Pisabo"}, ["pih"] = {"Pitcairn-Norfolk"}, ["pij"] = {"Pijao"}, ["pil"] = {"Yom"}, ["pim"] = {"Powhatan"}, ["pin"] = {"Piame"}, ["pio"] = {"Piapoco"}, ["pip"] = {"Pero"}, ["pir"] = {"Piratapuyo"}, ["pis"] = {"Pijin"}, ["pit"] = {"Pitta Pitta"}, ["piu"] = {"Pintupi-Luritja"}, ["piv"] = {"Pileni", "Vaeakau-Taumako"}, ["piw"] = {"Pimbwe"}, ["pix"] = {"Piu"}, ["piy"] = {"Piya-Kwonci"}, ["piz"] = {"Pije"}, ["pjt"] = {"Pitjantjatjara"}, ["pka"] = {"Ardhamāgadhī Prākrit"}, ["pkb"] = {"Pokomo", "Kipfokomo"}, ["pkc"] = {"Paekche"}, ["pkg"] = {"Pak-Tong"}, ["pkh"] = {"Pankhu"}, ["pkn"] = {"Pakanha"}, ["pko"] = {"Pökoot"}, ["pkp"] = {"Pukapuka"}, ["pkr"] = {"Attapady Kurumba"}, ["pks"] = {"Pakistan Sign Language"}, ["pkt"] = {"Maleng"}, ["pku"] = {"Paku"}, ["pla"] = {"Miani"}, ["plb"] = {"Polonombauk"}, ["plc"] = {"Central Palawano"}, ["pld"] = {"Polari"}, ["ple"] = {"Palu'e"}, ["plf"] = {"Central Malayo-Polynesian languages"}, ["plg"] = {"Pilagá"}, ["plh"] = {"Paulohi"}, ["plk"] = {"Kohistani Shina"}, ["pll"] = {"Shwe Palaung"}, ["pln"] = {"Palenquero"}, ["plo"] = {"Oluta Popoluca"}, ["plq"] = {"Palaic"}, ["plr"] = {"Palaka Senoufo"}, ["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"}, ["plt"] = {"Plateau Malagasy"}, ["plu"] = {"Palikúr"}, ["plv"] = {"Southwest Palawano"}, ["plw"] = {"Brooke's Point Palawano"}, ["ply"] = {"Bolyu"}, ["plz"] = {"Paluan"}, ["pma"] = {"Paama"}, ["pmb"] = {"Pambia"}, ["pmd"] = {"Pallanganmiddang"}, ["pme"] = {"Pwaamei"}, ["pmf"] = {"Pamona"}, ["pmh"] = {"Māhārāṣṭri Prākrit"}, ["pmi"] = {"Northern Pumi"}, ["pmj"] = {"Southern Pumi"}, ["pml"] = {"Lingua Franca"}, ["pmm"] = {"Pomo"}, ["pmn"] = {"Pam"}, ["pmo"] = {"Pom"}, ["pmq"] = {"Northern Pame"}, ["pmr"] = {"Paynamar"}, ["pms"] = {"Piemontese"}, ["pmt"] = {"Tuamotuan"}, ["pmw"] = {"Plains Miwok"}, ["pmx"] = {"Poumei Naga"}, ["pmy"] = {"Papuan Malay"}, ["pmz"] = {"Southern Pame"}, ["pna"] = {"Punan Bah-Biau"}, ["pnb"] = {"Western Panjabi"}, ["pnc"] = {"Pannei"}, ["pnd"] = {"Mpinda"}, ["pne"] = {"Western Penan"}, ["png"] = {"Pangu", "Pongu"}, ["pnh"] = {"Penrhyn"}, ["pni"] = {"Aoheng"}, ["pnj"] = {"Pinjarup"}, ["pnk"] = {"Paunaka"}, ["pnl"] = {"Paleni"}, ["pnm"] = {"Punan Batu 1"}, ["pnn"] = {"Pinai-Hagahai"}, ["pno"] = {"Panobo"}, ["pnp"] = {"Pancana"}, ["pnq"] = {"Pana (Burkina Faso)"}, ["pnr"] = {"Panim"}, ["pns"] = {"Ponosakan"}, ["pnt"] = {"Pontic"}, ["pnu"] = {"Jiongnai Bunu"}, ["pnv"] = {"Pinigura"}, ["pnw"] = {"Banyjima", "Panytyima"}, ["pnx"] = {"Phong-Kniang"}, ["pny"] = {"Pinyin"}, ["pnz"] = {"Pana (Central African Republic)"}, ["poc"] = {"Poqomam"}, ["poe"] = {"San Juan Atzingo Popoloca"}, ["pof"] = {"Poke"}, ["pog"] = {"Potiguára"}, ["poh"] = {"Poqomchi'"}, ["poi"] = {"Highland Popoluca"}, ["pok"] = {"Pokangá"}, ["pom"] = {"Southeastern Pomo"}, ["pon"] = {"Pohnpeian"}, ["poo"] = {"Central Pomo"}, ["pop"] = {"Pwapwâ"}, ["poq"] = {"Texistepec Popoluca"}, ["pos"] = {"Sayula Popoluca"}, ["pot"] = {"Potawatomi"}, ["pov"] = {"Upper Guinea Crioulo"}, ["pow"] = {"San Felipe Otlaltepec Popoloca"}, ["pox"] = {"Polabian"}, ["poy"] = {"Pogolo"}, ["poz"] = {"Malayo-Polynesian languages"}, ["ppe"] = {"Papi"}, ["ppi"] = {"Paipai"}, ["ppk"] = {"Uma"}, ["ppl"] = {"Pipil", "Nicarao"}, ["ppm"] = {"Papuma"}, ["ppn"] = {"Papapana"}, ["ppo"] = {"Folopa"}, ["ppp"] = {"Pelende"}, ["ppq"] = {"Pei"}, ["pps"] = {"San Luís Temalacayuca Popoloca"}, ["ppt"] = {"Pare"}, ["ppu"] = {"Papora"}, ["pqa"] = {"Pa'a"}, ["pqe"] = {"Eastern Malayo-Polynesian languages"}, ["pqm"] = {"Malecite-Passamaquoddy"}, ["pqw"] = {"Western Malayo-Polynesian languages"}, ["pra"] = {"Prakrit languages"}, ["prc"] = {"Parachi"}, ["prd"] = {"Parsi-Dari"}, ["pre"] = {"Principense"}, ["prf"] = {"Paranan"}, ["prg"] = {"Prussian"}, ["prh"] = {"Porohanon"}, ["pri"] = {"Paicî"}, ["prk"] = {"Parauk"}, ["prl"] = {"Peruvian Sign Language"}, ["prm"] = {"Kibiri"}, ["prn"] = {"Prasuni"}, ["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"}, ["prq"] = {"Ashéninka Perené"}, ["prr"] = {"Puri"}, ["prs"] = {"Dari", "Afghan Persian"}, ["prt"] = {"Phai"}, ["pru"] = {"Puragi"}, ["prw"] = {"Parawen"}, ["prx"] = {"Purik"}, ["prz"] = {"Providencia Sign Language"}, ["psa"] = {"Asue Awyu"}, ["psc"] = {"Iranian Sign Language", "Persian Sign Language"}, ["psd"] = {"Plains Indian Sign Language"}, ["pse"] = {"Central Malay"}, ["psg"] = {"Penang Sign Language"}, ["psh"] = {"Southwest Pashai", "Southwest Pashayi"}, ["psi"] = {"Southeast Pashai", "Southeast Pashayi"}, ["psl"] = {"Puerto Rican Sign Language"}, ["psm"] = {"Pauserna"}, ["psn"] = {"Panasuan"}, ["pso"] = {"Polish Sign Language"}, ["psp"] = {"Philippine Sign Language"}, ["psq"] = {"Pasi"}, ["psr"] = {"Portuguese Sign Language"}, ["pss"] = {"Kaulong"}, ["pst"] = {"Central Pashto"}, ["psu"] = {"Sauraseni Prākrit"}, ["psw"] = {"Port Sandwich"}, ["psy"] = {"Piscataway"}, ["pta"] = {"Pai Tavytera"}, ["pth"] = {"Pataxó Hã-Ha-Hãe"}, ["pti"] = {"Pindiini", "Wangkatha"}, ["ptn"] = {"Patani"}, ["pto"] = {"Zo'é"}, ["ptp"] = {"Patep"}, ["ptq"] = {"Pattapu"}, ["ptr"] = {"Piamatsina"}, ["ptt"] = {"Enrekang"}, ["ptu"] = {"Bambam"}, ["ptv"] = {"Port Vato"}, ["ptw"] = {"Pentlatch"}, ["pty"] = {"Pathiya"}, ["pua"] = {"Western Highland Purepecha"}, ["pub"] = {"Purum"}, ["puc"] = {"Punan Merap"}, ["pud"] = {"Punan Aput"}, ["pue"] = {"Puelche"}, ["puf"] = {"Punan Merah"}, ["pug"] = {"Phuie"}, ["pui"] = {"Puinave"}, ["puj"] = {"Punan Tubu"}, ["pum"] = {"Puma"}, ["puo"] = {"Puoc"}, ["pup"] = {"Pulabu"}, ["puq"] = {"Puquina"}, ["pur"] = {"Puruborá"}, ["put"] = {"Putoh"}, ["puu"] = {"Punu"}, ["puw"] = {"Puluwatese"}, ["pux"] = {"Puare"}, ["puy"] = {"Purisimeño"}, ["pwa"] = {"Pawaia"}, ["pwb"] = {"Panawa"}, ["pwg"] = {"Gapapaiwa"}, ["pwi"] = {"Patwin"}, ["pwm"] = {"Molbog"}, ["pwn"] = {"Paiwan"}, ["pwo"] = {"Pwo Western Karen"}, ["pwr"] = {"Powari"}, ["pww"] = {"Pwo Northern Karen"}, ["pxm"] = {"Quetzaltepec Mixe"}, ["pye"] = {"Pye Krumen"}, ["pym"] = {"Fyam"}, ["pyn"] = {"Poyanáwa"}, ["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"}, ["pyu"] = {"Puyuma"}, ["pyx"] = {"Pyu (Myanmar)"}, ["pyy"] = {"Pyen"}, ["pze"] = {"Pesse"}, ["pzh"] = {"Pazeh"}, ["pzn"] = {"Jejara Naga", "Para Naga"}, ["qua"] = {"Quapaw"}, ["qub"] = {"Huallaga Huánuco Quechua"}, ["quc"] = {"K'iche'", "Quiché"}, ["qud"] = {"Calderón Highland Quichua"}, ["quf"] = {"Lambayeque Quechua"}, ["qug"] = {"Chimborazo Highland Quichua"}, ["quh"] = {"South Bolivian Quechua"}, ["qui"] = {"Quileute"}, ["quk"] = {"Chachapoyas Quechua"}, ["qul"] = {"North Bolivian Quechua"}, ["qum"] = {"Sipacapense"}, ["qun"] = {"Quinault"}, ["qup"] = {"Southern Pastaza Quechua"}, ["quq"] = {"Quinqui"}, ["qur"] = {"Yanahuanca Pasco Quechua"}, ["qus"] = {"Santiago del Estero Quichua"}, ["quv"] = {"Sacapulteco"}, ["quw"] = {"Tena Lowland Quichua"}, ["qux"] = {"Yauyos Quechua"}, ["quy"] = {"Ayacucho Quechua"}, ["quz"] = {"Cusco Quechua"}, ["qva"] = {"Ambo-Pasco Quechua"}, ["qvc"] = {"Cajamarca Quechua"}, ["qve"] = {"Eastern Apurímac Quechua"}, ["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"}, ["qvi"] = {"Imbabura Highland Quichua"}, ["qvj"] = {"Loja Highland Quichua"}, ["qvl"] = {"Cajatambo North Lima Quechua"}, ["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"}, ["qvn"] = {"North Junín Quechua"}, ["qvo"] = {"Napo Lowland Quechua"}, ["qvp"] = {"Pacaraos Quechua"}, ["qvs"] = {"San Martín Quechua"}, ["qvw"] = {"Huaylla Wanca Quechua"}, ["qvy"] = {"Queyu"}, ["qvz"] = {"Northern Pastaza Quichua"}, ["qwa"] = {"Corongo Ancash Quechua"}, ["qwc"] = {"Classical Quechua"}, ["qwe"] = {"Quechuan (family)"}, ["qwh"] = {"Huaylas Ancash Quechua"}, ["qwm"] = {"Kuman (Russia)"}, ["qws"] = {"Sihuas Ancash Quechua"}, ["qwt"] = {"Kwalhioqua-Tlatskanai"}, ["qxa"] = {"Chiquián Ancash Quechua"}, ["qxc"] = {"Chincha Quechua"}, ["qxh"] = {"Panao Huánuco Quechua"}, ["qxl"] = {"Salasaca Highland Quichua"}, ["qxn"] = {"Northern Conchucos Ancash Quechua"}, ["qxo"] = {"Southern Conchucos Ancash Quechua"}, ["qxp"] = {"Puno Quechua"}, ["qxq"] = {"Qashqa'i"}, ["qxr"] = {"Cañar Highland Quichua"}, ["qxs"] = {"Southern Qiang"}, ["qxt"] = {"Santa Ana de Tusi Pasco Quechua"}, ["qxu"] = {"Arequipa-La Unión Quechua"}, ["qxw"] = {"Jauja Wanca Quechua"}, ["qya"] = {"Quenya"}, ["qyp"] = {"Quiripi"}, ["raa"] = {"Dungmali"}, ["rab"] = {"Camling"}, ["rac"] = {"Rasawa"}, ["rad"] = {"Rade"}, ["raf"] = {"Western Meohang"}, ["rag"] = {"Logooli", "Lulogooli"}, ["rah"] = {"Rabha"}, ["rai"] = {"Ramoaaina"}, ["raj"] = {"Rajasthani"}, ["rak"] = {"Tulu-Bohuai"}, ["ral"] = {"Ralte"}, ["ram"] = {"Canela"}, ["ran"] = {"Riantana"}, ["rao"] = {"Rao"}, ["rap"] = {"Rapanui"}, ["raq"] = {"Saam"}, ["rar"] = {"Rarotongan", "Cook Islands Maori"}, ["ras"] = {"Tegali"}, ["rat"] = {"Razajerdi"}, ["rau"] = {"Raute"}, ["rav"] = {"Sampang"}, ["raw"] = {"Rawang"}, ["rax"] = {"Rang"}, ["ray"] = {"Rapa"}, ["raz"] = {"Rahambuu"}, ["rbb"] = {"Rumai Palaung"}, ["rbk"] = {"Northern Bontok"}, ["rbl"] = {"Miraya Bikol"}, ["rbp"] = {"Barababaraba"}, ["rcf"] = {"Réunion Creole French"}, ["rdb"] = {"Rudbari"}, ["rea"] = {"Rerau"}, ["reb"] = {"Rembong"}, ["ree"] = {"Rejang Kayan"}, ["reg"] = {"Kara (Tanzania)"}, ["rei"] = {"Reli"}, ["rej"] = {"Rejang"}, ["rel"] = {"Rendille"}, ["rem"] = {"Remo"}, ["ren"] = {"Rengao"}, ["rer"] = {"Rer Bare"}, ["res"] = {"Reshe"}, ["ret"] = {"Retta"}, ["rey"] = {"Reyesano"}, ["rga"] = {"Roria"}, ["rge"] = {"Romano-Greek"}, ["rgk"] = {"Rangkas"}, ["rgn"] = {"Romagnol"}, ["rgr"] = {"Resígaro"}, ["rgs"] = {"Southern Roglai"}, ["rgu"] = {"Ringgou"}, ["rhg"] = {"Rohingya"}, ["rhp"] = {"Yahang"}, ["ria"] = {"Riang (India)"}, ["rib"] = {"Bribri Sign Language"}, ["rif"] = {"Tarifit"}, ["ril"] = {"Riang Lang", "Riang (Myanmar)"}, ["rim"] = {"Nyaturu"}, ["rin"] = {"Nungu"}, ["rir"] = {"Ribun"}, ["rit"] = {"Ritharrngu"}, ["riu"] = {"Riung"}, ["rjg"] = {"Rajong"}, ["rji"] = {"Raji"}, ["rjs"] = {"Rajbanshi"}, ["rka"] = {"Kraol"}, ["rkb"] = {"Rikbaktsa"}, ["rkh"] = {"Rakahanga-Manihiki"}, ["rki"] = {"Rakhine"}, ["rkm"] = {"Marka"}, ["rkt"] = {"Rangpuri", "Kamta"}, ["rkw"] = {"Arakwal"}, ["rma"] = {"Rama"}, ["rmb"] = {"Rembarrnga"}, ["rmc"] = {"Carpathian Romani"}, ["rmd"] = {"Traveller Danish"}, ["rme"] = {"Angloromani"}, ["rmf"] = {"Kalo Finnish Romani"}, ["rmg"] = {"Traveller Norwegian"}, ["rmh"] = {"Murkim"}, ["rmi"] = {"Lomavren"}, ["rmk"] = {"Romkun"}, ["rml"] = {"Baltic Romani"}, ["rmm"] = {"Roma"}, ["rmn"] = {"Balkan Romani"}, ["rmo"] = {"Sinte Romani"}, ["rmp"] = {"Rempi"}, ["rmq"] = {"Caló"}, ["rms"] = {"Romanian Sign Language"}, ["rmt"] = {"Domari"}, ["rmu"] = {"Tavringer Romani"}, ["rmv"] = {"Romanova"}, ["rmw"] = {"Welsh Romani"}, ["rmx"] = {"Romam"}, ["rmy"] = {"Vlax Romani"}, ["rmz"] = {"Marma"}, ["rnb"] = {"Brunca Sign Language"}, ["rnd"] = {"Ruund"}, ["rng"] = {"Ronga"}, ["rnl"] = {"Ranglong"}, ["rnn"] = {"Roon"}, ["rnp"] = {"Rongpo"}, ["rnr"] = {"Nari Nari"}, ["rnw"] = {"Rungwa"}, ["roa"] = {"Romance languages"}, ["rob"] = {"Tae'"}, ["roc"] = {"Cacgia Roglai"}, ["rod"] = {"Rogo"}, ["roe"] = {"Ronji"}, ["rof"] = {"Rombo"}, ["rog"] = {"Northern Roglai"}, ["rol"] = {"Romblomanon"}, ["rom"] = {"Romany"}, ["roo"] = {"Rotokas"}, ["rop"] = {"Kriol"}, ["ror"] = {"Rongga"}, ["rou"] = {"Runga"}, ["row"] = {"Dela-Oenale"}, ["rpn"] = {"Repanbitip"}, ["rpt"] = {"Rapting"}, ["rri"] = {"Ririo"}, ["rro"] = {"Waima"}, ["rrt"] = {"Arritinngithigh"}, ["rsb"] = {"Romano-Serbian"}, ["rsk"] = {"Ruthenian", "Rusnak"}, ["rsl"] = {"Russian Sign Language"}, ["rsm"] = {"Miriwoong Sign Language"}, ["rsn"] = {"Rwandan Sign Language"}, ["rsw"] = {"Rishiwa"}, ["rtc"] = {"Rungtu Chin"}, ["rth"] = {"Ratahan"}, ["rtm"] = {"Rotuman"}, ["rts"] = {"Yurats"}, ["rtw"] = {"Rathawi"}, ["rub"] = {"Gungu"}, ["ruc"] = {"Ruuli"}, ["rue"] = {"Rusyn"}, ["ruf"] = {"Luguru"}, ["rug"] = {"Roviana"}, ["ruh"] = {"Ruga"}, ["rui"] = {"Rufiji"}, ["ruk"] = {"Che"}, ["ruo"] = {"Istro Romanian"}, ["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"}, ["ruq"] = {"Megleno Romanian"}, ["rut"] = {"Rutul"}, ["ruu"] = {"Lanas Lobu"}, ["ruy"] = {"Mala (Nigeria)"}, ["ruz"] = {"Ruma"}, ["rwa"] = {"Rawo"}, ["rwk"] = {"Rwa"}, ["rwl"] = {"Ruwila"}, ["rwm"] = {"Amba (Uganda)"}, ["rwo"] = {"Rawa"}, ["rwr"] = {"Marwari (India)"}, ["rxd"] = {"Ngardi"}, ["rxw"] = {"Karuwali", "Garuwali"}, ["ryn"] = {"Northern Amami-Oshima"}, ["rys"] = {"Yaeyama"}, ["ryu"] = {"Central Okinawan"}, ["rzh"] = {"Rāziḥī"}, ["saa"] = {"Saba"}, ["sab"] = {"Buglere"}, ["sac"] = {"Meskwaki"}, ["sad"] = {"Sandawe"}, ["sae"] = {"Sabanê"}, ["saf"] = {"Safaliba"}, ["sah"] = {"Yakut"}, ["sai"] = {"South American Indian languages"}, ["saj"] = {"Sahu"}, ["sak"] = {"Sake"}, ["sal"] = {"Salishan languages"}, ["sam"] = {"Samaritan Aramaic"}, ["sao"] = {"Sause"}, ["saq"] = {"Samburu"}, ["sar"] = {"Saraveca"}, ["sas"] = {"Sasak"}, ["sat"] = {"Santali"}, ["sau"] = {"Saleman"}, ["sav"] = {"Saafi-Saafi"}, ["saw"] = {"Sawi"}, ["sax"] = {"Sa"}, ["say"] = {"Saya"}, ["saz"] = {"Saurashtra"}, ["sba"] = {"Ngambay"}, ["sbb"] = {"Simbo"}, ["sbc"] = {"Kele (Papua New Guinea)"}, ["sbd"] = {"Southern Samo"}, ["sbe"] = {"Saliba"}, ["sbf"] = {"Chabu", "Shabo"}, ["sbg"] = {"Seget"}, ["sbh"] = {"Sori-Harengan"}, ["sbi"] = {"Seti"}, ["sbj"] = {"Surbakhal"}, ["sbk"] = {"Safwa"}, ["sbl"] = {"Botolan Sambal"}, ["sbm"] = {"Sagala"}, ["sbn"] = {"Sindhi Bhil"}, ["sbo"] = {"Sabüm"}, ["sbp"] = {"Sangu (Tanzania)"}, ["sbq"] = {"Sileibi"}, ["sbr"] = {"Sembakung Murut"}, ["sbs"] = {"Subiya"}, ["sbt"] = {"Kimki"}, ["sbu"] = {"Stod Bhoti"}, ["sbv"] = {"Sabine"}, ["sbw"] = {"Simba"}, ["sbx"] = {"Seberuang"}, ["sby"] = {"Soli"}, ["sbz"] = {"Sara Kaba"}, ["scb"] = {"Chut"}, ["sce"] = {"Dongxiang"}, ["scf"] = {"San Miguel Creole French"}, ["scg"] = {"Sanggau"}, ["sch"] = {"Sakachep"}, ["sci"] = {"Sri Lankan Creole Malay"}, ["sck"] = {"Sadri"}, ["scl"] = {"Shina"}, ["scn"] = {"Sicilian"}, ["sco"] = {"Scots"}, ["scp"] = {"Hyolmo", "Helambu Sherpa"}, ["scq"] = {"Sa'och"}, ["scs"] = {"North Slavey"}, ["sct"] = {"Southern Katang"}, ["scu"] = {"Shumcho"}, ["scv"] = {"Sheni"}, ["scw"] = {"Sha"}, ["scx"] = {"Sicel"}, ["sda"] = {"Toraja-Sa'dan"}, ["sdb"] = {"Shabak"}, ["sdc"] = {"Sassarese Sardinian"}, ["sde"] = {"Surubu"}, ["sdf"] = {"Sarli"}, ["sdg"] = {"Savi"}, ["sdh"] = {"Southern Kurdish"}, ["sdj"] = {"Suundi"}, ["sdk"] = {"Sos Kundi"}, ["sdl"] = {"Saudi Arabian Sign Language"}, ["sdn"] = {"Gallurese Sardinian"}, ["sdo"] = {"Bukar-Sadung Bidayuh"}, ["sdp"] = {"Sherdukpen"}, ["sdq"] = {"Semandang"}, ["sdr"] = {"Oraon Sadri"}, ["sds"] = {"Sened"}, ["sdt"] = {"Shuadit"}, ["sdu"] = {"Sarudu"}, ["sdv"] = {"Eastern Sudanic languages"}, ["sdx"] = {"Sibu Melanau"}, ["sdz"] = {"Sallands"}, ["sea"] = {"Semai"}, ["seb"] = {"Shempire Senoufo"}, ["sec"] = {"Sechelt"}, ["sed"] = {"Sedang"}, ["see"] = {"Seneca"}, ["sef"] = {"Cebaara Senoufo"}, ["seg"] = {"Segeju"}, ["seh"] = {"Sena"}, ["sei"] = {"Seri"}, ["sej"] = {"Sene"}, ["sek"] = {"Sekani"}, ["sel"] = {"Selkup"}, ["sem"] = {"Semitic languages"}, ["sen"] = {"Nanerigé Sénoufo"}, ["seo"] = {"Suarmin"}, ["sep"] = {"Sìcìté Sénoufo"}, ["seq"] = {"Senara Sénoufo"}, ["ser"] = {"Serrano"}, ["ses"] = {"Koyraboro Senni Songhai"}, ["set"] = {"Sentani"}, ["seu"] = {"Serui-Laut"}, ["sev"] = {"Nyarafolo Senoufo"}, ["sew"] = {"Sewa Bay"}, ["sey"] = {"Secoya"}, ["sez"] = {"Senthang Chin"}, ["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"}, ["sfe"] = {"Eastern Subanen"}, ["sfm"] = {"Small Flowery Miao"}, ["sfs"] = {"South African Sign Language"}, ["sfw"] = {"Sehwi"}, ["sga"] = {"Old Irish (to 900)"}, ["sgb"] = {"Mag-antsi Ayta"}, ["sgc"] = {"Kipsigis"}, ["sgd"] = {"Surigaonon"}, ["sge"] = {"Segai"}, ["sgg"] = {"Swiss-German Sign Language"}, ["sgh"] = {"Shughni"}, ["sgi"] = {"Suga"}, ["sgj"] = {"Surgujia"}, ["sgk"] = {"Sangkong"}, ["sgm"] = {"Singa"}, ["sgn"] = {"Sign languages"}, ["sgp"] = {"Singpho"}, ["sgr"] = {"Sangisari"}, ["sgs"] = {"Samogitian"}, ["sgt"] = {"Brokpake"}, ["sgu"] = {"Salas"}, ["sgw"] = {"Sebat Bet Gurage"}, ["sgx"] = {"Sierra Leone Sign Language"}, ["sgy"] = {"Sanglechi"}, ["sgz"] = {"Sursurunga"}, ["sha"] = {"Shall-Zwall"}, ["shb"] = {"Ninam"}, ["shc"] = {"Sonde"}, ["shd"] = {"Kundal Shahi"}, ["she"] = {"Sheko"}, ["shg"] = {"Shua"}, ["shh"] = {"Shoshoni"}, ["shi"] = {"Tachelhit"}, ["shj"] = {"Shatt"}, ["shk"] = {"Shilluk"}, ["shl"] = {"Shendu"}, ["shm"] = {"Shahrudi"}, ["shn"] = {"Shan"}, ["sho"] = {"Shanga"}, ["shp"] = {"Shipibo-Conibo"}, ["shq"] = {"Sala"}, ["shr"] = {"Shi"}, ["shs"] = {"Shuswap"}, ["sht"] = {"Shasta"}, ["shu"] = {"Chadian Arabic"}, ["shv"] = {"Shehri"}, ["shw"] = {"Shwai"}, ["shx"] = {"She"}, ["shy"] = {"Tachawit"}, ["shz"] = {"Syenara Senoufo"}, ["sia"] = {"Akkala Sami"}, ["sib"] = {"Sebop"}, ["sid"] = {"Sidamo"}, ["sie"] = {"Simaa"}, ["sif"] = {"Siamou"}, ["sig"] = {"Paasaal"}, ["sih"] = {"Zire", "Sîshëë"}, ["sii"] = {"Shom Peng"}, ["sij"] = {"Numbami"}, ["sik"] = {"Sikiana"}, ["sil"] = {"Tumulung Sisaala"}, ["sim"] = {"Mende (Papua New Guinea)"}, ["sio"] = {"Siouan languages"}, ["sip"] = {"Sikkimese"}, ["siq"] = {"Sonia"}, ["sir"] = {"Siri"}, ["sis"] = {"Siuslaw"}, ["sit"] = {"Sino-Tibetan languages"}, ["siu"] = {"Sinagen"}, ["siv"] = {"Sumariup"}, ["siw"] = {"Siwai"}, ["six"] = {"Sumau"}, ["siy"] = {"Sivandi"}, ["siz"] = {"Siwi"}, ["sja"] = {"Epena"}, ["sjb"] = {"Sajau Basap"}, ["sjd"] = {"Kildin Sami"}, ["sje"] = {"Pite Sami"}, ["sjg"] = {"Assangori"}, ["sjk"] = {"Kemi Sami"}, ["sjl"] = {"Sajalong", "Miji"}, ["sjm"] = {"Mapun"}, ["sjn"] = {"Sindarin"}, ["sjo"] = {"Xibe"}, ["sjp"] = {"Surjapuri"}, ["sjr"] = {"Siar-Lak"}, ["sjs"] = {"Senhaja De Srair"}, ["sjt"] = {"Ter Sami"}, ["sju"] = {"Ume Sami"}, ["sjw"] = {"Shawnee"}, ["ska"] = {"Skagit"}, ["skb"] = {"Saek"}, ["skc"] = {"Ma Manda"}, ["skd"] = {"Southern Sierra Miwok"}, ["ske"] = {"Seke (Vanuatu)"}, ["skf"] = {"Sakirabiá"}, ["skg"] = {"Sakalava Malagasy"}, ["skh"] = {"Sikule"}, ["ski"] = {"Sika"}, ["skj"] = {"Seke (Nepal)"}, ["skm"] = {"Kutong"}, ["skn"] = {"Kolibugan Subanon"}, ["sko"] = {"Seko Tengah"}, ["skp"] = {"Sekapan"}, ["skq"] = {"Sininkere"}, ["skr"] = {"Saraiki", "Seraiki"}, ["sks"] = {"Maia"}, ["skt"] = {"Sakata"}, ["sku"] = {"Sakao"}, ["skv"] = {"Skou"}, ["skw"] = {"Skepi Creole Dutch"}, ["skx"] = {"Seko Padang"}, ["sky"] = {"Sikaiana"}, ["skz"] = {"Sekar"}, ["sla"] = {"Slavic languages"}, ["slc"] = {"Sáliba"}, ["sld"] = {"Sissala"}, ["sle"] = {"Sholaga"}, ["slf"] = {"Swiss-Italian Sign Language"}, ["slg"] = {"Selungai Murut"}, ["slh"] = {"Southern Puget Sound Salish"}, ["sli"] = {"Lower Silesian"}, ["slj"] = {"Salumá"}, ["sll"] = {"Salt-Yui"}, ["slm"] = {"Pangutaran Sama"}, ["sln"] = {"Salinan"}, ["slp"] = {"Lamaholot"}, ["slr"] = {"Salar"}, ["sls"] = {"Singapore Sign Language"}, ["slt"] = {"Sila"}, ["slu"] = {"Selaru"}, ["slw"] = {"Sialum"}, ["slx"] = {"Salampasu"}, ["sly"] = {"Selayar"}, ["slz"] = {"Ma'ya"}, ["sma"] = {"Southern Sami"}, ["smb"] = {"Simbari"}, ["smc"] = {"Som"}, ["smf"] = {"Auwe"}, ["smg"] = {"Simbali"}, ["smh"] = {"Samei"}, ["smi"] = {"Sami languages"}, ["smj"] = {"Lule Sami"}, ["smk"] = {"Bolinao"}, ["sml"] = {"Central Sama"}, ["smm"] = {"Musasa"}, ["smn"] = {"Inari Sami"}, ["smp"] = {"Samaritan"}, ["smq"] = {"Samo"}, ["smr"] = {"Simeulue"}, ["sms"] = {"Skolt Sami"}, ["smt"] = {"Simte"}, ["smu"] = {"Somray"}, ["smv"] = {"Samvedi"}, ["smw"] = {"Sumbawa"}, ["smx"] = {"Samba"}, ["smy"] = {"Semnani"}, ["smz"] = {"Simeku"}, ["snc"] = {"Sinaugoro"}, ["sne"] = {"Bau Bidayuh"}, ["snf"] = {"Noon"}, ["sng"] = {"Sanga (Democratic Republic of Congo)"}, ["sni"] = {"Sensi"}, ["snj"] = {"Riverain Sango"}, ["snk"] = {"Soninke"}, ["snl"] = {"Sangil"}, ["snm"] = {"Southern Ma'di"}, ["snn"] = {"Siona"}, ["sno"] = {"Snohomish"}, ["snp"] = {"Siane"}, ["snq"] = {"Sangu (Gabon)"}, ["snr"] = {"Sihan"}, ["sns"] = {"South West Bay", "Nahavaq"}, ["snu"] = {"Senggi", "Viid"}, ["snv"] = {"Sa'ban"}, ["snw"] = {"Selee"}, ["snx"] = {"Sam"}, ["sny"] = {"Saniyo-Hiyewe"}, ["snz"] = {"Kou"}, ["soa"] = {"Thai Song"}, ["sob"] = {"Sobei"}, ["soc"] = {"So (Democratic Republic of Congo)"}, ["sod"] = {"Songoora"}, ["soe"] = {"Songomeno"}, ["sog"] = {"Sogdian"}, ["soh"] = {"Aka"}, ["soi"] = {"Sonha"}, ["soj"] = {"Soi"}, ["sok"] = {"Sokoro"}, ["sol"] = {"Solos"}, ["son"] = {"Songhai languages"}, ["soo"] = {"Songo"}, ["sop"] = {"Songe"}, ["soq"] = {"Kanasi"}, ["sor"] = {"Somrai"}, ["sos"] = {"Seeku"}, ["sou"] = {"Southern Thai"}, ["sov"] = {"Sonsorol"}, ["sow"] = {"Sowanda"}, ["sox"] = {"Swo"}, ["soy"] = {"Miyobe"}, ["soz"] = {"Temi"}, ["spb"] = {"Sepa (Indonesia)"}, ["spc"] = {"Sapé"}, ["spd"] = {"Saep"}, ["spe"] = {"Sepa (Papua New Guinea)"}, ["spg"] = {"Sian"}, ["spi"] = {"Saponi"}, ["spk"] = {"Sengo"}, ["spl"] = {"Selepet"}, ["spm"] = {"Akukem"}, ["spn"] = {"Sanapaná"}, ["spo"] = {"Spokane"}, ["spp"] = {"Supyire Senoufo"}, ["spq"] = {"Loreto-Ucayali Spanish"}, ["spr"] = {"Saparua"}, ["sps"] = {"Saposa"}, ["spt"] = {"Spiti Bhoti"}, ["spu"] = {"Sapuan"}, ["spv"] = {"Sambalpuri", "Kosli"}, ["spx"] = {"South Picene"}, ["spy"] = {"Sabaot"}, ["sqa"] = {"Shama-Sambuga"}, ["sqh"] = {"Shau"}, ["sqj"] = {"Albanian languages"}, ["sqk"] = {"Albanian Sign Language"}, ["sqm"] = {"Suma"}, ["sqn"] = {"Susquehannock"}, ["sqo"] = {"Sorkhei"}, ["sqq"] = {"Sou"}, ["sqr"] = {"Siculo Arabic"}, ["sqs"] = {"Sri Lankan Sign Language"}, ["sqt"] = {"Soqotri"}, ["squ"] = {"Squamish"}, ["sqx"] = {"Kufr Qassem Sign Language (KQSL)"}, ["sra"] = {"Saruga"}, ["srb"] = {"Sora"}, ["src"] = {"Logudorese Sardinian"}, ["sre"] = {"Sara"}, ["srf"] = {"Nafi"}, ["srg"] = {"Sulod"}, ["srh"] = {"Sarikoli"}, ["sri"] = {"Siriano"}, ["srk"] = {"Serudung Murut"}, ["srl"] = {"Isirawa"}, ["srm"] = {"Saramaccan"}, ["srn"] = {"Sranan Tongo"}, ["sro"] = {"Campidanese Sardinian"}, ["srq"] = {"Sirionó"}, ["srr"] = {"Serer"}, ["srs"] = {"Sarsi"}, ["srt"] = {"Sauri"}, ["sru"] = {"Suruí"}, ["srv"] = {"Southern Sorsoganon"}, ["srw"] = {"Serua"}, ["srx"] = {"Sirmauri"}, ["sry"] = {"Sera"}, ["srz"] = {"Shahmirzadi"}, ["ssa"] = {"Nilo-Saharan languages"}, ["ssb"] = {"Southern Sama"}, ["ssc"] = {"Suba-Simbiti"}, ["ssd"] = {"Siroi"}, ["sse"] = {"Balangingi", "Bangingih Sama"}, ["ssf"] = {"Thao"}, ["ssg"] = {"Seimat"}, ["ssh"] = {"Shihhi Arabic"}, ["ssi"] = {"Sansi"}, ["ssj"] = {"Sausi"}, ["ssk"] = {"Sunam"}, ["ssl"] = {"Western Sisaala"}, ["ssm"] = {"Semnam"}, ["ssn"] = {"Waata"}, ["sso"] = {"Sissano"}, ["ssp"] = {"Spanish Sign Language"}, ["ssq"] = {"So'a"}, ["ssr"] = {"Swiss-French Sign Language"}, ["sss"] = {"Sô"}, ["sst"] = {"Sinasina"}, ["ssu"] = {"Susuami"}, ["ssv"] = {"Shark Bay"}, ["ssx"] = {"Samberigi"}, ["ssy"] = {"Saho"}, ["ssz"] = {"Sengseng"}, ["sta"] = {"Settla"}, ["stb"] = {"Northern Subanen"}, ["std"] = {"Sentinel"}, ["ste"] = {"Liana-Seti"}, ["stf"] = {"Seta"}, ["stg"] = {"Trieng"}, ["sth"] = {"Shelta"}, ["sti"] = {"Bulo Stieng"}, ["stj"] = {"Matya Samo"}, ["stk"] = {"Arammba"}, ["stl"] = {"Stellingwerfs"}, ["stm"] = {"Setaman"}, ["stn"] = {"Owa"}, ["sto"] = {"Stoney"}, ["stp"] = {"Southeastern Tepehuan"}, ["stq"] = {"Saterfriesisch"}, ["str"] = {"Straits Salish"}, ["sts"] = {"Shumashti"}, ["stt"] = {"Budeh Stieng"}, ["stu"] = {"Samtao"}, ["stv"] = {"Silt'e"}, ["stw"] = {"Satawalese"}, ["sty"] = {"Siberian Tatar"}, ["sua"] = {"Sulka"}, ["sub"] = {"Suku"}, ["suc"] = {"Western Subanon"}, ["sue"] = {"Suena"}, ["sug"] = {"Suganga"}, ["sui"] = {"Suki"}, ["suj"] = {"Shubi"}, ["suk"] = {"Sukuma"}, ["suo"] = {"Bouni"}, ["suq"] = {"Tirmaga-Chai Suri", "Suri"}, ["sur"] = {"Mwaghavul"}, ["sus"] = {"Susu"}, ["sut"] = {"Subtiaba"}, ["suv"] = {"Puroik"}, ["suw"] = {"Sumbwa"}, ["sux"] = {"Sumerian"}, ["suy"] = {"Suyá"}, ["suz"] = {"Sunwar"}, ["sva"] = {"Svan"}, ["svb"] = {"Ulau-Suain"}, ["svc"] = {"Vincentian Creole English"}, ["sve"] = {"Serili"}, ["svk"] = {"Slovakian Sign Language"}, ["svm"] = {"Slavomolisano"}, ["svs"] = {"Savosavo"}, ["svx"] = {"Skalvian"}, ["swb"] = {"Maore Comorian"}, ["swc"] = {"Congo Swahili"}, ["swf"] = {"Sere"}, ["swg"] = {"Swabian"}, ["swh"] = {"Swahili (individual language)", "Kiswahili"}, ["swi"] = {"Sui"}, ["swj"] = {"Sira"}, ["swk"] = {"Malawi Sena"}, ["swl"] = {"Swedish Sign Language"}, ["swm"] = {"Samosa"}, ["swn"] = {"Sawknah"}, ["swo"] = {"Shanenawa"}, ["swp"] = {"Suau"}, ["swq"] = {"Sharwa"}, ["swr"] = {"Saweru"}, ["sws"] = {"Seluwasan"}, ["swt"] = {"Sawila"}, ["swu"] = {"Suwawa"}, ["swv"] = {"Shekhawati"}, ["sww"] = {"Sowa"}, ["swx"] = {"Suruahá"}, ["swy"] = {"Sarua"}, ["sxb"] = {"Suba"}, ["sxc"] = {"Sicanian"}, ["sxe"] = {"Sighu"}, ["sxg"] = {"Shuhi", "Shixing"}, ["sxk"] = {"Southern Kalapuya"}, ["sxl"] = {"Selian"}, ["sxm"] = {"Samre"}, ["sxn"] = {"Sangir"}, ["sxo"] = {"Sorothaptic"}, ["sxr"] = {"Saaroa"}, ["sxs"] = {"Sasaru"}, ["sxu"] = {"Upper Saxon"}, ["sxw"] = {"Saxwe Gbe"}, ["sya"] = {"Siang"}, ["syb"] = {"Central Subanen"}, ["syc"] = {"Classical Syriac"}, ["syd"] = {"Samoyedic languages"}, ["syi"] = {"Seki"}, ["syk"] = {"Sukur"}, ["syl"] = {"Sylheti"}, ["sym"] = {"Maya Samo"}, ["syn"] = {"Senaya"}, ["syo"] = {"Suoy"}, ["syr"] = {"Syriac"}, ["sys"] = {"Sinyar"}, ["syw"] = {"Kagate"}, ["syx"] = {"Samay"}, ["syy"] = {"Al-Sayyid Bedouin Sign Language"}, ["sza"] = {"Semelai"}, ["szb"] = {"Ngalum"}, ["szc"] = {"Semaq Beri"}, ["sze"] = {"Seze"}, ["szg"] = {"Sengele"}, ["szl"] = {"Silesian"}, ["szn"] = {"Sula"}, ["szp"] = {"Suabo"}, ["szs"] = {"Solomon Islands Sign Language"}, ["szv"] = {"Isu (Fako Division)"}, ["szw"] = {"Sawai"}, ["szy"] = {"Sakizaya"}, ["taa"] = {"Lower Tanana"}, ["tab"] = {"Tabassaran"}, ["tac"] = {"Lowland Tarahumara"}, ["tad"] = {"Tause"}, ["tae"] = {"Tariana"}, ["taf"] = {"Tapirapé"}, ["tag"] = {"Tagoi"}, ["tai"] = {"Tai languages"}, ["taj"] = {"Eastern Tamang"}, ["tak"] = {"Tala"}, ["tal"] = {"Tal"}, ["tan"] = {"Tangale"}, ["tao"] = {"Yami"}, ["tap"] = {"Taabwa"}, ["taq"] = {"Tamasheq"}, ["tar"] = {"Central Tarahumara"}, ["tas"] = {"Tay Boi"}, ["tau"] = {"Upper Tanana"}, ["tav"] = {"Tatuyo"}, ["taw"] = {"Tai"}, ["tax"] = {"Tamki"}, ["tay"] = {"Atayal"}, ["taz"] = {"Tocho"}, ["tba"] = {"Aikanã"}, ["tbc"] = {"Takia"}, ["tbd"] = {"Kaki Ae"}, ["tbe"] = {"Tanimbili"}, ["tbf"] = {"Mandara"}, ["tbg"] = {"North Tairora"}, ["tbh"] = {"Dharawal", "Thurawal"}, ["tbi"] = {"Gaam"}, ["tbj"] = {"Tiang"}, ["tbk"] = {"Calamian Tagbanwa"}, ["tbl"] = {"Tboli"}, ["tbm"] = {"Tagbu"}, ["tbn"] = {"Barro Negro Tunebo"}, ["tbo"] = {"Tawala"}, ["tbp"] = {"Taworta", "Diebroud"}, ["tbq"] = {"Tibeto-Burman languages"}, ["tbr"] = {"Tumtum"}, ["tbs"] = {"Tanguat"}, ["tbt"] = {"Tembo (Kitembo)"}, ["tbu"] = {"Tubar"}, ["tbv"] = {"Tobo"}, ["tbw"] = {"Tagbanwa"}, ["tbx"] = {"Kapin"}, ["tby"] = {"Tabaru"}, ["tbz"] = {"Ditammari"}, ["tca"] = {"Ticuna"}, ["tcb"] = {"Tanacross"}, ["tcc"] = {"Datooga"}, ["tcd"] = {"Tafi"}, ["tce"] = {"Southern Tutchone"}, ["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"}, ["tcg"] = {"Tamagario"}, ["tch"] = {"Turks And Caicos Creole English"}, ["tci"] = {"Wára"}, ["tck"] = {"Tchitchege"}, ["tcl"] = {"Taman (Myanmar)"}, ["tcm"] = {"Tanahmerah"}, ["tcn"] = {"Tichurong"}, ["tco"] = {"Taungyo"}, ["tcp"] = {"Tawr Chin"}, ["tcq"] = {"Kaiy"}, ["tcs"] = {"Torres Strait Creole", "Yumplatok"}, ["tct"] = {"T'en"}, ["tcu"] = {"Southeastern Tarahumara"}, ["tcw"] = {"Tecpatlán Totonac"}, ["tcx"] = {"Toda"}, ["tcy"] = {"Tulu"}, ["tcz"] = {"Thado Chin"}, ["tda"] = {"Tagdal"}, ["tdb"] = {"Panchpargania"}, ["tdc"] = {"Emberá-Tadó"}, ["tdd"] = {"Tai Nüa"}, ["tde"] = {"Tiranige Diga Dogon"}, ["tdf"] = {"Talieng"}, ["tdg"] = {"Western Tamang"}, ["tdh"] = {"Thulung"}, ["tdi"] = {"Tomadino"}, ["tdj"] = {"Tajio"}, ["tdk"] = {"Tambas"}, ["tdl"] = {"Sur"}, ["tdm"] = {"Taruma"}, ["tdn"] = {"Tondano"}, ["tdo"] = {"Teme"}, ["tdq"] = {"Tita"}, ["tdr"] = {"Todrah"}, ["tds"] = {"Doutai"}, ["tdt"] = {"Tetun Dili"}, ["tdv"] = {"Toro"}, ["tdx"] = {"Tandroy-Mahafaly Malagasy"}, ["tdy"] = {"Tadyawan"}, ["tea"] = {"Temiar"}, ["teb"] = {"Tetete"}, ["tec"] = {"Terik"}, ["ted"] = {"Tepo Krumen"}, ["tee"] = {"Huehuetla Tepehua"}, ["tef"] = {"Teressa"}, ["teg"] = {"Teke-Tege"}, ["teh"] = {"Tehuelche"}, ["tei"] = {"Torricelli"}, ["tek"] = {"Ibali Teke"}, ["tem"] = {"Timne"}, ["ten"] = {"Tama (Colombia)"}, ["teo"] = {"Teso"}, ["tep"] = {"Tepecano"}, ["teq"] = {"Temein"}, ["ter"] = {"Tereno"}, ["tes"] = {"Tengger"}, ["tet"] = {"Tetum"}, ["teu"] = {"Soo"}, ["tev"] = {"Teor"}, ["tew"] = {"Tewa (USA)"}, ["tex"] = {"Tennet"}, ["tey"] = {"Tulishi"}, ["tez"] = {"Tetserret"}, ["tfi"] = {"Tofin Gbe"}, ["tfn"] = {"Tanaina"}, ["tfo"] = {"Tefaro"}, ["tfr"] = {"Teribe"}, ["tft"] = {"Ternate"}, ["tga"] = {"Sagalla"}, ["tgb"] = {"Tobilung"}, ["tgc"] = {"Tigak"}, ["tgd"] = {"Ciwogai"}, ["tge"] = {"Eastern Gorkha Tamang"}, ["tgf"] = {"Chalikha"}, ["tgh"] = {"Tobagonian Creole English"}, ["tgi"] = {"Lawunuia"}, ["tgj"] = {"Tagin"}, ["tgn"] = {"Tandaganon"}, ["tgo"] = {"Sudest"}, ["tgp"] = {"Tangoa"}, ["tgq"] = {"Tring"}, ["tgr"] = {"Tareng"}, ["tgs"] = {"Nume"}, ["tgt"] = {"Central Tagbanwa"}, ["tgu"] = {"Tanggu"}, ["tgv"] = {"Tingui-Boto"}, ["tgw"] = {"Tagwana Senoufo"}, ["tgx"] = {"Tagish"}, ["tgy"] = {"Togoyo"}, ["tgz"] = {"Tagalaka"}, ["thd"] = {"Kuuk Thaayorre", "Thayore"}, ["the"] = {"Chitwania Tharu"}, ["thf"] = {"Thangmi"}, ["thh"] = {"Northern Tarahumara"}, ["thi"] = {"Tai Long"}, ["thk"] = {"Tharaka", "Kitharaka"}, ["thl"] = {"Dangaura Tharu"}, ["thm"] = {"Aheu"}, ["thn"] = {"Thachanadan"}, ["thp"] = {"Thompson"}, ["thq"] = {"Kochila Tharu"}, ["thr"] = {"Rana Tharu"}, ["ths"] = {"Thakali"}, ["tht"] = {"Tahltan"}, ["thu"] = {"Thuri"}, ["thv"] = {"Tahaggart Tamahaq"}, ["thy"] = {"Tha"}, ["thz"] = {"Tayart Tamajeq"}, ["tia"] = {"Tidikelt Tamazight"}, ["tic"] = {"Tira"}, ["tif"] = {"Tifal"}, ["tig"] = {"Tigre"}, ["tih"] = {"Timugon Murut"}, ["tii"] = {"Tiene"}, ["tij"] = {"Tilung"}, ["tik"] = {"Tikar"}, ["til"] = {"Tillamook"}, ["tim"] = {"Timbe"}, ["tin"] = {"Tindi"}, ["tio"] = {"Teop"}, ["tip"] = {"Trimuris"}, ["tiq"] = {"Tiéfo"}, ["tis"] = {"Masadiit Itneg"}, ["tit"] = {"Tinigua"}, ["tiu"] = {"Adasen"}, ["tiv"] = {"Tiv"}, ["tiw"] = {"Tiwi"}, ["tix"] = {"Southern Tiwa"}, ["tiy"] = {"Tiruray"}, ["tiz"] = {"Tai Hongjin"}, ["tja"] = {"Tajuasohn"}, ["tjg"] = {"Tunjung"}, ["tji"] = {"Northern Tujia"}, ["tjj"] = {"Tjungundji"}, ["tjl"] = {"Tai Laing"}, ["tjm"] = {"Timucua"}, ["tjn"] = {"Tonjon"}, ["tjo"] = {"Temacine Tamazight"}, ["tjp"] = {"Tjupany"}, ["tjs"] = {"Southern Tujia"}, ["tju"] = {"Tjurruru"}, ["tjw"] = {"Djabwurrung"}, ["tka"] = {"Truká"}, ["tkb"] = {"Buksa"}, ["tkd"] = {"Tukudede"}, ["tke"] = {"Takwane"}, ["tkf"] = {"Tukumanféd"}, ["tkg"] = {"Tesaka Malagasy"}, ["tkl"] = {"Tokelau"}, ["tkm"] = {"Takelma"}, ["tkn"] = {"Toku-No-Shima"}, ["tkp"] = {"Tikopia"}, ["tkq"] = {"Tee"}, ["tkr"] = {"Tsakhur"}, ["tks"] = {"Takestani"}, ["tkt"] = {"Kathoriya Tharu"}, ["tku"] = {"Upper Necaxa Totonac"}, ["tkv"] = {"Mur Pano"}, ["tkw"] = {"Teanu"}, ["tkx"] = {"Tangko"}, ["tkz"] = {"Takua"}, ["tla"] = {"Southwestern Tepehuan"}, ["tlb"] = {"Tobelo"}, ["tlc"] = {"Yecuatla Totonac"}, ["tld"] = {"Talaud"}, ["tlf"] = {"Telefol"}, ["tlg"] = {"Tofanma"}, ["tlh"] = {"Klingon", "tlhIngan Hol"}, ["tli"] = {"Tlingit"}, ["tlj"] = {"Talinga-Bwisi"}, ["tlk"] = {"Taloki"}, ["tll"] = {"Tetela"}, ["tlm"] = {"Tolomako"}, ["tln"] = {"Talondo'"}, ["tlo"] = {"Talodi"}, ["tlp"] = {"Filomena Mata-Coahuitlán Totonac"}, ["tlq"] = {"Tai Loi"}, ["tlr"] = {"Talise"}, ["tls"] = {"Tambotalo"}, ["tlt"] = {"Sou Nama", "Teluti"}, ["tlu"] = {"Tulehu"}, ["tlv"] = {"Taliabu"}, ["tlx"] = {"Khehek"}, ["tly"] = {"Talysh"}, ["tma"] = {"Tama (Chad)"}, ["tmb"] = {"Katbol", "Avava"}, ["tmc"] = {"Tumak"}, ["tmd"] = {"Haruai"}, ["tme"] = {"Tremembé"}, ["tmf"] = {"Toba-Maskoy"}, ["tmg"] = {"Ternateño"}, ["tmh"] = {"Tamashek"}, ["tmi"] = {"Tutuba"}, ["tmj"] = {"Samarokena"}, ["tml"] = {"Tamnim Citak"}, ["tmm"] = {"Tai Thanh"}, ["tmn"] = {"Taman (Indonesia)"}, ["tmo"] = {"Temoq"}, ["tmq"] = {"Tumleo"}, ["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"}, ["tms"] = {"Tima"}, ["tmt"] = {"Tasmate"}, ["tmu"] = {"Iau"}, ["tmv"] = {"Tembo (Motembo)"}, ["tmw"] = {"Temuan"}, ["tmy"] = {"Tami"}, ["tmz"] = {"Tamanaku"}, ["tna"] = {"Tacana"}, ["tnb"] = {"Western Tunebo"}, ["tnc"] = {"Tanimuca-Retuarã"}, ["tnd"] = {"Angosturas Tunebo"}, ["tng"] = {"Tobanga"}, ["tnh"] = {"Maiani"}, ["tni"] = {"Tandia"}, ["tnk"] = {"Kwamera"}, ["tnl"] = {"Lenakel"}, ["tnm"] = {"Tabla"}, ["tnn"] = {"North Tanna"}, ["tno"] = {"Toromono"}, ["tnp"] = {"Whitesands"}, ["tnq"] = {"Taino"}, ["tnr"] = {"Ménik"}, ["tns"] = {"Tenis"}, ["tnt"] = {"Tontemboan"}, ["tnu"] = {"Tay Khang"}, ["tnv"] = {"Tangchangya"}, ["tnw"] = {"Tonsawang"}, ["tnx"] = {"Tanema"}, ["tny"] = {"Tongwe"}, ["tnz"] = {"Ten'edn"}, ["tob"] = {"Toba"}, ["toc"] = {"Coyutla Totonac"}, ["tod"] = {"Toma"}, ["tof"] = {"Gizrra"}, ["tog"] = {"Tonga (Nyasa)"}, ["toh"] = {"Gitonga"}, ["toi"] = {"Tonga (Zambia)"}, ["toj"] = {"Tojolabal"}, ["tok"] = {"Toki Pona"}, ["tol"] = {"Tolowa"}, ["tom"] = {"Tombulu"}, ["too"] = {"Xicotepec De Juárez Totonac"}, ["top"] = {"Papantla Totonac"}, ["toq"] = {"Toposa"}, ["tor"] = {"Togbo-Vara Banda"}, ["tos"] = {"Highland Totonac"}, ["tou"] = {"Tho"}, ["tov"] = {"Upper Taromi"}, ["tow"] = {"Jemez"}, ["tox"] = {"Tobian"}, ["toy"] = {"Topoiyo"}, ["toz"] = {"To"}, ["tpa"] = {"Taupota"}, ["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"}, ["tpe"] = {"Tippera"}, ["tpf"] = {"Tarpia"}, ["tpg"] = {"Kula"}, ["tpi"] = {"Tok Pisin"}, ["tpj"] = {"Tapieté"}, ["tpk"] = {"Tupinikin"}, ["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"}, ["tpm"] = {"Tampulma"}, ["tpn"] = {"Tupinambá"}, ["tpo"] = {"Tai Pao"}, ["tpp"] = {"Pisaflores Tepehua"}, ["tpq"] = {"Tukpa"}, ["tpr"] = {"Tuparí"}, ["tpt"] = {"Tlachichilco Tepehua"}, ["tpu"] = {"Tampuan"}, ["tpv"] = {"Tanapag"}, ["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"}, ["tpy"] = {"Trumai"}, ["tpz"] = {"Tinputz"}, ["tqb"] = {"Tembé"}, ["tql"] = {"Lehali"}, ["tqm"] = {"Turumsa"}, ["tqn"] = {"Tenino"}, ["tqo"] = {"Toaripi"}, ["tqp"] = {"Tomoip"}, ["tqq"] = {"Tunni"}, ["tqr"] = {"Torona"}, ["tqt"] = {"Western Totonac"}, ["tqu"] = {"Touo"}, ["tqw"] = {"Tonkawa"}, ["tra"] = {"Tirahi"}, ["trb"] = {"Terebu"}, ["trc"] = {"Copala Triqui"}, ["trd"] = {"Turi"}, ["tre"] = {"East Tarangan"}, ["trf"] = {"Trinidadian Creole English"}, ["trg"] = {"Lishán Didán"}, ["trh"] = {"Turaka"}, ["tri"] = {"Trió"}, ["trj"] = {"Toram"}, ["trk"] = {"Turkic languages"}, ["trl"] = {"Traveller Scottish"}, ["trm"] = {"Tregami"}, ["trn"] = {"Trinitario"}, ["tro"] = {"Tarao Naga"}, ["trp"] = {"Kok Borok"}, ["trq"] = {"San Martín Itunyoso Triqui"}, ["trr"] = {"Taushiro"}, ["trs"] = {"Chicahuaxtla Triqui"}, ["trt"] = {"Tunggare"}, ["tru"] = {"Turoyo", "Surayt"}, ["trv"] = {"Sediq", "Seediq", "Taroko"}, ["trw"] = {"Torwali"}, ["trx"] = {"Tringgus-Sembaan Bidayuh"}, ["try"] = {"Turung"}, ["trz"] = {"Torá"}, ["tsa"] = {"Tsaangi"}, ["tsb"] = {"Tsamai"}, ["tsc"] = {"Tswa"}, ["tsd"] = {"Tsakonian"}, ["tse"] = {"Tunisian Sign Language"}, ["tsg"] = {"Tausug"}, ["tsh"] = {"Tsuvan"}, ["tsi"] = {"Tsimshian"}, ["tsj"] = {"Tshangla"}, ["tsk"] = {"Tseku"}, ["tsl"] = {"Ts'ün-Lao"}, ["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"}, ["tsp"] = {"Northern Toussian"}, ["tsq"] = {"Thai Sign Language"}, ["tsr"] = {"Akei"}, ["tss"] = {"Taiwan Sign Language"}, ["tst"] = {"Tondi Songway Kiini"}, ["tsu"] = {"Tsou"}, ["tsv"] = {"Tsogo"}, ["tsw"] = {"Tsishingini"}, ["tsx"] = {"Mubami"}, ["tsy"] = {"Tebul Sign Language"}, ["tsz"] = {"Purepecha"}, ["tta"] = {"Tutelo"}, ["ttb"] = {"Gaa"}, ["ttc"] = {"Tektiteko"}, ["ttd"] = {"Tauade"}, ["tte"] = {"Bwanabwana"}, ["ttf"] = {"Tuotomb"}, ["ttg"] = {"Tutong"}, ["tth"] = {"Upper Ta'oih"}, ["tti"] = {"Tobati"}, ["ttj"] = {"Tooro"}, ["ttk"] = {"Totoro"}, ["ttl"] = {"Totela"}, ["ttm"] = {"Northern Tutchone"}, ["ttn"] = {"Towei"}, ["tto"] = {"Lower Ta'oih"}, ["ttp"] = {"Tombelala"}, ["ttq"] = {"Tawallammat Tamajaq"}, ["ttr"] = {"Tera"}, ["tts"] = {"Northeastern Thai"}, ["ttt"] = {"Muslim Tat"}, ["ttu"] = {"Torau"}, ["ttv"] = {"Titan"}, ["ttw"] = {"Long Wat"}, ["tty"] = {"Sikaritai"}, ["ttz"] = {"Tsum"}, ["tua"] = {"Wiarumus"}, ["tub"] = {"Tübatulabal"}, ["tuc"] = {"Mutu"}, ["tud"] = {"Tuxá"}, ["tue"] = {"Tuyuca"}, ["tuf"] = {"Central Tunebo"}, ["tug"] = {"Tunia"}, ["tuh"] = {"Taulil"}, ["tui"] = {"Tupuri"}, ["tuj"] = {"Tugutil"}, ["tul"] = {"Tula"}, ["tum"] = {"Tumbuka"}, ["tun"] = {"Tunica"}, ["tuo"] = {"Tucano"}, ["tup"] = {"Tupi languages"}, ["tuq"] = {"Tedaga"}, ["tus"] = {"Tuscarora"}, ["tut"] = {"Altaic languages"}, ["tuu"] = {"Tututni"}, ["tuv"] = {"Turkana"}, ["tuw"] = {"Tungus languages"}, ["tux"] = {"Tuxináwa"}, ["tuy"] = {"Tugen"}, ["tuz"] = {"Turka"}, ["tva"] = {"Vaghua"}, ["tvd"] = {"Tsuvadi"}, ["tve"] = {"Te'un"}, ["tvi"] = {"Tulai"}, ["tvk"] = {"Southeast Ambrym"}, ["tvl"] = {"Tuvalu"}, ["tvm"] = {"Tela-Masbuar"}, ["tvn"] = {"Tavoyan"}, ["tvo"] = {"Tidore"}, ["tvs"] = {"Taveta"}, ["tvt"] = {"Tutsa Naga"}, ["tvu"] = {"Tunen"}, ["tvw"] = {"Sedoa"}, ["tvx"] = {"Taivoan"}, ["tvy"] = {"Timor Pidgin"}, ["twa"] = {"Twana"}, ["twb"] = {"Western Tawbuid"}, ["twc"] = {"Teshenawa"}, ["twd"] = {"Twents"}, ["twe"] = {"Tewa (Indonesia)"}, ["twf"] = {"Northern Tiwa"}, ["twg"] = {"Tereweng"}, ["twh"] = {"Tai Dón"}, ["twl"] = {"Tawara"}, ["twm"] = {"Tawang Monpa"}, ["twn"] = {"Twendi"}, ["two"] = {"Tswapong"}, ["twp"] = {"Ere"}, ["twq"] = {"Tasawaq"}, ["twr"] = {"Southwestern Tarahumara"}, ["twt"] = {"Turiwára"}, ["twu"] = {"Termanu"}, ["tww"] = {"Tuwari"}, ["twx"] = {"Tewe"}, ["twy"] = {"Tawoyan"}, ["txa"] = {"Tombonuo"}, ["txb"] = {"Tokharian B"}, ["txc"] = {"Tsetsaut"}, ["txe"] = {"Totoli"}, ["txg"] = {"Tangut"}, ["txh"] = {"Thracian"}, ["txi"] = {"Ikpeng"}, ["txj"] = {"Tarjumo"}, ["txm"] = {"Tomini"}, ["txn"] = {"West Tarangan"}, ["txo"] = {"Toto"}, ["txq"] = {"Tii"}, ["txr"] = {"Tartessian"}, ["txs"] = {"Tonsea"}, ["txt"] = {"Citak"}, ["txu"] = {"Kayapó"}, ["txx"] = {"Tatana"}, ["txy"] = {"Tanosy Malagasy"}, ["tya"] = {"Tauya"}, ["tye"] = {"Kyanga"}, ["tyh"] = {"O'du"}, ["tyi"] = {"Teke-Tsaayi"}, ["tyj"] = {"Tai Do", "Tai Yo"}, ["tyl"] = {"Thu Lao"}, ["tyn"] = {"Kombai"}, ["typ"] = {"Thaypan"}, ["tyr"] = {"Tai Daeng"}, ["tys"] = {"Tày Sa Pa"}, ["tyt"] = {"Tày Tac"}, ["tyu"] = {"Kua"}, ["tyv"] = {"Tuvinian"}, ["tyx"] = {"Teke-Tyee"}, ["tyy"] = {"Tiyaa"}, ["tyz"] = {"Tày"}, ["tza"] = {"Tanzanian Sign Language"}, ["tzh"] = {"Tzeltal"}, ["tzj"] = {"Tz'utujil"}, ["tzl"] = {"Talossan"}, ["tzm"] = {"Central Atlas Tamazight"}, ["tzn"] = {"Tugun"}, ["tzo"] = {"Tzotzil"}, ["tzx"] = {"Tabriak"}, ["uam"] = {"Uamué"}, ["uan"] = {"Kuan"}, ["uar"] = {"Tairuma"}, ["uba"] = {"Ubang"}, ["ubi"] = {"Ubi"}, ["ubl"] = {"Buhi'non Bikol"}, ["ubr"] = {"Ubir"}, ["ubu"] = {"Umbu-Ungu"}, ["uby"] = {"Ubykh"}, ["uda"] = {"Uda"}, ["ude"] = {"Udihe"}, ["udg"] = {"Muduga"}, ["udi"] = {"Udi"}, ["udj"] = {"Ujir"}, ["udl"] = {"Wuzlam"}, ["udm"] = {"Udmurt"}, ["udu"] = {"Uduk"}, ["ues"] = {"Kioko"}, ["ufi"] = {"Ufim"}, ["uga"] = {"Ugaritic"}, ["ugb"] = {"Kuku-Ugbanh"}, ["uge"] = {"Ughele"}, ["ugh"] = {"Kubachi"}, ["ugn"] = {"Ugandan Sign Language"}, ["ugo"] = {"Ugong"}, ["ugy"] = {"Uruguayan Sign Language"}, ["uha"] = {"Uhami"}, ["uhn"] = {"Damal"}, ["uis"] = {"Uisai"}, ["uiv"] = {"Iyive"}, ["uji"] = {"Tanjijili"}, ["uka"] = {"Kaburi"}, ["ukg"] = {"Ukuriguma"}, ["ukh"] = {"Ukhwejo"}, ["uki"] = {"Kui (India)"}, ["ukk"] = {"Muak Sa-aak"}, ["ukl"] = {"Ukrainian Sign Language"}, ["ukp"] = {"Ukpe-Bayobiri"}, ["ukq"] = {"Ukwa"}, ["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"}, ["uku"] = {"Ukue"}, ["ukv"] = {"Kuku"}, ["ukw"] = {"Ukwuani-Aboh-Ndoni"}, ["uky"] = {"Kuuk-Yak"}, ["ula"] = {"Fungwa"}, ["ulb"] = {"Ulukwumi"}, ["ulc"] = {"Ulch"}, ["ule"] = {"Lule"}, ["ulf"] = {"Usku", "Afra"}, ["uli"] = {"Ulithian"}, ["ulk"] = {"Meriam Mir"}, ["ull"] = {"Ullatan"}, ["ulm"] = {"Ulumanda'"}, ["uln"] = {"Unserdeutsch"}, ["ulu"] = {"Uma' Lung"}, ["ulw"] = {"Ulwa"}, ["uly"] = {"Buli"}, ["uma"] = {"Umatilla"}, ["umb"] = {"Umbundu"}, ["umc"] = {"Marrucinian"}, ["umd"] = {"Umbindhamu"}, ["umg"] = {"Morrobalama", "Umbuygamu"}, ["umi"] = {"Ukit"}, ["umm"] = {"Umon"}, ["umn"] = {"Makyan Naga"}, ["umo"] = {"Umotína"}, ["ump"] = {"Umpila"}, ["umr"] = {"Umbugarla"}, ["ums"] = {"Pendau"}, ["umu"] = {"Munsee"}, ["una"] = {"North Watut"}, ["und"] = {"Undetermined"}, ["une"] = {"Uneme"}, ["ung"] = {"Ngarinyin"}, ["uni"] = {"Uni"}, ["unk"] = {"Enawené-Nawé"}, ["unm"] = {"Unami"}, ["unn"] = {"Kurnai"}, ["unr"] = {"Mundari"}, ["unu"] = {"Unubahe"}, ["unx"] = {"Munda"}, ["unz"] = {"Unde Kaili"}, ["uon"] = {"Kulon"}, ["upi"] = {"Umeda"}, ["upv"] = {"Uripiv-Wala-Rano-Atchin"}, ["ura"] = {"Urarina"}, ["urb"] = {"Urubú-Kaapor", "Kaapor"}, ["urc"] = {"Urningangg"}, ["ure"] = {"Uru"}, ["urf"] = {"Uradhi"}, ["urg"] = {"Urigina"}, ["urh"] = {"Urhobo"}, ["uri"] = {"Urim"}, ["urj"] = {"Uralic languages"}, ["urk"] = {"Urak Lawoi'"}, ["url"] = {"Urali"}, ["urm"] = {"Urapmin"}, ["urn"] = {"Uruangnirin"}, ["uro"] = {"Ura (Papua New Guinea)"}, ["urp"] = {"Uru-Pa-In"}, ["urr"] = {"Lehalurup", "Löyöp"}, ["urt"] = {"Urat"}, ["uru"] = {"Urumi"}, ["urv"] = {"Uruava"}, ["urw"] = {"Sop"}, ["urx"] = {"Urimo"}, ["ury"] = {"Orya"}, ["urz"] = {"Uru-Eu-Wau-Wau"}, ["usa"] = {"Usarufa"}, ["ush"] = {"Ushojo"}, ["usi"] = {"Usui"}, ["usk"] = {"Usaghade"}, ["usp"] = {"Uspanteco"}, ["uss"] = {"us-Saare"}, ["usu"] = {"Uya"}, ["uta"] = {"Otank"}, ["ute"] = {"Ute-Southern Paiute"}, ["uth"] = {"ut-Hun"}, ["utp"] = {"Amba (Solomon Islands)"}, ["utr"] = {"Etulo"}, ["utu"] = {"Utu"}, ["uum"] = {"Urum"}, ["uur"] = {"Ura (Vanuatu)"}, ["uuu"] = {"U"}, ["uve"] = {"West Uvean", "Fagauvea"}, ["uvh"] = {"Uri"}, ["uvl"] = {"Lote"}, ["uwa"] = {"Kuku-Uwanh"}, ["uya"] = {"Doko-Uyanga"}, ["uzn"] = {"Northern Uzbek"}, ["uzs"] = {"Southern Uzbek"}, ["vaa"] = {"Vaagri Booli"}, ["vae"] = {"Vale"}, ["vaf"] = {"Vafsi"}, ["vag"] = {"Vagla"}, ["vah"] = {"Varhadi-Nagpuri"}, ["vai"] = {"Vai"}, ["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"}, ["val"] = {"Vehes"}, ["vam"] = {"Vanimo"}, ["van"] = {"Valman"}, ["vao"] = {"Vao"}, ["vap"] = {"Vaiphei"}, ["var"] = {"Huarijio"}, ["vas"] = {"Vasavi"}, ["vau"] = {"Vanuma"}, ["vav"] = {"Varli"}, ["vay"] = {"Wayu"}, ["vbb"] = {"Southeast Babar"}, ["vbk"] = {"Southwestern Bontok"}, ["vec"] = {"Venetian"}, ["ved"] = {"Veddah"}, ["vel"] = {"Veluws"}, ["vem"] = {"Vemgo-Mabas"}, ["veo"] = {"Ventureño"}, ["vep"] = {"Veps"}, ["ver"] = {"Mom Jango"}, ["vgr"] = {"Vaghri"}, ["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"}, ["vic"] = {"Virgin Islands Creole English"}, ["vid"] = {"Vidunda"}, ["vif"] = {"Vili"}, ["vig"] = {"Viemo"}, ["vil"] = {"Vilela"}, ["vin"] = {"Vinza"}, ["vis"] = {"Vishavan"}, ["vit"] = {"Viti"}, ["viv"] = {"Iduna"}, ["vjk"] = {"Bajjika"}, ["vka"] = {"Kariyarra"}, ["vkj"] = {"Kujarge"}, ["vkk"] = {"Kaur"}, ["vkl"] = {"Kulisusu"}, ["vkm"] = {"Kamakan"}, ["vkn"] = {"Koro Nulu"}, ["vko"] = {"Kodeoha"}, ["vkp"] = {"Korlai Creole Portuguese"}, ["vkt"] = {"Tenggarong Kutai Malay"}, ["vku"] = {"Kurrama"}, ["vkz"] = {"Koro Zuba"}, ["vlp"] = {"Valpei"}, ["vls"] = {"Vlaams"}, ["vma"] = {"Martuyhunira"}, ["vmb"] = {"Barbaram"}, ["vmc"] = {"Juxtlahuaca Mixtec"}, ["vmd"] = {"Mudu Koraga"}, ["vme"] = {"East Masela"}, ["vmf"] = {"Mainfränkisch"}, ["vmg"] = {"Lungalunga"}, ["vmh"] = {"Maraghei"}, ["vmi"] = {"Miwa"}, ["vmj"] = {"Ixtayutla Mixtec"}, ["vmk"] = {"Makhuwa-Shirima"}, ["vml"] = {"Malgana"}, ["vmm"] = {"Mitlatongo Mixtec"}, ["vmp"] = {"Soyaltepec Mazatec"}, ["vmq"] = {"Soyaltepec Mixtec"}, ["vmr"] = {"Marenje"}, ["vms"] = {"Moksela"}, ["vmu"] = {"Muluridyi"}, ["vmv"] = {"Valley Maidu"}, ["vmw"] = {"Makhuwa"}, ["vmx"] = {"Tamazola Mixtec"}, ["vmy"] = {"Ayautla Mazatec"}, ["vmz"] = {"Mazatlán Mazatec"}, ["vnk"] = {"Vano", "Lovono"}, ["vnm"] = {"Vinmavis", "Neve'ei"}, ["vnp"] = {"Vunapu"}, ["vor"] = {"Voro"}, ["vot"] = {"Votic"}, ["vra"] = {"Vera'a"}, ["vro"] = {"Võro"}, ["vrs"] = {"Varisi"}, ["vrt"] = {"Burmbar", "Banam Bay"}, ["vsi"] = {"Moldova Sign Language"}, ["vsl"] = {"Venezuelan Sign Language"}, ["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"}, ["vto"] = {"Vitou"}, ["vum"] = {"Vumbu"}, ["vun"] = {"Vunjo"}, ["vut"] = {"Vute"}, ["vwa"] = {"Awa (China)"}, ["waa"] = {"Walla Walla"}, ["wab"] = {"Wab"}, ["wac"] = {"Wasco-Wishram"}, ["wad"] = {"Wamesa", "Wondama"}, ["wae"] = {"Walser"}, ["waf"] = {"Wakoná"}, ["wag"] = {"Wa'ema"}, ["wah"] = {"Watubela"}, ["wai"] = {"Wares"}, ["waj"] = {"Waffa"}, ["wak"] = {"Wakashan languages"}, ["wal"] = {"Wolaytta", "Wolaitta"}, ["wam"] = {"Wampanoag"}, ["wan"] = {"Wan"}, ["wao"] = {"Wappo"}, ["wap"] = {"Wapishana"}, ["waq"] = {"Wagiman"}, ["war"] = {"Waray (Philippines)"}, ["was"] = {"Washo"}, ["wat"] = {"Kaninuwa"}, ["wau"] = {"Waurá"}, ["wav"] = {"Waka"}, ["waw"] = {"Waiwai"}, ["wax"] = {"Watam", "Marangis"}, ["way"] = {"Wayana"}, ["waz"] = {"Wampur"}, ["wba"] = {"Warao"}, ["wbb"] = {"Wabo"}, ["wbe"] = {"Waritai"}, ["wbf"] = {"Wara"}, ["wbh"] = {"Wanda"}, ["wbi"] = {"Vwanji"}, ["wbj"] = {"Alagwa"}, ["wbk"] = {"Waigali"}, ["wbl"] = {"Wakhi"}, ["wbm"] = {"Wa"}, ["wbp"] = {"Warlpiri"}, ["wbq"] = {"Waddar"}, ["wbr"] = {"Wagdi"}, ["wbs"] = {"West Bengal Sign Language"}, ["wbt"] = {"Warnman"}, ["wbv"] = {"Wajarri"}, ["wbw"] = {"Woi"}, ["wca"] = {"Yanomámi"}, ["wci"] = {"Waci Gbe"}, ["wdd"] = {"Wandji"}, ["wdg"] = {"Wadaginam"}, ["wdj"] = {"Wadjiginy"}, ["wdk"] = {"Wadikali"}, ["wdt"] = {"Wendat"}, ["wdu"] = {"Wadjigu"}, ["wdy"] = {"Wadjabangayi"}, ["wea"] = {"Wewaw"}, ["wec"] = {"Wè Western"}, ["wed"] = {"Wedau"}, ["weg"] = {"Wergaia"}, ["weh"] = {"Weh"}, ["wei"] = {"Kiunum"}, ["wem"] = {"Weme Gbe"}, ["wen"] = {"Sorbian languages"}, ["weo"] = {"Wemale"}, ["wep"] = {"Westphalien"}, ["wer"] = {"Weri"}, ["wes"] = {"Cameroon Pidgin"}, ["wet"] = {"Perai"}, ["weu"] = {"Rawngtu Chin"}, ["wew"] = {"Wejewa"}, ["wfg"] = {"Yafi", "Zorop"}, ["wga"] = {"Wagaya"}, ["wgb"] = {"Wagawaga"}, ["wgg"] = {"Wangkangurru", "Wangganguru"}, ["wgi"] = {"Wahgi"}, ["wgo"] = {"Waigeo"}, ["wgu"] = {"Wirangu"}, ["wgy"] = {"Warrgamay"}, ["wha"] = {"Sou Upaa", "Manusela"}, ["whg"] = {"North Wahgi"}, ["whk"] = {"Wahau Kenyah"}, ["whu"] = {"Wahau Kayan"}, ["wib"] = {"Southern Toussian"}, ["wic"] = {"Wichita"}, ["wie"] = {"Wik-Epa"}, ["wif"] = {"Wik-Keyangan"}, ["wig"] = {"Wik Ngathan"}, ["wih"] = {"Wik-Me'anha"}, ["wii"] = {"Minidien"}, ["wij"] = {"Wik-Iiyanh"}, ["wik"] = {"Wikalkan"}, ["wil"] = {"Wilawila"}, ["wim"] = {"Wik-Mungkan"}, ["win"] = {"Ho-Chunk"}, ["wir"] = {"Wiraféd"}, ["wiu"] = {"Wiru"}, ["wiv"] = {"Vitu"}, ["wiy"] = {"Wiyot"}, ["wja"] = {"Waja"}, ["wji"] = {"Warji"}, ["wka"] = {"Kw'adza"}, ["wkb"] = {"Kumbaran"}, ["wkd"] = {"Wakde", "Mo"}, ["wkl"] = {"Kalanadi"}, ["wkr"] = {"Keerray-Woorroong"}, ["wku"] = {"Kunduvadi"}, ["wkw"] = {"Wakawaka"}, ["wky"] = {"Wangkayutyuru"}, ["wla"] = {"Walio"}, ["wlc"] = {"Mwali Comorian"}, ["wle"] = {"Wolane"}, ["wlg"] = {"Kunbarlang"}, ["wlh"] = {"Welaun"}, ["wli"] = {"Waioli"}, ["wlk"] = {"Wailaki"}, ["wll"] = {"Wali (Sudan)"}, ["wlm"] = {"Middle Welsh"}, ["wlo"] = {"Wolio"}, ["wlr"] = {"Wailapa"}, ["wls"] = {"Wallisian"}, ["wlu"] = {"Wuliwuli"}, ["wlv"] = {"Wichí Lhamtés Vejoz"}, ["wlw"] = {"Walak"}, ["wlx"] = {"Wali (Ghana)"}, ["wly"] = {"Waling"}, ["wma"] = {"Mawa (Nigeria)"}, ["wmb"] = {"Wambaya"}, ["wmc"] = {"Wamas"}, ["wmd"] = {"Mamaindé"}, ["wme"] = {"Wambule"}, ["wmg"] = {"Western Minyag"}, ["wmh"] = {"Waima'a"}, ["wmi"] = {"Wamin"}, ["wmm"] = {"Maiwa (Indonesia)"}, ["wmn"] = {"Waamwang"}, ["wmo"] = {"Wom (Papua New Guinea)"}, ["wms"] = {"Wambon"}, ["wmt"] = {"Walmajarri"}, ["wmw"] = {"Mwani"}, ["wmx"] = {"Womo"}, ["wnb"] = {"Mokati"}, ["wnc"] = {"Wantoat"}, ["wnd"] = {"Wandarang"}, ["wne"] = {"Waneci"}, ["wng"] = {"Wanggom"}, ["wni"] = {"Ndzwani Comorian"}, ["wnk"] = {"Wanukaka"}, ["wnm"] = {"Wanggamala"}, ["wnn"] = {"Wunumara"}, ["wno"] = {"Wano"}, ["wnp"] = {"Wanap"}, ["wnu"] = {"Usan"}, ["wnw"] = {"Wintu"}, ["wny"] = {"Wanyi", "Waanyi"}, ["woa"] = {"Kuwema", "Tyaraity"}, ["wob"] = {"Wè Northern"}, ["woc"] = {"Wogeo"}, ["wod"] = {"Wolani"}, ["woe"] = {"Woleaian"}, ["wof"] = {"Gambian Wolof"}, ["wog"] = {"Wogamusin"}, ["woi"] = {"Kamang"}, ["wok"] = {"Longto"}, ["wom"] = {"Wom (Nigeria)"}, ["won"] = {"Wongo"}, ["woo"] = {"Manombai"}, ["wor"] = {"Woria"}, ["wos"] = {"Hanga Hundi"}, ["wow"] = {"Wawonii"}, ["woy"] = {"Weyto"}, ["wpc"] = {"Maco"}, ["wrb"] = {"Waluwarra", "Warluwara"}, ["wrg"] = {"Warungu", "Gudjal"}, ["wrh"] = {"Wiradjuri"}, ["wri"] = {"Wariyangga"}, ["wrk"] = {"Garrwa"}, ["wrl"] = {"Warlmanpa"}, ["wrm"] = {"Warumungu"}, ["wrn"] = {"Warnang"}, ["wro"] = {"Worrorra"}, ["wrp"] = {"Waropen"}, ["wrr"] = {"Wardaman"}, ["wrs"] = {"Waris"}, ["wru"] = {"Waru"}, ["wrv"] = {"Waruna"}, ["wrw"] = {"Gugu Warra"}, ["wrx"] = {"Wae Rana"}, ["wry"] = {"Merwari"}, ["wrz"] = {"Waray (Australia)"}, ["wsa"] = {"Warembori"}, ["wsg"] = {"Adilabad Gondi"}, ["wsi"] = {"Wusi"}, ["wsk"] = {"Waskia"}, ["wsr"] = {"Owenia"}, ["wss"] = {"Wasa"}, ["wsu"] = {"Wasu"}, ["wsv"] = {"Wotapuri-Katarqalai"}, ["wtb"] = {"Matambwe"}, ["wtf"] = {"Watiwa"}, ["wth"] = {"Wathawurrung"}, ["wti"] = {"Berta"}, ["wtk"] = {"Watakataui"}, ["wtm"] = {"Mewati"}, ["wtw"] = {"Wotu"}, ["wua"] = {"Wikngenchera"}, ["wub"] = {"Wunambal"}, ["wud"] = {"Wudu"}, ["wuh"] = {"Wutunhua"}, ["wul"] = {"Silimo"}, ["wum"] = {"Wumbvu"}, ["wun"] = {"Bungu"}, ["wur"] = {"Wurrugu"}, ["wut"] = {"Wutung"}, ["wuu"] = {"Wu Chinese"}, ["wuv"] = {"Wuvulu-Aua"}, ["wux"] = {"Wulna"}, ["wuy"] = {"Wauyai"}, ["wwa"] = {"Waama"}, ["wwb"] = {"Wakabunga"}, ["wwo"] = {"Wetamut", "Dorig"}, ["wwr"] = {"Warrwa"}, ["www"] = {"Wawa"}, ["wxa"] = {"Waxianghua"}, ["wxw"] = {"Wardandi"}, ["wyb"] = {"Wangaaybuwan-Ngiyambaa"}, ["wyi"] = {"Woiwurrung"}, ["wym"] = {"Wymysorys"}, ["wyn"] = {"Wyandot"}, ["wyr"] = {"Wayoró"}, ["wyy"] = {"Western Fijian"}, ["xaa"] = {"Andalusian Arabic"}, ["xab"] = {"Sambe"}, ["xac"] = {"Kachari"}, ["xad"] = {"Adai"}, ["xae"] = {"Aequian"}, ["xag"] = {"Aghwan"}, ["xai"] = {"Kaimbé"}, ["xaj"] = {"Ararandewára"}, ["xak"] = {"Máku"}, ["xal"] = {"Kalmyk", "Oirat"}, ["xam"] = {"ǀXam"}, ["xan"] = {"Xamtanga"}, ["xao"] = {"Khao"}, ["xap"] = {"Apalachee"}, ["xaq"] = {"Aquitanian"}, ["xar"] = {"Karami"}, ["xas"] = {"Kamas"}, ["xat"] = {"Katawixi"}, ["xau"] = {"Kauwera"}, ["xav"] = {"Xavánte"}, ["xaw"] = {"Kawaiisu"}, ["xay"] = {"Kayan Mahakam"}, ["xbb"] = {"Lower Burdekin"}, ["xbc"] = {"Bactrian"}, ["xbd"] = {"Bindal"}, ["xbe"] = {"Bigambal"}, ["xbg"] = {"Bunganditj"}, ["xbi"] = {"Kombio"}, ["xbj"] = {"Birrpayi"}, ["xbm"] = {"Middle Breton"}, ["xbn"] = {"Kenaboi"}, ["xbo"] = {"Bolgarian"}, ["xbp"] = {"Bibbulman"}, ["xbr"] = {"Kambera"}, ["xbw"] = {"Kambiwá"}, ["xby"] = {"Batjala", "Batyala"}, ["xcb"] = {"Cumbric"}, ["xcc"] = {"Camunic"}, ["xce"] = {"Celtiberian"}, ["xcg"] = {"Cisalpine Gaulish"}, ["xch"] = {"Chemakum", "Chimakum"}, ["xcl"] = {"Classical Armenian"}, ["xcm"] = {"Comecrudo"}, ["xcn"] = {"Cotoname"}, ["xco"] = {"Chorasmian"}, ["xcr"] = {"Carian"}, ["xct"] = {"Classical Tibetan"}, ["xcu"] = {"Curonian"}, ["xcv"] = {"Chuvantsy"}, ["xcw"] = {"Coahuilteco"}, ["xcy"] = {"Cayuse"}, ["xda"] = {"Darkinyung"}, ["xdc"] = {"Dacian"}, ["xdk"] = {"Dharuk"}, ["xdm"] = {"Edomite"}, ["xdo"] = {"Kwandu"}, ["xdq"] = {"Kaitag"}, ["xdy"] = {"Malayic Dayak"}, ["xeb"] = {"Eblan"}, ["xed"] = {"Hdi"}, ["xeg"] = {"ǁXegwi"}, ["xel"] = {"Kelo"}, ["xem"] = {"Kembayan"}, ["xep"] = {"Epi-Olmec"}, ["xer"] = {"Xerénte"}, ["xes"] = {"Kesawai"}, ["xet"] = {"Xetá"}, ["xeu"] = {"Keoru-Ahia"}, ["xfa"] = {"Faliscan"}, ["xga"] = {"Galatian"}, ["xgb"] = {"Gbin"}, ["xgd"] = {"Gudang"}, ["xgf"] = {"Gabrielino-Fernandeño"}, ["xgg"] = {"Goreng"}, ["xgi"] = {"Garingbal"}, ["xgl"] = {"Galindan"}, ["xgm"] = {"Dharumbal", "Guwinmal"}, ["xgn"] = {"Mongolian languages"}, ["xgr"] = {"Garza"}, ["xgu"] = {"Unggumi"}, ["xgw"] = {"Guwa"}, ["xha"] = {"Harami"}, ["xhc"] = {"Hunnic"}, ["xhd"] = {"Hadrami"}, ["xhe"] = {"Khetrani"}, ["xhm"] = {"Middle Khmer (1400 to 1850 CE)"}, ["xhr"] = {"Hernican"}, ["xht"] = {"Hattic"}, ["xhu"] = {"Hurrian"}, ["xhv"] = {"Khua"}, ["xib"] = {"Iberian"}, ["xii"] = {"Xiri"}, ["xil"] = {"Illyrian"}, ["xin"] = {"Xinca"}, ["xir"] = {"Xiriâna"}, ["xis"] = {"Kisan"}, ["xiv"] = {"Indus Valley Language"}, ["xiy"] = {"Xipaya"}, ["xjb"] = {"Minjungbal"}, ["xjt"] = {"Jaitmatang"}, ["xka"] = {"Kalkoti"}, ["xkb"] = {"Northern Nago"}, ["xkc"] = {"Kho'ini"}, ["xkd"] = {"Mendalam Kayan"}, ["xke"] = {"Kereho"}, ["xkf"] = {"Khengkha"}, ["xkg"] = {"Kagoro"}, ["xki"] = {"Kenyan Sign Language"}, ["xkj"] = {"Kajali"}, ["xkk"] = {"Kachok", "Kaco'"}, ["xkl"] = {"Mainstream Kenyah"}, ["xkn"] = {"Kayan River Kayan"}, ["xko"] = {"Kiorr"}, ["xkp"] = {"Kabatei"}, ["xkq"] = {"Koroni"}, ["xkr"] = {"Xakriabá"}, ["xks"] = {"Kumbewaha"}, ["xkt"] = {"Kantosi"}, ["xku"] = {"Kaamba"}, ["xkv"] = {"Kgalagadi"}, ["xkw"] = {"Kembra"}, ["xkx"] = {"Karore"}, ["xky"] = {"Uma' Lasan"}, ["xkz"] = {"Kurtokha"}, ["xla"] = {"Kamula"}, ["xlb"] = {"Loup B"}, ["xlc"] = {"Lycian"}, ["xld"] = {"Lydian"}, ["xle"] = {"Lemnian"}, ["xlg"] = {"Ligurian (Ancient)"}, ["xli"] = {"Liburnian"}, ["xln"] = {"Alanic"}, ["xlo"] = {"Loup A"}, ["xlp"] = {"Lepontic"}, ["xls"] = {"Lusitanian"}, ["xlu"] = {"Cuneiform Luwian"}, ["xly"] = {"Elymian"}, ["xma"] = {"Mushungulu"}, ["xmb"] = {"Mbonga"}, ["xmc"] = {"Makhuwa-Marrevone"}, ["xmd"] = {"Mbudum"}, ["xme"] = {"Median"}, ["xmf"] = {"Mingrelian"}, ["xmg"] = {"Mengaka"}, ["xmh"] = {"Kugu-Muminh"}, ["xmj"] = {"Majera"}, ["xmk"] = {"Ancient Macedonian"}, ["xml"] = {"Malaysian Sign Language"}, ["xmm"] = {"Manado Malay"}, ["xmn"] = {"Manichaean Middle Persian"}, ["xmo"] = {"Morerebi"}, ["xmp"] = {"Kuku-Mu'inh"}, ["xmq"] = {"Kuku-Mangk"}, ["xmr"] = {"Meroitic"}, ["xms"] = {"Moroccan Sign Language"}, ["xmt"] = {"Matbat"}, ["xmu"] = {"Kamu"}, ["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"}, ["xmw"] = {"Tsimihety Malagasy"}, ["xmx"] = {"Salawati", "Maden"}, ["xmy"] = {"Mayaguduna"}, ["xmz"] = {"Mori Bawah"}, ["xna"] = {"Ancient North Arabian"}, ["xnb"] = {"Kanakanabu"}, ["xnd"] = {"Na-Dene languages"}, ["xng"] = {"Middle Mongolian"}, ["xnh"] = {"Kuanhua"}, ["xni"] = {"Ngarigu"}, ["xnj"] = {"Ngoni (Tanzania)"}, ["xnk"] = {"Nganakarti"}, ["xnm"] = {"Ngumbarl"}, ["xnn"] = {"Northern Kankanay"}, ["xno"] = {"Anglo-Norman"}, ["xnq"] = {"Ngoni (Mozambique)"}, ["xnr"] = {"Kangri"}, ["xns"] = {"Kanashi"}, ["xnt"] = {"Narragansett"}, ["xnu"] = {"Nukunul"}, ["xny"] = {"Nyiyaparli"}, ["xnz"] = {"Kenzi", "Mattoki"}, ["xoc"] = {"O'chi'chi'"}, ["xod"] = {"Kokoda"}, ["xog"] = {"Soga"}, ["xoi"] = {"Kominimung"}, ["xok"] = {"Xokleng"}, ["xom"] = {"Komo (Sudan)"}, ["xon"] = {"Konkomba"}, ["xoo"] = {"Xukurú"}, ["xop"] = {"Kopar"}, ["xor"] = {"Korubo"}, ["xow"] = {"Kowaki"}, ["xpa"] = {"Pirriya"}, ["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"}, ["xpc"] = {"Pecheneg"}, ["xpd"] = {"Oyster Bay Tasmanian"}, ["xpe"] = {"Liberia Kpelle"}, ["xpf"] = {"Southeast Tasmanian", "Nuenonne"}, ["xpg"] = {"Phrygian"}, ["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"}, ["xpi"] = {"Pictish"}, ["xpj"] = {"Mpalitjanh"}, ["xpk"] = {"Kulina Pano"}, ["xpl"] = {"Port Sorell Tasmanian"}, ["xpm"] = {"Pumpokol"}, ["xpn"] = {"Kapinawá"}, ["xpo"] = {"Pochutec"}, ["xpp"] = {"Puyo-Paekche"}, ["xpq"] = {"Mohegan-Pequot"}, ["xpr"] = {"Parthian"}, ["xps"] = {"Pisidian"}, ["xpt"] = {"Punthamara"}, ["xpu"] = {"Punic"}, ["xpv"] = {"Northern Tasmanian", "Tommeginne"}, ["xpw"] = {"Northwestern Tasmanian", "Peerapper"}, ["xpx"] = {"Southwestern Tasmanian", "Toogee"}, ["xpy"] = {"Puyo"}, ["xpz"] = {"Bruny Island Tasmanian"}, ["xqa"] = {"Karakhanid"}, ["xqt"] = {"Qatabanian"}, ["xra"] = {"Krahô"}, ["xrb"] = {"Eastern Karaboro"}, ["xrd"] = {"Gundungurra"}, ["xre"] = {"Kreye"}, ["xrg"] = {"Minang"}, ["xri"] = {"Krikati-Timbira"}, ["xrm"] = {"Armazic"}, ["xrn"] = {"Arin"}, ["xrr"] = {"Raetic"}, ["xrt"] = {"Aranama-Tamique"}, ["xru"] = {"Marriammu"}, ["xrw"] = {"Karawa"}, ["xsa"] = {"Sabaean"}, ["xsb"] = {"Sambal"}, ["xsc"] = {"Scythian"}, ["xsd"] = {"Sidetic"}, ["xse"] = {"Sempan"}, ["xsh"] = {"Shamang"}, ["xsi"] = {"Sio"}, ["xsj"] = {"Subi"}, ["xsl"] = {"South Slavey"}, ["xsm"] = {"Kasem"}, ["xsn"] = {"Sanga (Nigeria)"}, ["xso"] = {"Solano"}, ["xsp"] = {"Silopi"}, ["xsq"] = {"Makhuwa-Saka"}, ["xsr"] = {"Sherpa"}, ["xsu"] = {"Sanumá"}, ["xsv"] = {"Sudovian"}, ["xsy"] = {"Saisiyat"}, ["xta"] = {"Alcozauca Mixtec"}, ["xtb"] = {"Chazumba Mixtec"}, ["xtc"] = {"Katcha-Kadugli-Miri"}, ["xtd"] = {"Diuxi-Tilantongo Mixtec"}, ["xte"] = {"Ketengban"}, ["xtg"] = {"Transalpine Gaulish"}, ["xth"] = {"Yitha Yitha"}, ["xti"] = {"Sinicahua Mixtec"}, ["xtj"] = {"San Juan Teita Mixtec"}, ["xtl"] = {"Tijaltepec Mixtec"}, ["xtm"] = {"Magdalena Peñasco Mixtec"}, ["xtn"] = {"Northern Tlaxiaco Mixtec"}, ["xto"] = {"Tokharian A"}, ["xtp"] = {"San Miguel Piedras Mixtec"}, ["xtq"] = {"Tumshuqese"}, ["xtr"] = {"Early Tripuri"}, ["xts"] = {"Sindihui Mixtec"}, ["xtt"] = {"Tacahua Mixtec"}, ["xtu"] = {"Cuyamecalco Mixtec"}, ["xtv"] = {"Thawa"}, ["xtw"] = {"Tawandê"}, ["xty"] = {"Yoloxochitl Mixtec"}, ["xua"] = {"Alu Kurumba"}, ["xub"] = {"Betta Kurumba"}, ["xud"] = {"Umiida"}, ["xug"] = {"Kunigami"}, ["xuj"] = {"Jennu Kurumba"}, ["xul"] = {"Ngunawal", "Nunukul"}, ["xum"] = {"Umbrian"}, ["xun"] = {"Unggaranggu"}, ["xuo"] = {"Kuo"}, ["xup"] = {"Upper Umpqua"}, ["xur"] = {"Urartian"}, ["xut"] = {"Kuthant"}, ["xuu"] = {"Kxoe", "Khwedam"}, ["xve"] = {"Venetic"}, ["xvi"] = {"Kamviri"}, ["xvn"] = {"Vandalic"}, ["xvo"] = {"Volscian"}, ["xvs"] = {"Vestinian"}, ["xwa"] = {"Kwaza"}, ["xwc"] = {"Woccon"}, ["xwd"] = {"Wadi Wadi"}, ["xwe"] = {"Xwela Gbe"}, ["xwg"] = {"Kwegu"}, ["xwj"] = {"Wajuk"}, ["xwk"] = {"Wangkumara"}, ["xwl"] = {"Western Xwla Gbe"}, ["xwo"] = {"Written Oirat"}, ["xwr"] = {"Kwerba Mamberamo"}, ["xwt"] = {"Wotjobaluk"}, ["xww"] = {"Wemba Wemba"}, ["xxb"] = {"Boro (Ghana)"}, ["xxk"] = {"Ke'o"}, ["xxm"] = {"Minkin"}, ["xxr"] = {"Koropó"}, ["xxt"] = {"Tambora"}, ["xya"] = {"Yaygir"}, ["xyb"] = {"Yandjibara"}, ["xyj"] = {"Mayi-Yapi"}, ["xyk"] = {"Mayi-Kulan"}, ["xyl"] = {"Yalakalore"}, ["xyt"] = {"Mayi-Thakurti"}, ["xyy"] = {"Yorta Yorta"}, ["xzh"] = {"Zhang-Zhung"}, ["xzm"] = {"Zemgalian"}, ["xzp"] = {"Ancient Zapotec"}, ["yaa"] = {"Yaminahua"}, ["yab"] = {"Yuhup"}, ["yac"] = {"Pass Valley Yali"}, ["yad"] = {"Yagua"}, ["yae"] = {"Pumé"}, ["yaf"] = {"Yaka (Democratic Republic of Congo)"}, ["yag"] = {"Yámana"}, ["yah"] = {"Yazgulyam"}, ["yai"] = {"Yagnobi"}, ["yaj"] = {"Banda-Yangere"}, ["yak"] = {"Yakama"}, ["yal"] = {"Yalunka"}, ["yam"] = {"Yamba"}, ["yan"] = {"Mayangna"}, ["yao"] = {"Yao"}, ["yap"] = {"Yapese"}, ["yaq"] = {"Yaqui"}, ["yar"] = {"Yabarana"}, ["yas"] = {"Nugunu (Cameroon)"}, ["yat"] = {"Yambeta"}, ["yau"] = {"Yuwana"}, ["yav"] = {"Yangben"}, ["yaw"] = {"Yawalapití"}, ["yax"] = {"Yauma"}, ["yay"] = {"Agwagwune"}, ["yaz"] = {"Lokaa"}, ["yba"] = {"Yala"}, ["ybb"] = {"Yemba"}, ["ybe"] = {"West Yugur"}, ["ybh"] = {"Yakha"}, ["ybi"] = {"Yamphu"}, ["ybj"] = {"Hasha"}, ["ybk"] = {"Bokha"}, ["ybl"] = {"Yukuben"}, ["ybm"] = {"Yaben"}, ["ybn"] = {"Yabaâna"}, ["ybo"] = {"Yabong"}, ["ybx"] = {"Yawiyo"}, ["yby"] = {"Yaweyuha"}, ["ych"] = {"Chesu"}, ["ycl"] = {"Lolopo"}, ["ycn"] = {"Yucuna"}, ["ycp"] = {"Chepya"}, ["ycr"] = {"Yilan Creole"}, ["yda"] = {"Yanda"}, ["ydd"] = {"Eastern Yiddish"}, ["yde"] = {"Yangum Dey"}, ["ydg"] = {"Yidgha"}, ["ydk"] = {"Yoidik"}, ["yea"] = {"Ravula"}, ["yec"] = {"Yeniche"}, ["yee"] = {"Yimas"}, ["yei"] = {"Yeni"}, ["yej"] = {"Yevanic"}, ["yel"] = {"Yela"}, ["yer"] = {"Tarok"}, ["yes"] = {"Nyankpa"}, ["yet"] = {"Yetfa"}, ["yeu"] = {"Yerukula"}, ["yev"] = {"Yapunda"}, ["yey"] = {"Yeyi"}, ["yga"] = {"Malyangapa"}, ["ygi"] = {"Yiningayi"}, ["ygl"] = {"Yangum Gel"}, ["ygm"] = {"Yagomi"}, ["ygp"] = {"Gepo"}, ["ygr"] = {"Yagaria"}, ["ygs"] = {"Yolŋu Sign Language"}, ["ygu"] = {"Yugul"}, ["ygw"] = {"Yagwoia"}, ["yha"] = {"Baha Buyang"}, ["yhd"] = {"Judeo-Iraqi Arabic"}, ["yhl"] = {"Hlepho Phowa"}, ["yhs"] = {"Yan-nhaŋu Sign Language"}, ["yia"] = {"Yinggarda"}, ["yif"] = {"Ache"}, ["yig"] = {"Wusa Nasu"}, ["yih"] = {"Western Yiddish"}, ["yii"] = {"Yidiny"}, ["yij"] = {"Yindjibarndi"}, ["yik"] = {"Dongshanba Lalo"}, ["yil"] = {"Yindjilandji"}, ["yim"] = {"Yimchungru Naga"}, ["yin"] = {"Riang Lai", "Yinchia"}, ["yip"] = {"Pholo"}, ["yiq"] = {"Miqie"}, ["yir"] = {"North Awyu"}, ["yis"] = {"Yis"}, ["yit"] = {"Eastern Lalu"}, ["yiu"] = {"Awu"}, ["yiv"] = {"Northern Nisu"}, ["yix"] = {"Axi Yi"}, ["yiz"] = {"Azhe"}, ["yka"] = {"Yakan"}, ["ykg"] = {"Northern Yukaghir"}, ["ykh"] = {"Khamnigan Mongol"}, ["yki"] = {"Yoke"}, ["ykk"] = {"Yakaikeke"}, ["ykl"] = {"Khlula"}, ["ykm"] = {"Kap"}, ["ykn"] = {"Kua-nsi"}, ["yko"] = {"Yasa"}, ["ykr"] = {"Yekora"}, ["ykt"] = {"Kathu"}, ["yku"] = {"Kuamasi"}, ["yky"] = {"Yakoma"}, ["yla"] = {"Yaul"}, ["ylb"] = {"Yaleba"}, ["yle"] = {"Yele"}, ["ylg"] = {"Yelogu"}, ["yli"] = {"Angguruk Yali"}, ["yll"] = {"Yil"}, ["ylm"] = {"Limi"}, ["yln"] = {"Langnian Buyang"}, ["ylo"] = {"Naluo Yi"}, ["ylr"] = {"Yalarnnga"}, ["ylu"] = {"Aribwaung"}, ["yly"] = {"Nyâlayu", "Nyelâyu"}, ["ymb"] = {"Yambes"}, ["ymc"] = {"Southern Muji"}, ["ymd"] = {"Muda"}, ["yme"] = {"Yameo"}, ["ymg"] = {"Yamongeri"}, ["ymh"] = {"Mili"}, ["ymi"] = {"Moji"}, ["ymk"] = {"Makwe"}, ["yml"] = {"Iamalele"}, ["ymm"] = {"Maay"}, ["ymn"] = {"Yamna", "Sunum"}, ["ymo"] = {"Yangum Mon"}, ["ymp"] = {"Yamap"}, ["ymq"] = {"Qila Muji"}, ["ymr"] = {"Malasar"}, ["yms"] = {"Mysian"}, ["ymx"] = {"Northern Muji"}, ["ymz"] = {"Muzi"}, ["yna"] = {"Aluo"}, ["ynd"] = {"Yandruwandha"}, ["yne"] = {"Lang'e"}, ["yng"] = {"Yango"}, ["ynk"] = {"Naukan Yupik"}, ["ynl"] = {"Yangulam"}, ["ynn"] = {"Yana"}, ["yno"] = {"Yong"}, ["ynq"] = {"Yendang"}, ["yns"] = {"Yansi"}, ["ynu"] = {"Yahuna"}, ["yob"] = {"Yoba"}, ["yog"] = {"Yogad"}, ["yoi"] = {"Yonaguni"}, ["yok"] = {"Yokuts"}, ["yol"] = {"Yola"}, ["yom"] = {"Yombe"}, ["yon"] = {"Yongkom"}, ["yot"] = {"Yotti"}, ["yox"] = {"Yoron"}, ["yoy"] = {"Yoy"}, ["ypa"] = {"Phala"}, ["ypb"] = {"Labo Phowa"}, ["ypg"] = {"Phola"}, ["yph"] = {"Phupha"}, ["ypk"] = {"Yupik languages"}, ["ypm"] = {"Phuma"}, ["ypn"] = {"Ani Phowa"}, ["ypo"] = {"Alo Phola"}, ["ypp"] = {"Phupa"}, ["ypz"] = {"Phuza"}, ["yra"] = {"Yerakai"}, ["yrb"] = {"Yareba"}, ["yre"] = {"Yaouré"}, ["yrk"] = {"Nenets"}, ["yrl"] = {"Nhengatu"}, ["yrm"] = {"Yirrk-Mel"}, ["yrn"] = {"Yerong"}, ["yro"] = {"Yaroamë"}, ["yrs"] = {"Yarsun"}, ["yrw"] = {"Yarawata"}, ["yry"] = {"Yarluyandi"}, ["ysc"] = {"Yassic"}, ["ysd"] = {"Samatao"}, ["ysg"] = {"Sonaga"}, ["ysl"] = {"Yugoslavian Sign Language"}, ["ysm"] = {"Myanmar Sign Language"}, ["ysn"] = {"Sani"}, ["yso"] = {"Nisi (China)"}, ["ysp"] = {"Southern Lolopo"}, ["ysr"] = {"Sirenik Yupik"}, ["yss"] = {"Yessan-Mayo"}, ["ysy"] = {"Sanie"}, ["yta"] = {"Talu"}, ["ytl"] = {"Tanglang"}, ["ytp"] = {"Thopho"}, ["ytw"] = {"Yout Wam"}, ["yty"] = {"Yatay"}, ["yua"] = {"Yucateco", "Yucatec Maya"}, ["yub"] = {"Yugambal"}, ["yuc"] = {"Yuchi"}, ["yud"] = {"Judeo-Tripolitanian Arabic"}, ["yue"] = {"Yue Chinese", "Cantonese"}, ["yuf"] = {"Havasupai-Walapai-Yavapai"}, ["yug"] = {"Yug"}, ["yui"] = {"Yurutí"}, ["yuj"] = {"Karkar-Yuri"}, ["yuk"] = {"Yuki"}, ["yul"] = {"Yulu"}, ["yum"] = {"Quechan"}, ["yun"] = {"Bena (Nigeria)"}, ["yup"] = {"Yukpa"}, ["yuq"] = {"Yuqui"}, ["yur"] = {"Yurok"}, ["yut"] = {"Yopno"}, ["yuw"] = {"Yau (Morobe Province)"}, ["yux"] = {"Southern Yukaghir"}, ["yuy"] = {"East Yugur"}, ["yuz"] = {"Yuracare"}, ["yva"] = {"Yawa"}, ["yvt"] = {"Yavitero"}, ["ywa"] = {"Kalou"}, ["ywg"] = {"Yinhawangka"}, ["ywl"] = {"Western Lalu"}, ["ywn"] = {"Yawanawa"}, ["ywq"] = {"Wuding-Luquan Yi"}, ["ywr"] = {"Yawuru"}, ["ywt"] = {"Xishanba Lalo", "Central Lalo"}, ["ywu"] = {"Wumeng Nasu"}, ["yww"] = {"Yawarawarga"}, ["yxa"] = {"Mayawali"}, ["yxg"] = {"Yagara"}, ["yxl"] = {"Yardliyawarra"}, ["yxm"] = {"Yinwum"}, ["yxu"] = {"Yuyu"}, ["yxy"] = {"Yabula Yabula"}, ["yyr"] = {"Yir Yoront"}, ["yyu"] = {"Yau (Sandaun Province)"}, ["yyz"] = {"Ayizi"}, ["yzg"] = {"E'ma Buyang"}, ["yzk"] = {"Zokhuo"}, ["zaa"] = {"Sierra de Juárez Zapotec"}, ["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"}, ["zac"] = {"Ocotlán Zapotec"}, ["zad"] = {"Cajonos Zapotec"}, ["zae"] = {"Yareni Zapotec"}, ["zaf"] = {"Ayoquesco Zapotec"}, ["zag"] = {"Zaghawa"}, ["zah"] = {"Zangwal"}, ["zai"] = {"Isthmus Zapotec"}, ["zaj"] = {"Zaramo"}, ["zak"] = {"Zanaki"}, ["zal"] = {"Zauzou"}, ["zam"] = {"Miahuatlán Zapotec"}, ["zao"] = {"Ozolotepec Zapotec"}, ["zap"] = {"Zapotec"}, ["zaq"] = {"Aloápam Zapotec"}, ["zar"] = {"Rincón Zapotec"}, ["zas"] = {"Santo Domingo Albarradas Zapotec"}, ["zat"] = {"Tabaa Zapotec"}, ["zau"] = {"Zangskari"}, ["zav"] = {"Yatzachi Zapotec"}, ["zaw"] = {"Mitla Zapotec"}, ["zax"] = {"Xadani Zapotec"}, ["zay"] = {"Zayse-Zergulla", "Zaysete"}, ["zaz"] = {"Zari"}, ["zba"] = {"Balaibalan"}, ["zbc"] = {"Central Berawan"}, ["zbe"] = {"East Berawan"}, ["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"}, ["zbt"] = {"Batui"}, ["zbu"] = {"Bu (Bauchi State)"}, ["zbw"] = {"West Berawan"}, ["zca"] = {"Coatecas Altas Zapotec"}, ["zcd"] = {"Las Delicias Zapotec"}, ["zch"] = {"Central Hongshuihe Zhuang"}, ["zdj"] = {"Ngazidja Comorian"}, ["zea"] = {"Zeeuws"}, ["zeg"] = {"Zenag"}, ["zeh"] = {"Eastern Hongshuihe Zhuang"}, ["zem"] = {"Zeem"}, ["zen"] = {"Zenaga"}, ["zga"] = {"Kinga"}, ["zgb"] = {"Guibei Zhuang"}, ["zgh"] = {"Standard Moroccan Tamazight"}, ["zgm"] = {"Minz Zhuang"}, ["zgn"] = {"Guibian Zhuang"}, ["zgr"] = {"Magori"}, ["zhb"] = {"Zhaba"}, ["zhd"] = {"Dai Zhuang"}, ["zhi"] = {"Zhire"}, ["zhn"] = {"Nong Zhuang"}, ["zhw"] = {"Zhoa"}, ["zhx"] = {"Chinese (family)"}, ["zia"] = {"Zia"}, ["zib"] = {"Zimbabwe Sign Language"}, ["zik"] = {"Zimakani"}, ["zil"] = {"Zialo"}, ["zim"] = {"Mesme"}, ["zin"] = {"Zinza"}, ["ziw"] = {"Zigula"}, ["ziz"] = {"Zizilivakan"}, ["zka"] = {"Kaimbulawa"}, ["zkd"] = {"Kadu"}, ["zkg"] = {"Koguryo"}, ["zkh"] = {"Khorezmian"}, ["zkk"] = {"Karankawa"}, ["zkn"] = {"Kanan"}, ["zko"] = {"Kott"}, ["zkp"] = {"São Paulo Kaingáng"}, ["zkr"] = {"Zakhring"}, ["zkt"] = {"Kitan"}, ["zku"] = {"Kaurna"}, ["zkv"] = {"Krevinian"}, ["zkz"] = {"Khazar"}, ["zla"] = {"Zula"}, ["zle"] = {"East Slavic languages"}, ["zlj"] = {"Liujiang Zhuang"}, ["zlm"] = {"Malay (individual language)"}, ["zln"] = {"Lianshan Zhuang"}, ["zlq"] = {"Liuqian Zhuang"}, ["zls"] = {"South Slavic languages"}, ["zlu"] = {"Zul"}, ["zlw"] = {"West Slavic languages"}, ["zma"] = {"Manda (Australia)"}, ["zmb"] = {"Zimba"}, ["zmc"] = {"Margany"}, ["zmd"] = {"Maridan"}, ["zme"] = {"Mangerr"}, ["zmf"] = {"Mfinu"}, ["zmg"] = {"Marti Ke"}, ["zmh"] = {"Makolkol"}, ["zmi"] = {"Negeri Sembilan Malay"}, ["zmj"] = {"Maridjabin"}, ["zmk"] = {"Mandandanyi"}, ["zml"] = {"Matngala"}, ["zmm"] = {"Marimanindji", "Marramaninyshi"}, ["zmn"] = {"Mbangwe"}, ["zmo"] = {"Molo"}, ["zmp"] = {"Mpuono"}, ["zmq"] = {"Mituku"}, ["zmr"] = {"Maranunggu"}, ["zms"] = {"Mbesa"}, ["zmt"] = {"Maringarr"}, ["zmu"] = {"Muruwari"}, ["zmv"] = {"Mbariman-Gudhinma"}, ["zmw"] = {"Mbo (Democratic Republic of Congo)"}, ["zmx"] = {"Bomitaba"}, ["zmy"] = {"Mariyedi"}, ["zmz"] = {"Mbandja"}, ["zna"] = {"Zan Gula"}, ["znd"] = {"Zande languages"}, ["zne"] = {"Zande (individual language)"}, ["zng"] = {"Mang"}, ["znk"] = {"Manangkari"}, ["zns"] = {"Mangas"}, ["zoc"] = {"Copainalá Zoque"}, ["zoh"] = {"Chimalapa Zoque"}, ["zom"] = {"Zou"}, ["zoo"] = {"Asunción Mixtepec Zapotec"}, ["zoq"] = {"Tabasco Zoque"}, ["zor"] = {"Rayón Zoque"}, ["zos"] = {"Francisco León Zoque"}, ["zpa"] = {"Lachiguiri Zapotec"}, ["zpb"] = {"Yautepec Zapotec"}, ["zpc"] = {"Choapan Zapotec"}, ["zpd"] = {"Southeastern Ixtlán Zapotec"}, ["zpe"] = {"Petapa Zapotec"}, ["zpf"] = {"San Pedro Quiatoni Zapotec"}, ["zpg"] = {"Guevea De Humboldt Zapotec"}, ["zph"] = {"Totomachapan Zapotec"}, ["zpi"] = {"Santa María Quiegolani Zapotec"}, ["zpj"] = {"Quiavicuzas Zapotec"}, ["zpk"] = {"Tlacolulita Zapotec"}, ["zpl"] = {"Lachixío Zapotec"}, ["zpm"] = {"Mixtepec Zapotec"}, ["zpn"] = {"Santa Inés Yatzechi Zapotec"}, ["zpo"] = {"Amatlán Zapotec"}, ["zpp"] = {"El Alto Zapotec"}, ["zpq"] = {"Zoogocho Zapotec"}, ["zpr"] = {"Santiago Xanica Zapotec"}, ["zps"] = {"Coatlán Zapotec"}, ["zpt"] = {"San Vicente Coatlán Zapotec"}, ["zpu"] = {"Yalálag Zapotec"}, ["zpv"] = {"Chichicapan Zapotec"}, ["zpw"] = {"Zaniza Zapotec"}, ["zpx"] = {"San Baltazar Loxicha Zapotec"}, ["zpy"] = {"Mazaltepec Zapotec"}, ["zpz"] = {"Texmelucan Zapotec"}, ["zqe"] = {"Qiubei Zhuang"}, ["zra"] = {"Kara (Korea)"}, ["zrg"] = {"Mirgan"}, ["zrn"] = {"Zerenkel"}, ["zro"] = {"Záparo"}, ["zrp"] = {"Zarphatic"}, ["zrs"] = {"Mairasi"}, ["zsa"] = {"Sarasira"}, ["zsk"] = {"Kaskean"}, ["zsl"] = {"Zambian Sign Language"}, ["zsm"] = {"Standard Malay"}, ["zsr"] = {"Southern Rincon Zapotec"}, ["zsu"] = {"Sukurum"}, ["zte"] = {"Elotepec Zapotec"}, ["ztg"] = {"Xanaguía Zapotec"}, ["ztl"] = {"Lapaguía-Guivini Zapotec"}, ["ztm"] = {"San Agustín Mixtepec Zapotec"}, ["ztn"] = {"Santa Catarina Albarradas Zapotec"}, ["ztp"] = {"Loxicha Zapotec"}, ["ztq"] = {"Quioquitani-Quierí Zapotec"}, ["zts"] = {"Tilquiapan Zapotec"}, ["ztt"] = {"Tejalapan Zapotec"}, ["ztu"] = {"Güilá Zapotec"}, ["ztx"] = {"Zaachila Zapotec"}, ["zty"] = {"Yatee Zapotec"}, ["zuh"] = {"Tokano"}, ["zum"] = {"Kumzari"}, ["zun"] = {"Zuni"}, ["zuy"] = {"Zumaya"}, ["zwa"] = {"Zay"}, ["zxx"] = {"No linguistic content", "Not applicable"}, ["zyb"] = {"Yongbei Zhuang"}, ["zyg"] = {"Yang Zhuang"}, ["zyj"] = {"Youjiang Zhuang"}, ["zyn"] = {"Yongnan Zhuang"}, ["zyp"] = {"Zyphe Chin"}, ["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"}, ["zzj"] = {"Zuojiang Zhuang"} } local deprecated = { ["in"] = {"Indonesian"}, ["iw"] = {"Hebrew"}, ["ji"] = {"Yiddish"}, ["jw"] = {"Javanese"}, ["mo"] = {"Moldavian", "Moldovan"}, ["aam"] = {"Aramanik"}, ["adp"] = {"Adap"}, ["agp"] = {"Paranan"}, ["ais"] = {"Nataoran Amis"}, ["ajp"] = {"South Levantine Arabic"}, ["ajt"] = {"Judeo-Tunisian Arabic"}, ["aoh"] = {"Arma"}, ["asd"] = {"Asas"}, ["aue"] = {"ǂKxʼauǁʼein"}, ["ayx"] = {"Ayi (China)"}, ["ayy"] = {"Tayabas Ayta"}, ["baz"] = {"Tunen"}, ["bbz"] = {"Babalia Creole Arabic"}, ["bgm"] = {"Baga Mboteni"}, ["bhk"] = {"Albay Bicolano"}, ["bic"] = {"Bikaru"}, ["bij"] = {"Vaghat-Ya-Bijim-Legeri"}, ["bjd"] = {"Bandjigali"}, ["bjq"] = {"Southern Betsimisaraka Malagasy"}, ["bkb"] = {"Finallig"}, ["blg"] = {"Balau"}, ["bmy"] = {"Bemba (Democratic Republic of Congo)"}, ["bpb"] = {"Barbacoas"}, ["btb"] = {"Beti (Cameroon)"}, ["btl"] = {"Bhatola"}, ["bxx"] = {"Borna (Democratic Republic of Congo)"}, ["byy"] = {"Buya"}, ["cbe"] = {"Chipiajes"}, ["cbh"] = {"Cagua"}, ["cca"] = {"Cauca"}, ["ccq"] = {"Chaungtha"}, ["cdg"] = {"Chamari"}, ["cjr"] = {"Chorotega"}, ["cka"] = {"Khumi Awa Chin"}, ["cmk"] = {"Chimakum"}, ["coy"] = {"Coyaima"}, ["cqu"] = {"Chilean Quechua"}, ["cug"] = {"Chungmboko", "Cung"}, ["cum"] = {"Cumeral"}, ["daf"] = {"Dan"}, ["dap"] = {"Nisi (India)"}, ["dgu"] = {"Degaru"}, ["dha"] = {"Dhanwar (India)"}, ["dit"] = {"Dirari"}, ["djl"] = {"Djiwarli"}, ["dkl"] = {"Kolum So Dogon"}, ["drh"] = {"Darkhat"}, ["drr"] = {"Dororo"}, ["drw"] = {"Darwazi"}, ["dud"] = {"Hun-Saare"}, ["duj"] = {"Dhuwal"}, ["dwl"] = {"Walo Kumbe Dogon"}, ["ekc"] = {"Eastern Karnic"}, ["elp"] = {"Elpaputih"}, ["emo"] = {"Emok"}, ["gav"] = {"Gabutamon"}, ["gbc"] = {"Garawa"}, ["gfx"] = {"Mangetti Dune ǃXung"}, ["ggn"] = {"Eastern Gurung"}, ["ggo"] = {"Southern Gondi"}, ["ggr"] = {"Aghu Tharnggalu"}, ["gio"] = {"Gelao"}, ["gji"] = {"Geji"}, ["gli"] = {"Guliguli"}, ["gti"] = {"Gbati-ri"}, ["guv"] = {"Gey"}, ["hrr"] = {"Horuru"}, ["iap"] = {"Iapama"}, ["ibi"] = {"Ibilo"}, ["ill"] = {"Iranun"}, ["ilw"] = {"Talur"}, ["ime"] = {"Imeraguen"}, ["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"}, ["jar"] = {"Jarawa (Nigeria)"}, ["jeg"] = {"Jeng"}, ["kbf"] = {"Kakauhua"}, ["kdv"] = {"Kado"}, ["kgc"] = {"Kasseng"}, ["kgd"] = {"Kataang"}, ["kgh"] = {"Upper Tanudan Kalinga"}, ["kgm"] = {"Karipúna"}, ["kjf"] = {"Khalaj [Indo-Iranian]"}, ["koj"] = {"Sara Dunjo"}, ["kox"] = {"Coxima"}, ["kpp"] = {"Paku Karen"}, ["krm"] = {"Krim"}, ["ksa"] = {"Shuwa-Zamani"}, ["ktr"] = {"Kota Marudu Tinagas"}, ["kvs"] = {"Kunggara"}, ["kwq"] = {"Kwak"}, ["kxe"] = {"Kakihum"}, ["kxl"] = {"Nepali Kurux"}, ["kxu"] = {"Kui (India)"}, ["kzh"] = {"Kenuzi-Dongola"}, ["kzj"] = {"Coastal Kadazan"}, ["kzt"] = {"Tambunan Dusun"}, ["lak"] = {"Laka (Nigeria)"}, ["lba"] = {"Lui"}, ["leg"] = {"Lengua"}, ["lii"] = {"Lingkhim"}, ["llo"] = {"Khlor"}, ["lmm"] = {"Lamam"}, ["lmz"] = {"Lumbee"}, ["lno"] = {"Lango (South Sudan)"}, ["lsg"] = {"Lyons Sign Language"}, ["meg"] = {"Mea"}, ["mgx"] = {"Omati"}, ["mhh"] = {"Maskoy Pidgin"}, ["mja"] = {"Mahei"}, ["mld"] = {"Malakhel"}, ["mnt"] = {"Maykulan"}, ["mof"] = {"Mohegan-Montauk-Narragansett"}, ["mst"] = {"Cataelano Mandaya"}, ["mvm"] = {"Muya"}, ["mwd"] = {"Mudbura"}, ["mwj"] = {"Maligo"}, ["mwx"] = {"Mediak"}, ["mwy"] = {"Mosiro"}, ["myd"] = {"Maramba"}, ["myi"] = {"Mina (India)"}, ["myq"] = {"Forest Maninka"}, ["myt"] = {"Sangab Mandaya"}, ["nad"] = {"Nijadali"}, ["nbf"] = {"Naxi"}, ["nbx"] = {"Ngura"}, ["ncp"] = {"Ndaktup"}, ["ngo"] = {"Ngoni"}, ["nln"] = {"Durango Nahuatl"}, ["nlr"] = {"Ngarla"}, ["nns"] = {"Ningye"}, ["nnx"] = {"Ngong"}, ["nom"] = {"Nocamán"}, ["noo"] = {"Nootka"}, ["nts"] = {"Natagaimas"}, ["nxu"] = {"Narau"}, ["ome"] = {"Omejes"}, ["oun"] = {"ǃOǃung"}, ["pat"] = {"Papitalai"}, ["pbz"] = {"Palu"}, ["pcr"] = {"Panang"}, ["pgy"] = {"Pongyong"}, ["pii"] = {"Pini"}, ["plj"] = {"Polci"}, ["plp"] = {"Palpa"}, ["pmc"] = {"Palumata"}, ["pmk"] = {"Pamlico"}, ["pmu"] = {"Mirpur Panjabi"}, ["pod"] = {"Ponares"}, ["ppa"] = {"Pao"}, ["ppr"] = {"Piru"}, ["prb"] = {"Lua'"}, ["prp"] = {"Parsi"}, ["pry"] = {"Pray 3"}, ["puk"] = {"Pu Ko"}, ["puz"] = {"Purum Naga"}, ["rie"] = {"Rien"}, ["rmr"] = {"Caló"}, ["rna"] = {"Runa"}, ["rsi"] = {"Rennellese Sign Language"}, ["sap"] = {"Sanapaná"}, ["sca"] = {"Sansu"}, ["sdm"] = {"Semandang"}, ["sgl"] = {"Sanglechi-Ishkashimi"}, ["sgo"] = {"Songa"}, ["skk"] = {"Sok"}, ["slq"] = {"Salchuq"}, ["smd"] = {"Sama"}, ["snb"] = {"Sebuyau"}, ["snh"] = {"Shinabo"}, ["sul"] = {"Surigaonon"}, ["sum"] = {"Sumo-Mayangna"}, ["svr"] = {"Savara"}, ["szd"] = {"Seru"}, ["tbb"] = {"Tapeba"}, ["tdu"] = {"Tempasuk Dusun"}, ["tgg"] = {"Tangga"}, ["thc"] = {"Tai Hang Tong"}, ["thw"] = {"Thudam"}, ["thx"] = {"The"}, ["tid"] = {"Tidong"}, ["tie"] = {"Tingal"}, ["tkk"] = {"Takpa"}, ["tlw"] = {"South Wemale"}, ["tmk"] = {"Northwestern Tamang"}, ["tmp"] = {"Tai Mène"}, ["tne"] = {"Tinoc Kallahan"}, ["tnf"] = {"Tangshewi"}, ["toe"] = {"Tomedes"}, ["tpw"] = {"Tupí"}, ["tsf"] = {"Southwestern Tamang"}, ["unp"] = {"Worora"}, ["uok"] = {"Uokha"}, ["uun"] = {"Kulon-Pazeh"}, ["vki"] = {"Ija-Zuba"}, ["wgw"] = {"Wagawaga"}, ["wit"] = {"Wintu"}, ["wiw"] = {"Wirangu"}, ["wra"] = {"Warapu"}, ["wrd"] = {"Warduji"}, ["wya"] = {"Wyandot"}, ["xba"] = {"Kamba (Brazil)"}, ["xbx"] = {"Kabixí"}, ["xia"] = {"Xiandao"}, ["xip"] = {"Xipináwa"}, ["xkh"] = {"Karahawyana"}, ["xrq"] = {"Karranga"}, ["xss"] = {"Assan"}, ["xtz"] = {"Tasmanian"}, ["ybd"] = {"Yangbye"}, ["yds"] = {"Yiddish Sign Language"}, ["yen"] = {"Yendang"}, ["yiy"] = {"Yir Yoront"}, ["yma"] = {"Yamphe"}, ["ymt"] = {"Mator-Taygi-Karagas"}, ["ynh"] = {"Yangho"}, ["yos"] = {"Yos"}, ["yri"] = {"Yarí"}, ["yuu"] = {"Yugh"}, ["zir"] = {"Ziriya"}, ["zkb"] = {"Koibal"}, ["zua"] = {"Zeem"} } return { active = active, deprecated = deprecated, } 90939c58de6a6d2fcd35fcf808d04acfa67bc8fd Module:Language/data/iana scripts 828 241 706 2023-05-28T16:32:45Z wikipedia>Trappist the monk 0 update to 2023-05-11 data; Scribunto text/plain -- File-Date: 2023-05-11 return { ["Adlm"] = {"Adlam"}, ["Afak"] = {"Afaka"}, ["Aghb"] = {"Caucasian Albanian"}, ["Ahom"] = {"Ahom", "Tai Ahom"}, ["Arab"] = {"Arabic"}, ["Aran"] = {"Arabic (Nastaliq variant)"}, ["Armi"] = {"Imperial Aramaic"}, ["Armn"] = {"Armenian"}, ["Avst"] = {"Avestan"}, ["Bali"] = {"Balinese"}, ["Bamu"] = {"Bamum"}, ["Bass"] = {"Bassa Vah"}, ["Batk"] = {"Batak"}, ["Beng"] = {"Bengali", "Bangla"}, ["Bhks"] = {"Bhaiksuki"}, ["Blis"] = {"Blissymbols"}, ["Bopo"] = {"Bopomofo"}, ["Brah"] = {"Brahmi"}, ["Brai"] = {"Braille"}, ["Bugi"] = {"Buginese"}, ["Buhd"] = {"Buhid"}, ["Cakm"] = {"Chakma"}, ["Cans"] = {"Unified Canadian Aboriginal Syllabics"}, ["Cari"] = {"Carian"}, ["Cham"] = {"Cham"}, ["Cher"] = {"Cherokee"}, ["Chrs"] = {"Chorasmian"}, ["Cirt"] = {"Cirth"}, ["Copt"] = {"Coptic"}, ["Cpmn"] = {"Cypro-Minoan"}, ["Cprt"] = {"Cypriot syllabary"}, ["Cyrl"] = {"Cyrillic"}, ["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"}, ["Deva"] = {"Devanagari", "Nagari"}, ["Diak"] = {"Dives Akuru"}, ["Dogr"] = {"Dogra"}, ["Dsrt"] = {"Deseret", "Mormon"}, ["Dupl"] = {"Duployan shorthand", "Duployan stenography"}, ["Egyd"] = {"Egyptian demotic"}, ["Egyh"] = {"Egyptian hieratic"}, ["Egyp"] = {"Egyptian hieroglyphs"}, ["Elba"] = {"Elbasan"}, ["Elym"] = {"Elymaic"}, ["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"}, ["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"}, ["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"}, ["Glag"] = {"Glagolitic"}, ["Gong"] = {"Gunjala Gondi"}, ["Gonm"] = {"Masaram Gondi"}, ["Goth"] = {"Gothic"}, ["Gran"] = {"Grantha"}, ["Grek"] = {"Greek"}, ["Gujr"] = {"Gujarati"}, ["Guru"] = {"Gurmukhi"}, ["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"}, ["Hang"] = {"Hangul", "Hangŭl", "Hangeul"}, ["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"}, ["Hano"] = {"Hanunoo", "Hanunóo"}, ["Hans"] = {"Han (Simplified variant)"}, ["Hant"] = {"Han (Traditional variant)"}, ["Hatr"] = {"Hatran"}, ["Hebr"] = {"Hebrew"}, ["Hira"] = {"Hiragana"}, ["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"}, ["Hmng"] = {"Pahawh Hmong"}, ["Hmnp"] = {"Nyiakeng Puachue Hmong"}, ["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"}, ["Hung"] = {"Old Hungarian", "Hungarian Runic"}, ["Inds"] = {"Indus", "Harappan"}, ["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"}, ["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"}, ["Java"] = {"Javanese"}, ["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"}, ["Jurc"] = {"Jurchen"}, ["Kali"] = {"Kayah Li"}, ["Kana"] = {"Katakana"}, ["Kawi"] = {"Kawi"}, ["Khar"] = {"Kharoshthi"}, ["Khmr"] = {"Khmer"}, ["Khoj"] = {"Khojki"}, ["Kitl"] = {"Khitan large script"}, ["Kits"] = {"Khitan small script"}, ["Knda"] = {"Kannada"}, ["Kore"] = {"Korean (alias for Hangul + Han)"}, ["Kpel"] = {"Kpelle"}, ["Kthi"] = {"Kaithi"}, ["Lana"] = {"Tai Tham", "Lanna"}, ["Laoo"] = {"Lao"}, ["Latf"] = {"Latin (Fraktur variant)"}, ["Latg"] = {"Latin (Gaelic variant)"}, ["Latn"] = {"Latin"}, ["Leke"] = {"Leke"}, ["Lepc"] = {"Lepcha", "Róng"}, ["Limb"] = {"Limbu"}, ["Lina"] = {"Linear A"}, ["Linb"] = {"Linear B"}, ["Lisu"] = {"Lisu", "Fraser"}, ["Loma"] = {"Loma"}, ["Lyci"] = {"Lycian"}, ["Lydi"] = {"Lydian"}, ["Mahj"] = {"Mahajani"}, ["Maka"] = {"Makasar"}, ["Mand"] = {"Mandaic", "Mandaean"}, ["Mani"] = {"Manichaean"}, ["Marc"] = {"Marchen"}, ["Maya"] = {"Mayan hieroglyphs"}, ["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"}, ["Mend"] = {"Mende Kikakui"}, ["Merc"] = {"Meroitic Cursive"}, ["Mero"] = {"Meroitic Hieroglyphs"}, ["Mlym"] = {"Malayalam"}, ["Modi"] = {"Modi", "Moḍī"}, ["Mong"] = {"Mongolian"}, ["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"}, ["Mroo"] = {"Mro", "Mru"}, ["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"}, ["Mult"] = {"Multani"}, ["Mymr"] = {"Myanmar", "Burmese"}, ["Nagm"] = {"Nag Mundari"}, ["Nand"] = {"Nandinagari"}, ["Narb"] = {"Old North Arabian", "Ancient North Arabian"}, ["Nbat"] = {"Nabataean"}, ["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"}, ["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"}, ["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"}, ["Nkoo"] = {"N’Ko", "N'Ko"}, ["Nshu"] = {"Nüshu"}, ["Ogam"] = {"Ogham"}, ["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"}, ["Orkh"] = {"Old Turkic", "Orkhon Runic"}, ["Orya"] = {"Oriya", "Odia"}, ["Osge"] = {"Osage"}, ["Osma"] = {"Osmanya"}, ["Ougr"] = {"Old Uyghur"}, ["Palm"] = {"Palmyrene"}, ["Pauc"] = {"Pau Cin Hau"}, ["Pcun"] = {"Proto-Cuneiform"}, ["Pelm"] = {"Proto-Elamite"}, ["Perm"] = {"Old Permic"}, ["Phag"] = {"Phags-pa"}, ["Phli"] = {"Inscriptional Pahlavi"}, ["Phlp"] = {"Psalter Pahlavi"}, ["Phlv"] = {"Book Pahlavi"}, ["Phnx"] = {"Phoenician"}, ["Piqd"] = {"Klingon (KLI pIqaD)"}, ["Plrd"] = {"Miao", "Pollard"}, ["Prti"] = {"Inscriptional Parthian"}, ["Psin"] = {"Proto-Sinaitic"}, ["Ranj"] = {"Ranjana"}, ["Rjng"] = {"Rejang", "Redjang", "Kaganga"}, ["Rohg"] = {"Hanifi Rohingya"}, ["Roro"] = {"Rongorongo"}, ["Runr"] = {"Runic"}, ["Samr"] = {"Samaritan"}, ["Sara"] = {"Sarati"}, ["Sarb"] = {"Old South Arabian"}, ["Saur"] = {"Saurashtra"}, ["Sgnw"] = {"SignWriting"}, ["Shaw"] = {"Shavian", "Shaw"}, ["Shrd"] = {"Sharada", "Śāradā"}, ["Shui"] = {"Shuishu"}, ["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"}, ["Sind"] = {"Khudawadi", "Sindhi"}, ["Sinh"] = {"Sinhala"}, ["Sogd"] = {"Sogdian"}, ["Sogo"] = {"Old Sogdian"}, ["Sora"] = {"Sora Sompeng"}, ["Soyo"] = {"Soyombo"}, ["Sund"] = {"Sundanese"}, ["Sunu"] = {"Sunuwar"}, ["Sylo"] = {"Syloti Nagri"}, ["Syrc"] = {"Syriac"}, ["Syre"] = {"Syriac (Estrangelo variant)"}, ["Syrj"] = {"Syriac (Western variant)"}, ["Syrn"] = {"Syriac (Eastern variant)"}, ["Tagb"] = {"Tagbanwa"}, ["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"}, ["Tale"] = {"Tai Le"}, ["Talu"] = {"New Tai Lue"}, ["Taml"] = {"Tamil"}, ["Tang"] = {"Tangut"}, ["Tavt"] = {"Tai Viet"}, ["Telu"] = {"Telugu"}, ["Teng"] = {"Tengwar"}, ["Tfng"] = {"Tifinagh", "Berber"}, ["Tglg"] = {"Tagalog", "Baybayin", "Alibata"}, ["Thaa"] = {"Thaana"}, ["Thai"] = {"Thai"}, ["Tibt"] = {"Tibetan"}, ["Tirh"] = {"Tirhuta"}, ["Tnsa"] = {"Tangsa"}, ["Toto"] = {"Toto"}, ["Ugar"] = {"Ugaritic"}, ["Vaii"] = {"Vai"}, ["Visp"] = {"Visible Speech"}, ["Vith"] = {"Vithkuqi"}, ["Wara"] = {"Warang Citi", "Varang Kshiti"}, ["Wcho"] = {"Wancho"}, ["Wole"] = {"Woleai"}, ["Xpeo"] = {"Old Persian"}, ["Xsux"] = {"Sumero-Akkadian cuneiform"}, ["Yezi"] = {"Yezidi"}, ["Yiii"] = {"Yi"}, ["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"}, ["Zinh"] = {"Code for inherited script"}, ["Zmth"] = {"Mathematical notation"}, ["Zsye"] = {"Symbols (Emoji variant)"}, ["Zsym"] = {"Symbols"}, ["Zxxx"] = {"Code for unwritten documents"}, ["Zyyy"] = {"Code for undetermined script"}, ["Zzzz"] = {"Code for uncoded script"} } 279ed2c472c8154d84ff2ea23c214e64c168d7e9 Module:Language/data/iana regions 828 242 708 2023-05-28T16:32:47Z wikipedia>Trappist the monk 0 update to 2023-05-11 data; Scribunto text/plain -- File-Date: 2023-05-11 return { ["AC"] = {"Ascension Island"}, ["AD"] = {"Andorra"}, ["AE"] = {"United Arab Emirates"}, ["AF"] = {"Afghanistan"}, ["AG"] = {"Antigua and Barbuda"}, ["AI"] = {"Anguilla"}, ["AL"] = {"Albania"}, ["AM"] = {"Armenia"}, ["AO"] = {"Angola"}, ["AQ"] = {"Antarctica"}, ["AR"] = {"Argentina"}, ["AS"] = {"American Samoa"}, ["AT"] = {"Austria"}, ["AU"] = {"Australia"}, ["AW"] = {"Aruba"}, ["AX"] = {"Åland Islands"}, ["AZ"] = {"Azerbaijan"}, ["BA"] = {"Bosnia and Herzegovina"}, ["BB"] = {"Barbados"}, ["BD"] = {"Bangladesh"}, ["BE"] = {"Belgium"}, ["BF"] = {"Burkina Faso"}, ["BG"] = {"Bulgaria"}, ["BH"] = {"Bahrain"}, ["BI"] = {"Burundi"}, ["BJ"] = {"Benin"}, ["BL"] = {"Saint Barthélemy"}, ["BM"] = {"Bermuda"}, ["BN"] = {"Brunei Darussalam"}, ["BO"] = {"Bolivia"}, ["BQ"] = {"Bonaire, Sint Eustatius and Saba"}, ["BR"] = {"Brazil"}, ["BS"] = {"Bahamas"}, ["BT"] = {"Bhutan"}, ["BV"] = {"Bouvet Island"}, ["BW"] = {"Botswana"}, ["BY"] = {"Belarus"}, ["BZ"] = {"Belize"}, ["CA"] = {"Canada"}, ["CC"] = {"Cocos (Keeling) Islands"}, ["CD"] = {"The Democratic Republic of the Congo"}, ["CF"] = {"Central African Republic"}, ["CG"] = {"Congo"}, ["CH"] = {"Switzerland"}, ["CI"] = {"Côte d'Ivoire"}, ["CK"] = {"Cook Islands"}, ["CL"] = {"Chile"}, ["CM"] = {"Cameroon"}, ["CN"] = {"China"}, ["CO"] = {"Colombia"}, ["CP"] = {"Clipperton Island"}, ["CQ"] = {"Sark"}, ["CR"] = {"Costa Rica"}, ["CU"] = {"Cuba"}, ["CV"] = {"Cabo Verde", "Cape Verde"}, ["CW"] = {"Curaçao"}, ["CX"] = {"Christmas Island"}, ["CY"] = {"Cyprus"}, ["CZ"] = {"Czechia", "Czech Republic"}, ["DE"] = {"Germany"}, ["DG"] = {"Diego Garcia"}, ["DJ"] = {"Djibouti"}, ["DK"] = {"Denmark"}, ["DM"] = {"Dominica"}, ["DO"] = {"Dominican Republic"}, ["DZ"] = {"Algeria"}, ["EA"] = {"Ceuta, Melilla"}, ["EC"] = {"Ecuador"}, ["EE"] = {"Estonia"}, ["EG"] = {"Egypt"}, ["EH"] = {"Western Sahara"}, ["ER"] = {"Eritrea"}, ["ES"] = {"Spain"}, ["ET"] = {"Ethiopia"}, ["EU"] = {"European Union"}, ["EZ"] = {"Eurozone"}, ["FI"] = {"Finland"}, ["FJ"] = {"Fiji"}, ["FK"] = {"Falkland Islands (Malvinas)"}, ["FM"] = {"Federated States of Micronesia"}, ["FO"] = {"Faroe Islands"}, ["FR"] = {"France"}, ["GA"] = {"Gabon"}, ["GB"] = {"United Kingdom"}, ["GD"] = {"Grenada"}, ["GE"] = {"Georgia"}, ["GF"] = {"French Guiana"}, ["GG"] = {"Guernsey"}, ["GH"] = {"Ghana"}, ["GI"] = {"Gibraltar"}, ["GL"] = {"Greenland"}, ["GM"] = {"Gambia"}, ["GN"] = {"Guinea"}, ["GP"] = {"Guadeloupe"}, ["GQ"] = {"Equatorial Guinea"}, ["GR"] = {"Greece"}, ["GS"] = {"South Georgia and the South Sandwich Islands"}, ["GT"] = {"Guatemala"}, ["GU"] = {"Guam"}, ["GW"] = {"Guinea-Bissau"}, ["GY"] = {"Guyana"}, ["HK"] = {"Hong Kong"}, ["HM"] = {"Heard Island and McDonald Islands"}, ["HN"] = {"Honduras"}, ["HR"] = {"Croatia"}, ["HT"] = {"Haiti"}, ["HU"] = {"Hungary"}, ["IC"] = {"Canary Islands"}, ["ID"] = {"Indonesia"}, ["IE"] = {"Ireland"}, ["IL"] = {"Israel"}, ["IM"] = {"Isle of Man"}, ["IN"] = {"India"}, ["IO"] = {"British Indian Ocean Territory"}, ["IQ"] = {"Iraq"}, ["IR"] = {"Islamic Republic of Iran"}, ["IS"] = {"Iceland"}, ["IT"] = {"Italy"}, ["JE"] = {"Jersey"}, ["JM"] = {"Jamaica"}, ["JO"] = {"Jordan"}, ["JP"] = {"Japan"}, ["KE"] = {"Kenya"}, ["KG"] = {"Kyrgyzstan"}, ["KH"] = {"Cambodia"}, ["KI"] = {"Kiribati"}, ["KM"] = {"Comoros"}, ["KN"] = {"Saint Kitts and Nevis"}, ["KP"] = {"Democratic People's Republic of Korea"}, ["KR"] = {"Republic of Korea"}, ["KW"] = {"Kuwait"}, ["KY"] = {"Cayman Islands"}, ["KZ"] = {"Kazakhstan"}, ["LA"] = {"Lao People's Democratic Republic"}, ["LB"] = {"Lebanon"}, ["LC"] = {"Saint Lucia"}, ["LI"] = {"Liechtenstein"}, ["LK"] = {"Sri Lanka"}, ["LR"] = {"Liberia"}, ["LS"] = {"Lesotho"}, ["LT"] = {"Lithuania"}, ["LU"] = {"Luxembourg"}, ["LV"] = {"Latvia"}, ["LY"] = {"Libya"}, ["MA"] = {"Morocco"}, ["MC"] = {"Monaco"}, ["MD"] = {"Moldova"}, ["ME"] = {"Montenegro"}, ["MF"] = {"Saint Martin (French part)"}, ["MG"] = {"Madagascar"}, ["MH"] = {"Marshall Islands"}, ["MK"] = {"North Macedonia"}, ["ML"] = {"Mali"}, ["MM"] = {"Myanmar"}, ["MN"] = {"Mongolia"}, ["MO"] = {"Macao"}, ["MP"] = {"Northern Mariana Islands"}, ["MQ"] = {"Martinique"}, ["MR"] = {"Mauritania"}, ["MS"] = {"Montserrat"}, ["MT"] = {"Malta"}, ["MU"] = {"Mauritius"}, ["MV"] = {"Maldives"}, ["MW"] = {"Malawi"}, ["MX"] = {"Mexico"}, ["MY"] = {"Malaysia"}, ["MZ"] = {"Mozambique"}, ["NA"] = {"Namibia"}, ["NC"] = {"New Caledonia"}, ["NE"] = {"Niger"}, ["NF"] = {"Norfolk Island"}, ["NG"] = {"Nigeria"}, ["NI"] = {"Nicaragua"}, ["NL"] = {"Netherlands"}, ["NO"] = {"Norway"}, ["NP"] = {"Nepal"}, ["NR"] = {"Nauru"}, ["NU"] = {"Niue"}, ["NZ"] = {"New Zealand"}, ["OM"] = {"Oman"}, ["PA"] = {"Panama"}, ["PE"] = {"Peru"}, ["PF"] = {"French Polynesia"}, ["PG"] = {"Papua New Guinea"}, ["PH"] = {"Philippines"}, ["PK"] = {"Pakistan"}, ["PL"] = {"Poland"}, ["PM"] = {"Saint Pierre and Miquelon"}, ["PN"] = {"Pitcairn"}, ["PR"] = {"Puerto Rico"}, ["PS"] = {"State of Palestine"}, ["PT"] = {"Portugal"}, ["PW"] = {"Palau"}, ["PY"] = {"Paraguay"}, ["QA"] = {"Qatar"}, ["RE"] = {"Réunion"}, ["RO"] = {"Romania"}, ["RS"] = {"Serbia"}, ["RU"] = {"Russian Federation"}, ["RW"] = {"Rwanda"}, ["SA"] = {"Saudi Arabia"}, ["SB"] = {"Solomon Islands"}, ["SC"] = {"Seychelles"}, ["SD"] = {"Sudan"}, ["SE"] = {"Sweden"}, ["SG"] = {"Singapore"}, ["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"}, ["SI"] = {"Slovenia"}, ["SJ"] = {"Svalbard and Jan Mayen"}, ["SK"] = {"Slovakia"}, ["SL"] = {"Sierra Leone"}, ["SM"] = {"San Marino"}, ["SN"] = {"Senegal"}, ["SO"] = {"Somalia"}, ["SR"] = {"Suriname"}, ["SS"] = {"South Sudan"}, ["ST"] = {"Sao Tome and Principe"}, ["SV"] = {"El Salvador"}, ["SX"] = {"Sint Maarten (Dutch part)"}, ["SY"] = {"Syrian Arab Republic"}, ["SZ"] = {"Eswatini", "eSwatini", "Swaziland"}, ["TA"] = {"Tristan da Cunha"}, ["TC"] = {"Turks and Caicos Islands"}, ["TD"] = {"Chad"}, ["TF"] = {"French Southern Territories"}, ["TG"] = {"Togo"}, ["TH"] = {"Thailand"}, ["TJ"] = {"Tajikistan"}, ["TK"] = {"Tokelau"}, ["TL"] = {"Timor-Leste"}, ["TM"] = {"Turkmenistan"}, ["TN"] = {"Tunisia"}, ["TO"] = {"Tonga"}, ["TR"] = {"Türkiye", "Turkey"}, ["TT"] = {"Trinidad and Tobago"}, ["TV"] = {"Tuvalu"}, ["TW"] = {"Taiwan, Province of China"}, ["TZ"] = {"United Republic of Tanzania"}, ["UA"] = {"Ukraine"}, ["UG"] = {"Uganda"}, ["UM"] = {"United States Minor Outlying Islands"}, ["UN"] = {"United Nations"}, ["US"] = {"United States"}, ["UY"] = {"Uruguay"}, ["UZ"] = {"Uzbekistan"}, ["VA"] = {"Holy See (Vatican City State)"}, ["VC"] = {"Saint Vincent and the Grenadines"}, ["VE"] = {"Venezuela"}, ["VG"] = {"British Virgin Islands"}, ["VI"] = {"U.S. Virgin Islands"}, ["VN"] = {"Viet Nam"}, ["VU"] = {"Vanuatu"}, ["WF"] = {"Wallis and Futuna"}, ["WS"] = {"Samoa"}, ["YE"] = {"Yemen"}, ["YT"] = {"Mayotte"}, ["ZA"] = {"South Africa"}, ["ZM"] = {"Zambia"}, ["ZW"] = {"Zimbabwe"}, ["001"] = {"World"}, ["002"] = {"Africa"}, ["003"] = {"North America"}, ["005"] = {"South America"}, ["009"] = {"Oceania"}, ["011"] = {"Western Africa"}, ["013"] = {"Central America"}, ["014"] = {"Eastern Africa"}, ["015"] = {"Northern Africa"}, ["017"] = {"Middle Africa"}, ["018"] = {"Southern Africa"}, ["019"] = {"Americas"}, ["021"] = {"Northern America"}, ["029"] = {"Caribbean"}, ["030"] = {"Eastern Asia"}, ["034"] = {"Southern Asia"}, ["035"] = {"South-Eastern Asia"}, ["039"] = {"Southern Europe"}, ["053"] = {"Australia and New Zealand"}, ["054"] = {"Melanesia"}, ["057"] = {"Micronesia"}, ["061"] = {"Polynesia"}, ["142"] = {"Asia"}, ["143"] = {"Central Asia"}, ["145"] = {"Western Asia"}, ["150"] = {"Europe"}, ["151"] = {"Eastern Europe"}, ["154"] = {"Northern Europe"}, ["155"] = {"Western Europe"}, ["202"] = {"Sub-Saharan Africa"}, ["419"] = {"Latin America and the Caribbean"} } 9b8ad87e9a14bff745205a082bcd25cbcd8713ee Module:Language/data/iana variants 828 243 710 2023-05-28T16:32:49Z wikipedia>Trappist the monk 0 update to 2023-05-11 data; Scribunto text/plain -- File-Date: 2023-05-11 return { ["1606nict"] = { ["descriptions"] = {"Late Middle French (to 1606)"}, ["prefixes"] = {"frm"}, }, ["1694acad"] = { ["descriptions"] = {"Early Modern French"}, ["prefixes"] = {"fr"}, }, ["1901"] = { ["descriptions"] = {"Traditional German orthography"}, ["prefixes"] = {"de"}, }, ["1959acad"] = { ["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"}, ["prefixes"] = {"be"}, }, ["1994"] = { ["descriptions"] = {"Standardized Resian orthography"}, ["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"}, }, ["1996"] = { ["descriptions"] = {"German orthography of 1996"}, ["prefixes"] = {"de"}, }, ["abl1943"] = { ["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"}, ["prefixes"] = {"pt-br"}, }, ["akuapem"] = { ["descriptions"] = {"Akuapem Twi"}, ["prefixes"] = {"tw"}, }, ["alalc97"] = { ["descriptions"] = {"ALA-LC Romanization, 1997 edition"}, ["prefixes"] = {}, }, ["aluku"] = { ["descriptions"] = {"Aluku dialect", "Boni dialect"}, ["prefixes"] = {"djk"}, }, ["ao1990"] = { ["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"}, ["prefixes"] = {"pt", "gl"}, }, ["aranes"] = { ["descriptions"] = {"Aranese"}, ["prefixes"] = {"oc"}, }, ["arkaika"] = { ["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"}, ["prefixes"] = {"eo"}, }, ["asante"] = { ["descriptions"] = {"Asante Twi", "Ashanti Twi"}, ["prefixes"] = {"tw"}, }, ["auvern"] = { ["descriptions"] = {"Auvergnat"}, ["prefixes"] = {"oc"}, }, ["baku1926"] = { ["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"}, ["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"}, }, ["balanka"] = { ["descriptions"] = {"The Balanka dialect of Anii"}, ["prefixes"] = {"blo"}, }, ["barla"] = { ["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["basiceng"] = { ["descriptions"] = {"Basic English"}, ["prefixes"] = {"en"}, }, ["bauddha"] = { ["descriptions"] = {"Buddhist Hybrid Sanskrit"}, ["prefixes"] = {"sa"}, }, ["bciav"] = { ["descriptions"] = {"BCI Blissymbolics AV"}, ["prefixes"] = {"zbl"}, }, ["bcizbl"] = { ["descriptions"] = {"BCI Blissymbolics"}, ["prefixes"] = {"zbl"}, }, ["biscayan"] = { ["descriptions"] = {"Biscayan dialect of Basque"}, ["prefixes"] = {"eu"}, }, ["biske"] = { ["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["bohoric"] = { ["descriptions"] = {"Slovene in Bohorič alphabet"}, ["prefixes"] = {"sl"}, }, ["boont"] = { ["descriptions"] = {"Boontling"}, ["prefixes"] = {"en"}, }, ["bornholm"] = { ["descriptions"] = {"Bornholmsk"}, ["prefixes"] = {"da"}, }, ["cisaup"] = { ["descriptions"] = {"Cisalpine"}, ["prefixes"] = {"oc"}, }, ["colb1945"] = { ["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"}, ["prefixes"] = {"pt"}, }, ["cornu"] = { ["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"}, ["prefixes"] = {"en"}, }, ["creiss"] = { ["descriptions"] = {"Occitan variants of the Croissant area"}, ["prefixes"] = {"oc"}, }, ["dajnko"] = { ["descriptions"] = {"Slovene in Dajnko alphabet"}, ["prefixes"] = {"sl"}, }, ["ekavsk"] = { ["descriptions"] = {"Serbian with Ekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["emodeng"] = { ["descriptions"] = {"Early Modern English (1500-1700)"}, ["prefixes"] = {"en"}, }, ["fonipa"] = { ["descriptions"] = {"International Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonkirsh"] = { ["descriptions"] = {"Kirshenbaum Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonnapa"] = { ["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"}, ["prefixes"] = {}, }, ["fonupa"] = { ["descriptions"] = {"Uralic Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonxsamp"] = { ["descriptions"] = {"X-SAMPA transcription"}, ["prefixes"] = {}, }, ["gallo"] = { ["descriptions"] = {"Gallo"}, ["prefixes"] = {"fr"}, }, ["gascon"] = { ["descriptions"] = {"Gascon"}, ["prefixes"] = {"oc"}, }, ["grclass"] = { ["descriptions"] = {"Classical Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["grital"] = { ["descriptions"] = {"Italian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"}, }, ["grmistr"] = { ["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["hepburn"] = { ["descriptions"] = {"Hepburn romanization"}, ["prefixes"] = {"ja-latn"}, }, ["hognorsk"] = { ["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"}, ["prefixes"] = {"nn"}, }, ["hsistemo"] = { ["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, }, ["ijekavsk"] = { ["descriptions"] = {"Serbian with Ijekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["itihasa"] = { ["descriptions"] = {"Epic Sanskrit"}, ["prefixes"] = {"sa"}, }, ["ivanchov"] = { ["descriptions"] = {"Bulgarian in 1899 orthography"}, ["prefixes"] = {"bg"}, }, ["jauer"] = { ["descriptions"] = {"Jauer dialect of Romansh"}, ["prefixes"] = {"rm"}, }, ["jyutping"] = { ["descriptions"] = {"Jyutping Cantonese Romanization"}, ["prefixes"] = {"yue"}, }, ["kkcor"] = { ["descriptions"] = {"Common Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["kociewie"] = { ["descriptions"] = {"The Kociewie dialect of Polish"}, ["prefixes"] = {"pl"}, }, ["kscor"] = { ["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"}, ["prefixes"] = {"kw"}, }, ["laukika"] = { ["descriptions"] = {"Classical Sanskrit"}, ["prefixes"] = {"sa"}, }, ["lemosin"] = { ["descriptions"] = {"Limousin"}, ["prefixes"] = {"oc"}, }, ["lengadoc"] = { ["descriptions"] = {"Languedocien"}, ["prefixes"] = {"oc"}, }, ["lipaw"] = { ["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["ltg1929"] = { ["descriptions"] = {"The Latgalian language orthography codified in 1929"}, ["prefixes"] = {"ltg"}, }, ["ltg2007"] = { ["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"}, ["prefixes"] = {"ltg"}, }, ["luna1918"] = { ["descriptions"] = {"Post-1917 Russian orthography"}, ["prefixes"] = {"ru"}, }, ["metelko"] = { ["descriptions"] = {"Slovene in Metelko alphabet"}, ["prefixes"] = {"sl"}, }, ["monoton"] = { ["descriptions"] = {"Monotonic Greek"}, ["prefixes"] = {"el"}, }, ["ndyuka"] = { ["descriptions"] = {"Ndyuka dialect", "Aukan dialect"}, ["prefixes"] = {"djk"}, }, ["nedis"] = { ["descriptions"] = {"Natisone dialect", "Nadiza dialect"}, ["prefixes"] = {"sl"}, }, ["newfound"] = { ["descriptions"] = {"Newfoundland English"}, ["prefixes"] = {"en-ca"}, }, ["nicard"] = { ["descriptions"] = {"Niçard"}, ["prefixes"] = {"oc"}, }, ["njiva"] = { ["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["nulik"] = { ["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"}, ["prefixes"] = {"vo"}, }, ["osojs"] = { ["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["oxendict"] = { ["descriptions"] = {"Oxford English Dictionary spelling"}, ["prefixes"] = {"en"}, }, ["pahawh2"] = { ["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh3"] = { ["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh4"] = { ["descriptions"] = {"Pahawh Hmong Final Version orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pamaka"] = { ["descriptions"] = {"Pamaka dialect"}, ["prefixes"] = {"djk"}, }, ["peano"] = { ["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"}, ["prefixes"] = {"la"}, }, ["petr1708"] = { ["descriptions"] = {"Petrine orthography"}, ["prefixes"] = {"ru"}, }, ["pinyin"] = { ["descriptions"] = {"Pinyin romanization"}, ["prefixes"] = {"zh-latn", "bo-latn"}, }, ["polyton"] = { ["descriptions"] = {"Polytonic Greek"}, ["prefixes"] = {"el"}, }, ["provenc"] = { ["descriptions"] = {"Provençal"}, ["prefixes"] = {"oc"}, }, ["puter"] = { ["descriptions"] = {"Puter idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["rigik"] = { ["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"}, ["prefixes"] = {"vo"}, }, ["rozaj"] = { ["descriptions"] = {"Resian", "Resianic", "Rezijan"}, ["prefixes"] = {"sl"}, }, ["rumgr"] = { ["descriptions"] = {"Rumantsch Grischun"}, ["prefixes"] = {"rm"}, }, ["scotland"] = { ["descriptions"] = {"Scottish Standard English"}, ["prefixes"] = {"en"}, }, ["scouse"] = { ["descriptions"] = {"Scouse"}, ["prefixes"] = {"en"}, }, ["simple"] = { ["descriptions"] = {"Simplified form"}, ["prefixes"] = {}, }, ["solba"] = { ["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["sotav"] = { ["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["spanglis"] = { ["descriptions"] = {"Spanglish"}, ["prefixes"] = {"en", "es"}, }, ["surmiran"] = { ["descriptions"] = {"Surmiran idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sursilv"] = { ["descriptions"] = {"Sursilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sutsilv"] = { ["descriptions"] = {"Sutsilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["synnejyl"] = { ["descriptions"] = {"Synnejysk", "South Jutish"}, ["prefixes"] = {"da"}, }, ["tarask"] = { ["descriptions"] = {"Belarusian in Taraskievica orthography"}, ["prefixes"] = {"be"}, }, ["tongyong"] = { ["descriptions"] = {"Tongyong Pinyin romanization"}, ["prefixes"] = {"zh-latn"}, }, ["tunumiit"] = { ["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"}, ["prefixes"] = {"kl"}, }, ["uccor"] = { ["descriptions"] = {"Unified Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ucrcor"] = { ["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ulster"] = { ["descriptions"] = {"Ulster dialect of Scots"}, ["prefixes"] = {"sco"}, }, ["unifon"] = { ["descriptions"] = {"Unifon phonetic alphabet"}, ["prefixes"] = {"en", "hup", "kyh", "tol", "yur"}, }, ["vaidika"] = { ["descriptions"] = {"Vedic Sanskrit"}, ["prefixes"] = {"sa"}, }, ["valencia"] = { ["descriptions"] = {"Valencian"}, ["prefixes"] = {"ca"}, }, ["vallader"] = { ["descriptions"] = {"Vallader idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["vecdruka"] = { ["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"}, ["prefixes"] = {"lv"}, }, ["vivaraup"] = { ["descriptions"] = {"Vivaro-Alpine"}, ["prefixes"] = {"oc"}, }, ["wadegile"] = { ["descriptions"] = {"Wade-Giles romanization"}, ["prefixes"] = {"zh-latn"}, }, ["xsistemo"] = { ["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, } } 6e18c8087ecffb70ab2722634deb5ede2d84fffa Module:Language/data/iana suppressed scripts 828 244 712 2023-05-28T16:32:52Z wikipedia>Trappist the monk 0 update to 2023-05-11 data; Scribunto text/plain -- File-Date: 2023-05-11 return { ["Arab"] = {"ar", "fa", "ps", "ur"}, ["Armn"] = {"hy"}, ["Beng"] = {"as", "bn"}, ["Blis"] = {"zbl"}, ["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"}, ["Deva"] = {"hi", "mr", "ne", "kok", "mai"}, ["Ethi"] = {"am", "ti"}, ["Geor"] = {"ka"}, ["Grek"] = {"el"}, ["Gujr"] = {"gu"}, ["Guru"] = {"pa"}, ["Hebr"] = {"he", "iw", "yi"}, ["Jpan"] = {"ja"}, ["Khmr"] = {"km"}, ["Knda"] = {"kn"}, ["Kore"] = {"ko"}, ["Laoo"] = {"lo"}, ["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo", "es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn", "gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb", "ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd", "nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn", "ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv", "sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb", "frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh", "tpi", "tvl"}, ["Mlym"] = {"ml"}, ["Mymr"] = {"my"}, ["Nkoo"] = {"nqo"}, ["Orya"] = {"or"}, ["Sinh"] = {"si"}, ["Taml"] = {"ta"}, ["Telu"] = {"te"}, ["Thaa"] = {"dv"}, ["Thai"] = {"th"}, ["Tibt"] = {"dz"} } fd9ca3f5beaba5fdfc149a8d24e63fa3a9768f4f Template:High-use 10 117 264 2023-05-30T09:39:48Z wikipedia>Lectonar 0 Changed protection settings for "[[Template:High-use]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) wikitext text/x-wiki {{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude> {{Documentation}} <!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! --> </noinclude> a3322d1bd47ac03df14fa2090855cff4fede9bc7 Module:High-use 828 119 270 2023-05-30T11:20:32Z wikipedia>Lectonar 0 Changed protection settings for "[[Module:High-use]]": [[WP:High-risk templates|High-risk template or module]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) Scribunto text/plain local p = {} -- _fetch looks at the "demo" argument. local _fetch = require('Module:Transclusion_count').fetch local yesno = require('Module:Yesno') function p.num(frame, count) if count == nil then if yesno(frame.args['fetch']) == false then if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end else count = _fetch(frame) end end -- Build output string local return_value = "" if count == nil then if frame.args[1] == "risk" then return_value = "a very large number of" else return_value = "many" end else -- Use 2 significant figures for smaller numbers and 3 for larger ones local sigfig = 2 if count >= 100000 then sigfig = 3 end -- Prepare to round to appropriate number of sigfigs local f = math.floor(math.log10(count)) - sigfig + 1 -- Round and insert "approximately" or "+" when appropriate if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then -- Round down return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) ) else -- Round to nearest return_value = string.format("approximately&#x20;%s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) ) end -- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5) if percent >= 1 then return_value = string.format("%s&#x20;pages, or roughly %s%% of all", return_value, percent) end end end return return_value end -- Actions if there is a large (greater than or equal to 100,000) transclusion count function p.risk(frame) local return_value = "" if frame.args[1] == "risk" then return_value = "risk" else local count = _fetch(frame) if count and count >= 100000 then return_value = "risk" end end return return_value end function p.text(frame, count) -- Only show the information about how this template gets updated if someone -- is actually editing the page and maybe trying to update the count. local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or '' if count == nil then if yesno(frame.args['fetch']) == false then if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end else count = _fetch(frame) end end local title = mw.title.getCurrentTitle() if title.subpageText == "doc" or title.subpageText == "sandbox" then title = title.basePageTitle end local systemMessages = frame.args['system'] if frame.args['system'] == '' then systemMessages = nil end -- This retrieves the project URL automatically to simplify localiation. local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format( mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'), mw.uri.encode(title.fullText), p.num(frame, count)) local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used '; if systemMessages then used_on_text = used_on_text .. systemMessages .. ((count and count > 2000) and ("''', and " .. templateCount) or ("'''")) else used_on_text = used_on_text .. templateCount .. "'''" end local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format( (mw.title.getCurrentTitle().namespace == 828 and "module" or "template"), title.fullText, title.fullText, mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage" ) local infoArg = frame.args["info"] ~= "" and frame.args["info"] if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then local info = systemMessages and '.<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or '.' if infoArg then info = info .. "<br />" .. infoArg end sandbox_text = info .. '<br /> To avoid major disruption' .. (count and count >= 100000 and ' and server load' or '') .. ', any changes should be tested in the ' .. sandbox_text .. 'The tested changes can be added to this page in a single edit. ' else sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') .. 'hanges may be widely noticed. Test changes in the ' .. sandbox_text end local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes ' if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"]) else discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText ) end return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text end function p.main(frame) local count = nil if yesno(frame.args['fetch']) == false then if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end else count = _fetch(frame) end local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]" local type_param = "style" local epilogue = '' if frame.args['system'] and frame.args['system'] ~= '' then image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]" type_param = "content" local nocat = frame:getParent().args['nocat'] or frame.args['nocat'] local categorise = (nocat == '' or not yesno(nocat)) if categorise then epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}') end elseif (frame.args[1] == "risk" or (count and count >= 100000)) then image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]" type_param = "content" end if frame.args["form"] == "editnotice" then return frame:expandTemplate{ title = 'editnotice', args = { ["image"] = image, ["text"] = p.text(frame, count), ["expiry"] = (frame.args["expiry"] or "") } } .. epilogue else return require('Module:Message box').main('ombox', { type = type_param, image = image, text = p.text(frame, count), expiry = (frame.args["expiry"] or "") }) .. epilogue end end return p 134551888e066954a89c109d2faa8af71a4454a4 Template:Blue 10 441 1331 2023-05-30T14:40:35Z mw>Hoo man 0 Reverted edits by [[Special:Contribs/2001:16A2:C15E:4BB2:8559:30FB:A2BE:4CD2|2001:16A2:C15E:4BB2:8559:30FB:A2BE:4CD2]] ([[User talk:2001:16A2:C15E:4BB2:8559:30FB:A2BE:4CD2|talk]]) to last version by कन्हाई प्रसाद चौरसिया wikitext text/x-wiki <span style="color:#0645AD;">{{{1}}}</span><noinclude>{{documentation}} [[Category:Formatting templates{{#translation:}}|{{PAGENAME}}]] </noinclude> 636ccfaac2c8947c9d036c2a6ac80aeb94f89713 Module:Transclusion count 828 120 272 2023-05-30T20:51:38Z wikipedia>Isabelle Belato 0 Changed protection settings for "[[Module:Transclusion count]]": [[WP:High-risk templates|Highly visible template]]; requested at [[WP:RfPP]] ([Edit=Require template editor access] (indefinite) [Move=Require template editor access] (indefinite)) Scribunto text/plain local p = {} function p.fetch(frame) local template = nil local return_value = nil -- Use demo parameter if it exists, otherswise use current template name local namespace = mw.title.getCurrentTitle().namespace if frame.args["demo"] and frame.args["demo"] ~= "" then template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","") elseif namespace == 10 then -- Template namespace template = mw.title.getCurrentTitle().text elseif namespace == 828 then -- Module namespace template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text) end -- If in template or module namespace, look up count in /data if template ~= nil then namespace = mw.title.new(template, "Template").namespace if namespace == 10 or namespace == 828 then template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end local index = mw.ustring.sub(mw.title.new(template).text,1,1) local status, data = pcall(function () return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other"))) end) if status then return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")]) end end end -- If database value doesn't exist, use value passed to template if return_value == nil and frame.args[1] ~= nil then local arg1=mw.ustring.match(frame.args[1], '[%d,]+') if arg1 and arg1 ~= '' then return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R')) end end return return_value end -- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]] function p.tabulate(frame) local list = {} for i = 65, 91 do local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i))) for name, count in pairs(data) do table.insert(list, {mw.title.new(name, "Template").fullText, count}) end end table.sort(list, function(a, b) return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2]) end) local lang = mw.getContentLanguage(); for i = 1, #list do list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2])) end return table.concat(list) end return p 000ef6bcbf7b66e727870b0c300c4009da300513 Module:Lang 828 237 698 2023-06-03T14:57:26Z wikipedia>Trappist the monk 0 sync from sandbox per [[Template_talk:Lang#Edit_request_3_June_2023|edit request]]; Scribunto text/plain --[=[ Lua support for the {{lang}}, {{lang-xx}}, and {{transl}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_latin() and is_rtl() local yesno = require ('Module:Yesno'); local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set( var ) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their html numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ validates |italic= or |italics= assigned values. When |italic= is set and has an acceptible assigned value, return the matching css font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptible assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or transl function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-xx}} depending on the individual template's requirements, 'italic' for {{transl}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-xx}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {['yes'] = 'italic', ['no'] = 'normal', ['unset'] = 'inherit', ['invert'] = 'invert', ['default'] = nil}; local count = 0 for _, arg in pairs {'italic', 'italics', 'i'} do if args[arg] then count = count + 1 end end if count > 1 then -- return nil and an error message if more than one is set return nil, 'only one of |italic=, |italics=, or |i= can be specified'; end return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-xx}} templates is to add categorization when the templates are used in mainspace. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack ]] local function in_array ( needle, haystack ) if needle == nil then return false; end for n,v in ipairs( haystack ) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ prettify ietf tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=) returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1 ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- ietf tag parts if not is_set (source) then return nil, nil, nil, nil, nil, 'missing language tag'; end local pattern = { -- table of tables holding acceptibe ietf tag patterns and short names of the ietf part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured ietf tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named ietf parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, table.concat ({'unrecognized language tag: ', source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, table.concat ({'unrecognized language code: ', code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, table.concat ({'Lang and lang-xx code promoted to ISO 639-1|', code})); table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, 'redundant script tag'; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, table.concat ({'unrecognized script: ', script, ' for code: ', code}); -- language code ok, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, table.concat ({'script: ', script, ' not supported for code: ', code}); -- language code ok, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, 'redundant region tag'; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, table.concat ({'unrecognized region: ', region, ' for code: ', code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, 'redundant variant tag'; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-script pair: ', code, '-', script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-region pair: ', code, '-', region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code: ', code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, table.concat ({'unrecognized private tag: ', private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args, template) local out = {}; local category; if 'Transl' == template then category = 'Transl'; else category = 'Lang and lang-xx' end table.insert (out, table.concat ({'[', args.text or 'undefined', '] '})); -- for error messages output args.text if available table.insert (out, table.concat ({'<span style=\"color:#d33\">Error: {{', template, '}}: '})); table.insert (out, msg); table.insert (out, table.concat ({' ([[:Category:', category, ' template errors|help]])'})); table.insert (out, '</span>'); if (0 == namespace or 10 == namespace) and not args.nocat then -- categorize in article space (and template space to take care of broken usages) table.insert (out, table.concat ({'[[Category:', category, ' template errors]]'})); end return table.concat (out); end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- adds <i> and </i> tags to list-item text or to implied <p>..</p> text. mixed not supported ]] local function div_markup_add (text, style) local implied_p = {}; if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics mediawiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each impled p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each impled p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in html markup. This because the lang= attibute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the html markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default html tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> html tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening html tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> html tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = table.concat ({language, ' text'}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = table.concat ({language, ' collective text'}); -- for collective languages else title_text = table.concat ({language, '-language text'}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] for English: [[Category:Articles containing explicitly cited English-language text]] for ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) local cat = {}; local retval; if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return table.concat ({'[[Category:Articles with text in ', language_name, ']]'}); end table.insert (cat, '[[Category:Articles containing '); if this_wiki_lang_tag == code then table.insert (cat, 'explicitly cited ' .. language_name); -- unique category name for the local language else table.insert (cat, language_name); end table.insert (cat, '-language text]]'); return table.concat (cat); end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string The value |script= is not used in {{transl}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transl}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript) This function is used by both lang_xx() and transl() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style transl() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transl}}, style only applies when a language code is provided ]] local function make_translit (code, language_name, translit, std, tscript, style) local title; local out_t = {}; local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = title_text .. '-language'; -- skip this text (individual and macro languages only) end title_text = title_text .. ' romanization'; -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = title_text .. table.concat ({title_t[std][tscript:lower()], ' (', script_table[tscript], ' script) transliteration'}); -- add the appropriate text to the tool tip else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (transl may not provide a language code) title_text = title_text .. table.concat ({title_t[std][code:lower()], ' (', language_name, ' language) transliteration'}); -- add the appropriate text to the tool tip else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = title_text .. table.concat ({language_name, '-script transliteration'}); -- write a script tool tip elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = title_text .. '-language'; -- skip this text (individual and macro languages only) end title_text = title_text .. ' transliteration'; -- finish the tool tip else title_text = title_text .. ' transliteration'; -- generic tool tip (can we ever get here?) end end end local close_tag; if is_set (code) then -- when a language code is provided (always with {{lang-xx}} templates, not always with {{transl}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style table.insert (out_t, "<i lang=\""); -- so use <i> tag close_tag = '</i>'; -- tag to be used when closing else table.insert (out_t, table.concat ({'<span style=\"font-style: ', style, '\" lang=\"'})); -- non-standard style, construct a span tag for it close_tag = '</span>'; -- tag to be used when closing end table.insert (out_t, code); table.insert (out_t, "-Latn\">"); -- transliterations are always Latin script else table.insert (out_t, "<span>"); -- when no language code: no lang= attribute, not italic ({{transl}} only) close_tag = '</span>'; end table.insert (out_t, translit); -- add the translit text table.insert (out_t, close_tag); -- and add the appropriate </i> or </span> if '' == title_text then -- when there is no need for a tool-tip return table.concat (out_t); -- make a string and done else return title_wrapper_make (title_text, table.concat (out_t), 'span'); -- wrap with a tool-tip span and don end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg ('no text', args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg ('text has malformed markup', args, template); end local style = args.italic; if ('unset' ~= style) and ('invert' ~=style) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg ('text has italic markup', args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ render mainenance messages and categories ]] local function render_maint(nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ for proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and / or inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ looks for a poem strip marker in text; returns true when found; false else auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate html tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns as nil with a second return value of true indicating that some other value has been assigned to |proto= ]] local function validate_proto (proto_param) if 'yes' == proto_param then return true; elseif 'no' == proto_param then return false; elseif is_set (proto_param) then return nil, true; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- common function to return language name from the data set according to IETF tag returns language name if found in data tables; nil else ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to iana active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the iana deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, table.concat ({'Lang and lang-xx using deprecated ISO 639 codes|', code})); table.insert (maint_msgs, table.concat ({'code: ', code, ' is deprecated'})); end return name; -- name from data tables or nil end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- entry point for {{lang}} there should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> parameters are received from the template's frame (parent frame) ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or 'Lang'; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg ('conflicting: {{{1}}} and |code=', args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg ('conflicting: {{{2}}} and |text=', args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg ( msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and unicode.is_Latin (args.text)) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant if 'invert' == args.italic and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- entry point for {{lang}} there should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> parameters are received from the template's frame (parent frame) ]] local function lang (frame) local args = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return _lang (args); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- stand-alone function to create literal translation of main text Also used by {{lang-x2}} ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> html tag if 'no' == args_t.link then table.insert (translation_t, '<abbr title="literal translation">lit.</abbr>'); -- unlinked form else table.insert (translation_t, make_wikilink ('Literal translation', 'lit.')); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> html tag end table.insert (translation_t, table.concat ({'&#39;', args_t.translation, '&#39;'})); -- use html entities to avoid wiki markup confusion return table.concat (translation_t); -- make a big string and done end --[[--------------------------< L A N G _ X X >---------------------------------------------------------------- For the {{lang-xx}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-xx}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-xx}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-xx}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-xx}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args) local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local translit_title; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or 'Lang-xx'; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if args[1] and args.text then return make_error_msg ('conflicting: {{{1}}} and |text=', args, template); else args.text = args[1] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly if args[2] and args.translit then return make_error_msg ('conflicting: {{{2}}} and |translit=', args, template); else args.translit = args[2] or args.translit -- prefer args.translit end if args[3] and (args.translation or args.lit) then return make_error_msg ('conflicting: {{{3}}} and |lit= or |translation=', args, template); elseif args.translation and args.lit then return make_error_msg ('conflicting: |lit= and |translation=', args, template); else args.translation = args[3] or args.translation or args.lit; -- prefer args.translation end if args.links and args.link then return make_error_msg ('conflicting: |links= and |link=', args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- args.italic controls if is_set (subtags.script) then if 'latn' == subtags.script then args.italic = 'italic'; -- |script=Latn; set for font-style:italic else args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if 'no' == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[code] then table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (language_name .. ' language', language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if 'invert' == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not unicode.is_Latin (args.text) then -- transliteration (not supported in {{lang}}); not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end translit_title = mw.title.makeTitle (0, table.concat ({'Romanization of ', translit_script_name})); -- make a title object if translit_title.exists and ('no' ~= args.link) then table.insert (out, make_wikilink ('Romanization of ' .. translit_script_name or language_name, 'romanized') .. ':'); -- make a wikilink if there is an article to link to else table.insert (out, 'romanized:'); -- else plain text end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script']) if is_set (translit) then table.insert (out, translit); else return make_error_msg (table.concat ({'invalid translit-std: \'', args['translit-std'] or '[missing]'}), args, template); end end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- common function to get args table from {{lang-??}} templates returns table of args ]] local function lang_xx_args_get (frame) local args = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if 1 == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-xx}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame); initial_style_state = 'italic'; return _lang_xx (args); end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point ffrom another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-xx}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame); initial_style_state = 'inherit'; return _lang_xx (args); end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function. Module entry point from another module ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}} ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the ietf language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the ietf language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = 'yes' == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'}); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[code] then language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (language_name .. ' language', label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}} ]] local function name_from_tag (frame) -- entry point from an {{#invoke:Lang|name_from_tag|<ietf tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the ietf language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = 'language: ' .. args[1] .. ' not found' -- language name not found, error message end else msg = 'missing language name' -- language name not provided, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'}); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}} ]] local function tag_from_name (frame) -- entry point from an {{#invoke:Lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}} ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ T R A N S L >---------------------------------------------------------------- Module entry point from another module ]] local function _transl (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transl|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (table.concat ({'unrecognized transliteration standard: ', args.translit_std}), args, 'Transl'); end else if is_set (args[2]) then -- [2] set when {{transl|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg ('no text', args, 'Transl'); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg ('missing language / script code', args, 'Transl'); end end end if is_set (args[1]) then -- IANA language code used for html lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (table.concat ({'unrecognized language / script code: ', args[1]}), args, 'Transl'); -- invalid language / script code end else return make_error_msg ('missing language / script code', args, 'Transl'); -- missing language / script code so quit end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, 'Transl'); end if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.italic = nil; -- set to nil; end if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (table.concat ({'unrecognized language / script code: ', args.code}), args, 'Transl'); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic); end --[[--------------------------< T R A N S L >------------------------------------------------------------------ Module entry point from an {{#invoke:}} ]] local function transl (frame) return _transl (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function. Module entry point from another module ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = 'yes' == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'}); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}} ]] local function category_from_tag (frame) -- entry point from an {{#invoke:Lang|category_from_tag|<ietf tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, lang = lang, -- entry point for {{lang}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns ietf tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates transl = transl, -- entry point for {{transl}} _category_from_tag = _category_from_tag, -- entry points when this module is require()d into other modules _lang = _lang, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _transl = _transl, _translation_make = translation_make, }; 9d4ce44c7c49db6155692a2f959ea14ce5f8df40 Template:Navbox visibility 10 131 294 2023-06-03T15:34:42Z wikipedia>WhatamIdoing 0 Update wikitext text/x-wiki Templates using the classes <code>class=navbox</code> ({{tl|navbox}}) or <code>class=nomobile</code> ({{tl|sidebar}}) are not displayed on the [https://en.m.wikipedia.org/ mobile web site] of English Wikipedia. Mobile page views account for approximately 65% of all page views (90-day average {{as of|May 2023|lc=y}}).<noinclude> {{documentation}} </noinclude> 3b1f65df829fd9f96b9c4f002fba38a0fd987a6b Module:Transclusion count/data/D 828 161 369 2023-06-04T05:11:45Z wikipedia>Ahechtbot 0 [[Wikipedia:BOT|Bot]]: Updated page. Scribunto text/plain return { ["D&D"] = 3900, ["D&D_to-do"] = 5600, ["D-da"] = 2600, ["DANFS"] = 8400, ["DC-Comics-trademark-copyright"] = 2100, ["DCS_Sri_Lanka"] = 2100, ["DDR"] = 2800, ["DEC"] = 8600, ["DECADE"] = 283000, ["DEN"] = 6700, ["DEU"] = 17000, ["DMC"] = 61000, ["DMCA"] = 2090000, ["DNB"] = 8800, ["DNB-Portal"] = 2100, ["DNB_portal"] = 3800, ["DNK"] = 7700, ["DNZB"] = 3600, ["DOM"] = 2100, ["DOWs"] = 2600, ["DPP"] = 100000, ["DPP/logo"] = 100000, ["DRV_links"] = 3600, ["DWT"] = 2300, ["DYKC"] = 6700, ["DYKF"] = 2100, ["DYK_blue"] = 3400, ["DYK_checklist"] = 13000, ["DYK_conditions"] = 65000, ["DYK_files"] = 2100, ["DYK_header"] = 32000, ["DYK_nompage_links"] = 76000, ["DYK_talk"] = 102000, ["DYK_talk/date"] = 102000, ["DYK_tools"] = 51000, ["DYK_tools/styles.css"] = 51000, ["DYKfile"] = 12000, ["DZA"] = 2700, ["Dab"] = 17000, ["Dablink"] = 2100, ["Dagger"] = 17000, ["Dashboard.wikiedu.org_assignment"] = 13000, ["Dashboard.wikiedu.org_bibliography/guide"] = 6400, ["Dashboard.wikiedu.org_course_header"] = 5900, ["Dashboard.wikiedu.org_course_header/edit-note"] = 5900, ["Dashboard.wikiedu.org_draft_template/about_this_sandbox"] = 9800, ["Dashboard.wikiedu.org_evaluate_article/guide"] = 7200, ["Dashboard.wikiedu.org_peer_review/guide"] = 11000, ["Dashboard.wikiedu.org_sandbox"] = 91000, ["Dashboard.wikiedu.org_student_editor"] = 79000, ["Dashboard.wikiedu.org_student_program_sandbox"] = 91000, ["Dashboard.wikiedu.org_talk_course_link"] = 80000, ["Dashboard.wikiedu.org_user_talk"] = 2200, ["Date"] = 41000, ["Date-mf"] = 38000, ["Date_table_sorting"] = 38000, ["Dated_maintenance_category"] = 2150000, ["Dated_maintenance_category_(articles)"] = 2090000, ["Dated_maintenance_category_by_type_(articles)"] = 21000, ["Davis_Cup_player"] = 2500, ["Day+1"] = 6900, ["Day-1"] = 8300, ["Dbox"] = 3000, ["Dda"] = 5300, ["Dead_YouTube_link"] = 2700, ["Dead_Youtube_links"] = 2500, ["Dead_link"] = 275000, ["Death-date"] = 11000, ["Death-date_and_age"] = 10000, ["Death_date"] = 9100, ["Death_date_and_age"] = 380000, ["Death_date_and_given_age"] = 2500, ["Death_year_and_age"] = 16000, ["Death_year_category_header"] = 2000, ["Decade"] = 2100, ["Decade_link"] = 32000, ["Decimals"] = 3000, ["Decline"] = 2500, ["Declined"] = 3200, ["Decrease"] = 34000, ["Define"] = 5100, ["Deg2DMS"] = 3400, ["Deletion_review_log_header"] = 5600, ["Deletion_review_log_header/Core"] = 5600, ["Delink"] = 1960000, ["Delink_question_hyphen-minus"] = 292000, ["Delrevxfd"] = 3500, ["Democratic_Party_(US)/meta/shading"] = 15000, ["Description_missing"] = 6900, ["Designation/abbreviation"] = 8100, ["Designation/color"] = 76000, ["Designation/colour"] = 79000, ["Designation/colour2"] = 18000, ["Designation/divbox"] = 29000, ["Designation/text"] = 42000, ["Designation_list"] = 5300, ["Details"] = 4700, ["DetailsLink"] = 5800, ["Detect_singular"] = 197000, ["Deutsche_Bahn_station_codes"] = 2200, ["DfE_performance_tables"] = 4500, ["Diff"] = 30000, ["Diff2"] = 11000, ["Digits"] = 21000, ["Directories_box"] = 3200, ["Disamb"] = 2200, ["Disambig"] = 63000, ["Disambig-Class"] = 12000, ["DisambigProj"] = 12000, ["DisambigProject"] = 150000, ["Disambigproject"] = 5800, ["Disambiguation"] = 216000, ["Disambiguation/cat"] = 216000, ["Disambiguation_page_short_description"] = 350000, ["Discogs_artist"] = 16000, ["Discogs_master"] = 12000, ["Discogs_release"] = 3000, ["Discussion_bottom"] = 11000, ["Discussion_top"] = 12000, ["DisestcatCountry"] = 9500, ["DisestcatCountry/core"] = 9500, ["DisestcatCountryDecade"] = 2600, ["DisestcatUSstate"] = 4900, ["DisestcatUSstate/core"] = 4900, ["Disputed"] = 2200, ["Distinguish"] = 95000, ["Disused_Rail_Start"] = 4000, ["Disused_rail_start"] = 4300, ["Disused_style"] = 4600, ["Div_col"] = 396000, ["Div_col/styles.css"] = 398000, ["Div_col_end"] = 297000, ["Div_col_start"] = 2900, ["Div_end"] = 2600, ["Divbox"] = 333000, ["Divbox/styles.css"] = 357000, ["Dividing_line"] = 4000, ["Dmbox"] = 456000, ["Dmbox/styles.css"] = 456000, ["Do_not_move_to_Commons"] = 16000, ["Doc"] = 3500, ["Documentation"] = 89000, ["Documentation_subpage"] = 95000, ["Dog_opentask"] = 3400, ["Doi"] = 25000, ["Doing"] = 3600, ["Don't_edit_this_line"] = 106000, ["Don't_edit_this_line_always_display"] = 469000, ["Don't_edit_this_line_extinct"] = 469000, ["Don't_edit_this_line_link_target"] = 469000, ["Don't_edit_this_line_link_text"] = 469000, ["Don't_edit_this_line_parent"] = 469000, ["Don't_edit_this_line_rank"] = 469000, ["Don't_edit_this_line_refs"] = 106000, ["Don't_edit_this_line_same_as"] = 469000, ["Done"] = 101000, ["Doppelganger"] = 2700, ["Dot"] = 2600, ["Double+single"] = 2700, ["Double-dagger"] = 18000, ["Dr"] = 3400, ["Dr-logno"] = 3400, ["Dr-make"] = 3400, ["Dr-yr"] = 3400, ["Draft"] = 3700, ["Draft_article"] = 5700, ["Draft_article_check"] = 5800, ["Draft_categories"] = 6100, ["Draft_other"] = 115000, ["Draft_topics"] = 26000, ["Drafts_moved_from_mainspace"] = 12000, ["Draw"] = 3800, ["Draw_key"] = 17000, ["Draw_links"] = 13000, ["Drep"] = 3400, ["Drugbankcite"] = 4300, ["Drugbox"] = 7500, ["Drugs.com"] = 3600, ["Ds/talk_notice"] = 6200, ["Dts"] = 38000, ["Dubious"] = 8100, ["Duck"] = 2900, ["Dummytab"] = 4800, ["Duration"] = 38000, ["Dutch_municipality"] = 2600, ["Dyktalk"] = 42000, ["Dynamic_list"] = 9800, ["Module:DYK_checklist"] = 13000, ["Module:DYK_checklist/data"] = 13000, ["Module:DYK_nompage_links"] = 76000, ["Module:Data"] = 148000, ["Module:Date"] = 1360000, ["Module:DateI18n"] = 65000, ["Module:Date_table_sorting"] = 38000, ["Module:DecodeEncode"] = 113000, ["Module:Delink"] = 2070000, ["Module:Detect_singular"] = 1500000, ["Module:Disambiguation"] = 3500000, ["Module:Distinguish"] = 95000, ["Module:Documentation"] = 135000, ["Module:Documentation/config"] = 135000, ["Module:Documentation/styles.css"] = 135000, ["Module:Draft_topics"] = 26000, ["Module:Duration"] = 236000, } 28eacb8bec85d8e4733a57d9fa28b3b3ffa8696b Module:Transclusion count/data/I 828 190 541 2023-06-04T05:12:35Z wikipedia>Ahechtbot 0 [[Wikipedia:BOT|Bot]]: Updated page. Scribunto text/plain return { ["IAAF_name"] = 2200, ["IAST"] = 5900, ["IBDB_name"] = 9100, ["ICD10"] = 4600, ["ICD9"] = 4400, ["ICS"] = 2900, ["IDN"] = 3300, ["IMDb_episode"] = 9800, ["IMDb_episodes"] = 2500, ["IMDb_name"] = 152000, ["IMDb_title"] = 187000, ["IMO_Number"] = 4100, ["IMSLP"] = 8200, ["INA"] = 2100, ["IND"] = 7400, ["INR"] = 6200, ["INRConvert"] = 5500, ["INRConvert/CurrentRate"] = 5400, ["INRConvert/USD"] = 5400, ["INRConvert/out"] = 5400, ["IOC_profile"] = 5600, ["IP"] = 2600, ["IPA"] = 140000, ["IPA-all"] = 3500, ["IPA-de"] = 8000, ["IPA-es"] = 7800, ["IPA-fr"] = 44000, ["IPA-it"] = 5800, ["IPA-nl"] = 3700, ["IPA-pl"] = 4000, ["IPA-pt"] = 3600, ["IPA-ru"] = 2600, ["IPA-sh"] = 2700, ["IPA-sl"] = 6900, ["IPA-th"] = 2900, ["IPA_audio_link"] = 19000, ["IPA_link"] = 3400, ["IPAc-cmn"] = 2600, ["IPAc-en"] = 48000, ["IPAc-pl"] = 52000, ["IPC_athlete"] = 2600, ["IPSummary"] = 77000, ["IP_summary"] = 78000, ["IPsock"] = 9300, ["IPtalk"] = 22000, ["IPuser"] = 6900, ["IPvandal"] = 2900, ["IRC"] = 6500, ["IRI"] = 2200, ["IRL"] = 5400, ["IRN"] = 3500, ["ISBN"] = 461000, ["ISBNT"] = 38000, ["ISBN_missing"] = 2300, ["ISFDB_name"] = 4100, ["ISFDB_title"] = 4500, ["ISL"] = 2100, ["ISO_15924/script-example-character"] = 2800, ["ISO_15924/wp-article"] = 2800, ["ISO_15924/wp-article/format"] = 2800, ["ISO_15924/wp-article/label"] = 2700, ["ISO_3166_code"] = 509000, ["ISO_3166_name"] = 16000, ["ISO_639_name"] = 7900, ["ISP"] = 5400, ["ISR"] = 4700, ["ISSN"] = 12000, ["ISSN_link"] = 30000, ["ISTAT"] = 8100, ["ISU_figure_skater"] = 2500, ["ITA"] = 17000, ["ITF"] = 6100, ["ITF_profile"] = 9000, ["ITIS"] = 4300, ["ITN_talk"] = 9800, ["ITN_talk/date"] = 9800, ["IUCN_banner"] = 15000, ["I_sup"] = 4500, ["Iaaf_name"] = 7400, ["Ice_hockey"] = 19000, ["Ice_hockey_stats"] = 16000, ["Icehockeystats"] = 12000, ["Icon"] = 572000, ["If"] = 265000, ["If_all"] = 6000, ["If_between"] = 3700, ["If_both"] = 8250000, ["If_empty"] = 3670000, ["If_first_display_both"] = 73000, ["If_in_page"] = 8800, ["If_last_display_both"] = 30000, ["If_preview"] = 57000, ["If_then_show"] = 278000, ["Ifempty"] = 4000, ["Ifeq"] = 16000, ["Iferror_then_show"] = 3200, ["Ifexist_not_redirect"] = 1110000, ["Ifnotempty"] = 14000, ["Ifnumber"] = 34000, ["Ifsubst"] = 97000, ["Ih"] = 7500, ["Ill"] = 109000, ["Illm"] = 6800, ["Image_frame"] = 3800, ["Image_label"] = 4500, ["Image_label_begin"] = 3800, ["Image_label_end"] = 3500, ["Image_label_small"] = 2600, ["Image_needed"] = 4500, ["Image_other"] = 279000, ["Image_requested"] = 170000, ["Image_requested/Category_helper"] = 163000, ["Imbox"] = 915000, ["Imdb_name"] = 5300, ["Imdb_title"] = 4200, ["Import_style"] = 11000, ["Import_style/inputbox.css"] = 11000, ["Importance"] = 5530000, ["Importance/colour"] = 5550000, ["Importance_mask"] = 8610000, ["Improve_categories"] = 6800, ["Improve_documentation"] = 2000, ["In_class"] = 5600, ["In_lang"] = 352000, ["In_progress"] = 3100, ["In_string"] = 71000, ["In_title"] = 19000, ["Inactive_WikiProject_banner"] = 216000, ["Inactive_userpage_blanked"] = 4900, ["Include-USGov"] = 29000, ["Incomplete_list"] = 22000, ["Inconclusive"] = 2100, ["Increase"] = 42000, ["Incumbent_pope"] = 4300, ["Indent"] = 4200, ["IndexFungorum"] = 2300, ["Indian_English"] = 4200, ["Indian_Rupee"] = 10000, ["Indian_railway_code"] = 3100, ["Inflation"] = 18000, ["Inflation-fn"] = 5300, ["Inflation-year"] = 4400, ["Inflation/IN/startyear"] = 5500, ["Inflation/UK"] = 4300, ["Inflation/UK/dataset"] = 4300, ["Inflation/UK/startyear"] = 4300, ["Inflation/US"] = 11000, ["Inflation/US/dataset"] = 11000, ["Inflation/US/startyear"] = 11000, ["Inflation/fn"] = 6100, ["Inflation/year"] = 23000, ["Info"] = 7200, ["Infobox"] = 3190000, ["Infobox/Columns"] = 2300, ["Infobox/mobileviewfix.css"] = 141000, ["Infobox3cols"] = 16000, ["Infobox_AFL_biography"] = 14000, ["Infobox_Aircraft_Begin"] = 5400, ["Infobox_Aircraft_Type"] = 4700, ["Infobox_Athletics_Championships"] = 2700, ["Infobox_Australian_place"] = 15000, ["Infobox_CFL_biography"] = 2200, ["Infobox_COA_wide"] = 3100, ["Infobox_Canada_electoral_district"] = 2400, ["Infobox_Canadian_Football_League_biography"] = 5800, ["Infobox_Canadian_Football_League_biography/position"] = 5700, ["Infobox_Chinese"] = 20000, ["Infobox_Chinese/Chinese"] = 2700, ["Infobox_Chinese/Footer"] = 8700, ["Infobox_Chinese/Header"] = 8700, ["Infobox_Chinese/Korean"] = 17000, ["Infobox_Christian_leader"] = 18000, ["Infobox_Election"] = 2200, ["Infobox_French_commune"] = 38000, ["Infobox_GAA_player"] = 2900, ["Infobox_Gaelic_games_player"] = 5000, ["Infobox_German_location"] = 13000, ["Infobox_German_place"] = 14000, ["Infobox_Grand_Prix_race_report"] = 2000, ["Infobox_Greece_place"] = 2800, ["Infobox_Greek_Dimos"] = 2800, ["Infobox_Hindu_temple"] = 2400, ["Infobox_Indian_constituency"] = 4500, ["Infobox_Indian_constituency/defaultdata"] = 4500, ["Infobox_Italian_comune"] = 8100, ["Infobox_Korean_name"] = 15000, ["Infobox_Korean_name/categories"] = 15000, ["Infobox_MLB_yearly"] = 3100, ["Infobox_NASCAR_race_report"] = 2100, ["Infobox_NCAA_team_season"] = 18000, ["Infobox_NFL_biography"] = 28000, ["Infobox_NFL_player"] = 8000, ["Infobox_NFL_season"] = 2500, ["Infobox_NFL_team_season"] = 3900, ["Infobox_NRHP"] = 72000, ["Infobox_NRHP/conv"] = 18000, ["Infobox_NRHP/locmapin2region"] = 66000, ["Infobox_Officeholder"] = 4900, ["Infobox_Olympic_event"] = 7300, ["Infobox_Olympic_event/games_text"] = 7300, ["Infobox_Paralympic_event"] = 2600, ["Infobox_Paralympic_event/games_text"] = 2600, ["Infobox_Politician"] = 2200, ["Infobox_Romanian_subdivision"] = 3100, ["Infobox_Russian_district"] = 2000, ["Infobox_Russian_inhabited_locality"] = 4400, ["Infobox_SCOTUS_case"] = 3700, ["Infobox_Site_of_Special_Scientific_Interest"] = 2000, ["Infobox_Swiss_town"] = 2800, ["Infobox_Switzerland_municipality"] = 2900, ["Infobox_Turkey_place"] = 12000, ["Infobox_U.S._county"] = 3000, ["Infobox_U.S._county/district"] = 3000, ["Infobox_UK_constituency"] = 2100, ["Infobox_UK_constituency/year"] = 2100, ["Infobox_UK_legislation"] = 2900, ["Infobox_UK_place"] = 25000, ["Infobox_UK_place/NoDialCode"] = 7900, ["Infobox_UK_place/NoPostCode"] = 3000, ["Infobox_UK_place/area"] = 2300, ["Infobox_UK_place/dist"] = 2500, ["Infobox_UK_place/local"] = 25000, ["Infobox_UK_place/styles.css"] = 25000, ["Infobox_UN_resolution"] = 2300, ["Infobox_US_Supreme_Court_case"] = 3800, ["Infobox_US_Supreme_Court_case/courts"] = 3800, ["Infobox_Wikipedia_user"] = 9500, ["Infobox_YouTube_personality"] = 2600, ["Infobox_YouTube_personality/styles.css"] = 2600, ["Infobox_academic"] = 13000, ["Infobox_aircraft_begin"] = 14000, ["Infobox_aircraft_occurrence"] = 2200, ["Infobox_aircraft_type"] = 12000, ["Infobox_airline"] = 4600, ["Infobox_airport"] = 15000, ["Infobox_airport/datatable"] = 15000, ["Infobox_album"] = 161000, ["Infobox_album/color"] = 189000, ["Infobox_album/link"] = 161000, ["Infobox_anatomy"] = 4400, ["Infobox_ancient_site"] = 5300, ["Infobox_animanga/Footer"] = 6700, ["Infobox_animanga/Header"] = 6700, ["Infobox_animanga/Print"] = 5400, ["Infobox_animanga/Video"] = 4600, ["Infobox_architect"] = 3600, ["Infobox_artist"] = 28000, ["Infobox_artist_discography"] = 5900, ["Infobox_artwork"] = 11000, ["Infobox_athlete"] = 3000, ["Infobox_automobile"] = 8400, ["Infobox_award"] = 13000, ["Infobox_badminton_player"] = 3200, ["Infobox_baseball_biography"] = 28000, ["Infobox_baseball_biography/style"] = 28000, ["Infobox_baseball_biography/styles.css"] = 28000, ["Infobox_basketball_biography"] = 20000, ["Infobox_basketball_biography/style"] = 20000, ["Infobox_basketball_club"] = 3000, ["Infobox_beauty_pageant"] = 2400, ["Infobox_bilateral_relations"] = 4300, ["Infobox_body_of_water"] = 18000, ["Infobox_book"] = 51000, ["Infobox_boxer"] = 5700, ["Infobox_bridge"] = 6000, ["Infobox_building"] = 27000, ["Infobox_character"] = 7700, ["Infobox_chess_biography"] = 3600, ["Infobox_chess_player"] = 3000, ["Infobox_church"] = 14000, ["Infobox_church/denomination"] = 14000, ["Infobox_church/font_color"] = 14000, ["Infobox_civil_conflict"] = 2300, ["Infobox_civilian_attack"] = 5300, ["Infobox_college_coach"] = 11000, ["Infobox_college_football_game"] = 2100, ["Infobox_college_sports_team_season"] = 39000, ["Infobox_college_sports_team_season/link"] = 39000, ["Infobox_college_sports_team_season/name"] = 39000, ["Infobox_college_sports_team_season/succession"] = 39000, ["Infobox_college_sports_team_season/team"] = 39000, ["Infobox_comic_book_title"] = 2900, ["Infobox_comics_character"] = 3600, ["Infobox_comics_creator"] = 3500, ["Infobox_comics_creator/styles.css"] = 3500, ["Infobox_company"] = 83000, ["Infobox_computing_device"] = 2300, ["Infobox_concert"] = 3200, ["Infobox_constituency"] = 5000, ["Infobox_country"] = 6300, ["Infobox_country/formernext"] = 5900, ["Infobox_country/imagetable"] = 5100, ["Infobox_country/multirow"] = 8100, ["Infobox_country/status_text"] = 2700, ["Infobox_country/styles.css"] = 6300, ["Infobox_country_at_games"] = 14000, ["Infobox_country_at_games/core"] = 14000, ["Infobox_country_at_games/see_also"] = 12000, ["Infobox_court_case"] = 4600, ["Infobox_court_case/images"] = 2400, ["Infobox_cricket_tournament"] = 2300, ["Infobox_cricketer"] = 32000, ["Infobox_cricketer/career"] = 32000, ["Infobox_cricketer/national_side"] = 7400, ["Infobox_criminal"] = 6200, ["Infobox_curler"] = 2600, ["Infobox_cycling_race_report"] = 4400, ["Infobox_cyclist"] = 16000, ["Infobox_dam"] = 5500, ["Infobox_designation_list"] = 19000, ["Infobox_designation_list/entry"] = 17000, ["Infobox_dim"] = 6900, ["Infobox_dim/core"] = 6900, ["Infobox_diocese"] = 3800, ["Infobox_drug"] = 9400, ["Infobox_drug/chemical_formula"] = 9500, ["Infobox_drug/data_page_link"] = 9400, ["Infobox_drug/formatATC"] = 9300, ["Infobox_drug/formatCASnumber"] = 9500, ["Infobox_drug/formatChEBI"] = 9500, ["Infobox_drug/formatChEMBL"] = 9500, ["Infobox_drug/formatChemDBNIAID"] = 9500, ["Infobox_drug/formatChemSpider"] = 9500, ["Infobox_drug/formatCompTox"] = 9500, ["Infobox_drug/formatDrugBank"] = 9500, ["Infobox_drug/formatIUPHARBPS"] = 9500, ["Infobox_drug/formatJmol"] = 9500, ["Infobox_drug/formatKEGG"] = 9500, ["Infobox_drug/formatPDBligand"] = 8800, ["Infobox_drug/formatPubChemCID"] = 9500, ["Infobox_drug/formatPubChemSID"] = 9500, ["Infobox_drug/formatUNII"] = 9500, ["Infobox_drug/legal_status"] = 9600, ["Infobox_drug/licence"] = 9500, ["Infobox_drug/maintenance_categories"] = 9500, ["Infobox_drug/non-ref-space"] = 3900, ["Infobox_drug/pregnancy_category"] = 9500, ["Infobox_drug/title"] = 9500, ["Infobox_election"] = 29000, ["Infobox_election/row"] = 29000, ["Infobox_election/shortname"] = 27000, ["Infobox_enzyme"] = 5100, ["Infobox_ethnic_group"] = 7100, ["Infobox_event"] = 5200, ["Infobox_family"] = 2100, ["Infobox_figure_skater"] = 4200, ["Infobox_film"] = 154000, ["Infobox_film/short_description"] = 150000, ["Infobox_film_awards"] = 2600, ["Infobox_film_awards/link"] = 2600, ["Infobox_film_awards/style"] = 2600, ["Infobox_food"] = 6800, ["Infobox_football_biography"] = 204000, ["Infobox_football_club"] = 27000, ["Infobox_football_club_season"] = 20000, ["Infobox_football_league"] = 2500, ["Infobox_football_league_season"] = 19000, ["Infobox_football_match"] = 5800, ["Infobox_football_tournament_season"] = 8000, ["Infobox_former_subdivision"] = 3300, ["Infobox_former_subdivision/styles.css"] = 3300, ["Infobox_galaxy"] = 2000, ["Infobox_game"] = 2400, ["Infobox_game_score"] = 3400, ["Infobox_gene"] = 13000, ["Infobox_given_name"] = 4000, ["Infobox_golfer"] = 4400, ["Infobox_golfer/highest_ranking"] = 4400, ["Infobox_government_agency"] = 10000, ["Infobox_government_cabinet"] = 2500, ["Infobox_gridiron_football_person"] = 2600, ["Infobox_gridiron_football_person/position"] = 5700, ["Infobox_gymnast"] = 3400, ["Infobox_handball_biography"] = 4900, ["Infobox_historic_site"] = 11000, ["Infobox_horseraces"] = 2600, ["Infobox_hospital"] = 6200, ["Infobox_hospital/care_system"] = 6200, ["Infobox_hospital/lists"] = 6200, ["Infobox_ice_hockey_biography"] = 20000, ["Infobox_ice_hockey_player"] = 19000, ["Infobox_ice_hockey_team"] = 3000, ["Infobox_ice_hockey_team_season"] = 2000, ["Infobox_international_football_competition"] = 5600, ["Infobox_islands"] = 8700, ["Infobox_islands/area"] = 9100, ["Infobox_islands/density"] = 9100, ["Infobox_islands/length"] = 8700, ["Infobox_islands/styles.css"] = 8700, ["Infobox_journal"] = 9700, ["Infobox_journal/Abbreviation_search"] = 9600, ["Infobox_journal/Bluebook_check"] = 9300, ["Infobox_journal/Former_check"] = 9300, ["Infobox_journal/ISO_4_check"] = 9300, ["Infobox_journal/ISSN-eISSN"] = 9400, ["Infobox_journal/Indexing_search"] = 9500, ["Infobox_journal/MathSciNet_check"] = 9300, ["Infobox_journal/NLM_check"] = 9300, ["Infobox_journal/frequency"] = 8500, ["Infobox_lake"] = 4400, ["Infobox_language"] = 9500, ["Infobox_language/family-color"] = 11000, ["Infobox_language/genetic"] = 6500, ["Infobox_language/linguistlist"] = 9500, ["Infobox_language/ref"] = 7100, ["Infobox_legislature"] = 3600, ["Infobox_library"] = 2100, ["Infobox_lighthouse"] = 2600, ["Infobox_lighthouse/light"] = 2600, ["Infobox_locomotive"] = 4800, ["Infobox_magazine"] = 7500, ["Infobox_manner_of_address"] = 3300, ["Infobox_mapframe"] = 78000, ["Infobox_martial_artist"] = 5600, ["Infobox_martial_artist/record"] = 5600, ["Infobox_medal_templates"] = 418000, ["Infobox_medical_condition"] = 10000, ["Infobox_medical_condition_(new)"] = 8200, ["Infobox_military_conflict"] = 21000, ["Infobox_military_installation"] = 9600, ["Infobox_military_person"] = 44000, ["Infobox_military_unit"] = 26000, ["Infobox_mine"] = 2100, ["Infobox_model"] = 2300, ["Infobox_mountain"] = 28000, ["Infobox_multi-sport_competition_event"] = 2200, ["Infobox_museum"] = 10000, ["Infobox_musical_artist"] = 121000, ["Infobox_musical_artist/color"] = 121000, ["Infobox_musical_artist/hCard_class"] = 310000, ["Infobox_musical_composition"] = 2800, ["Infobox_name"] = 7400, ["Infobox_name_module"] = 6600, ["Infobox_newspaper"] = 9500, ["Infobox_nobility"] = 2400, ["Infobox_noble"] = 7200, ["Infobox_officeholder"] = 213000, ["Infobox_officeholder/office"] = 218000, ["Infobox_official_post"] = 7900, ["Infobox_organization"] = 35000, ["Infobox_pageant_titleholder"] = 2800, ["Infobox_park"] = 7200, ["Infobox_person"] = 464000, ["Infobox_person/Wikidata"] = 5000, ["Infobox_person/height"] = 101000, ["Infobox_person/length"] = 7000, ["Infobox_person/weight"] = 66000, ["Infobox_philosopher"] = 3300, ["Infobox_planet"] = 4700, ["Infobox_play"] = 3800, ["Infobox_political_party"] = 14000, ["Infobox_power_station"] = 3000, ["Infobox_prepared_food"] = 3100, ["Infobox_professional_wrestler"] = 4200, ["Infobox_professional_wrestling_event"] = 2600, ["Infobox_protected_area"] = 14000, ["Infobox_protein_family"] = 2100, ["Infobox_publisher"] = 2400, ["Infobox_racehorse"] = 5500, ["Infobox_racing_driver"] = 3600, ["Infobox_radio_station"] = 22000, ["Infobox_rail"] = 2900, ["Infobox_rail_line"] = 7200, ["Infobox_rail_line/tracking"] = 7200, ["Infobox_rail_service"] = 2900, ["Infobox_rail_service/doc"] = 2900, ["Infobox_reality_competition_season"] = 3400, ["Infobox_record_label"] = 4000, ["Infobox_recurring_event"] = 6300, ["Infobox_religious_biography"] = 5000, ["Infobox_religious_building"] = 12000, ["Infobox_religious_building/color"] = 17000, ["Infobox_restaurant"] = 2400, ["Infobox_river"] = 30000, ["Infobox_river/calcunit"] = 30000, ["Infobox_river/discharge"] = 30000, ["Infobox_river/row-style"] = 30000, ["Infobox_river/source"] = 30000, ["Infobox_road"] = 24000, ["Infobox_road/meta/mask/category"] = 23000, ["Infobox_road/meta/mask/country"] = 24000, ["Infobox_road/styles.css"] = 25000, ["Infobox_road_small"] = 2300, ["Infobox_rockunit"] = 6400, ["Infobox_royalty"] = 21000, ["Infobox_royalty/short_description"] = 13000, ["Infobox_rugby_biography"] = 15000, ["Infobox_rugby_biography/correct_date"] = 15000, ["Infobox_rugby_biography/depcheck"] = 15000, ["Infobox_rugby_league_biography"] = 9900, ["Infobox_rugby_league_biography/PLAYER"] = 9800, ["Infobox_rugby_team"] = 2600, ["Infobox_sailboat_specifications"] = 2200, ["Infobox_saint"] = 4900, ["Infobox_school"] = 38000, ["Infobox_school/short_description"] = 38000, ["Infobox_school_district"] = 5600, ["Infobox_school_district/styles.css"] = 5600, ["Infobox_scientist"] = 48000, ["Infobox_service_record"] = 2600, ["Infobox_settlement"] = 557000, ["Infobox_settlement/areadisp"] = 232000, ["Infobox_settlement/columns"] = 93000, ["Infobox_settlement/columns/styles.css"] = 93000, ["Infobox_settlement/densdisp"] = 430000, ["Infobox_settlement/impus"] = 81000, ["Infobox_settlement/lengthdisp"] = 168000, ["Infobox_settlement/link"] = 93000, ["Infobox_settlement/metric"] = 207000, ["Infobox_settlement/pref"] = 288000, ["Infobox_settlement/styles.css"] = 557000, ["Infobox_ship_begin"] = 41000, ["Infobox_ship_career"] = 37000, ["Infobox_ship_characteristics"] = 40000, ["Infobox_ship_class_overview"] = 4100, ["Infobox_ship_image"] = 40000, ["Infobox_shopping_mall"] = 3400, ["Infobox_short_story"] = 2300, ["Infobox_skier"] = 2500, ["Infobox_soap_character"] = 2900, ["Infobox_software"] = 14000, ["Infobox_software/simple"] = 14000, ["Infobox_song"] = 75000, ["Infobox_song/color"] = 75000, ["Infobox_song/link"] = 75000, ["Infobox_spaceflight"] = 3500, ["Infobox_spaceflight/styles.css"] = 3500, ["Infobox_sport_event"] = 2100, ["Infobox_sports_competition_event"] = 16000, ["Infobox_sports_competition_event/medalrow"] = 11000, ["Infobox_sports_league"] = 4900, ["Infobox_sports_season"] = 5300, ["Infobox_sports_team"] = 2200, ["Infobox_sportsperson"] = 105000, ["Infobox_stadium"] = 3600, ["Infobox_station"] = 55000, ["Infobox_station/doc"] = 54000, ["Infobox_station/services"] = 55000, ["Infobox_station/styles.css"] = 55000, ["Infobox_street"] = 3300, ["Infobox_swimmer"] = 9300, ["Infobox_television"] = 56000, ["Infobox_television/Short_description"] = 54000, ["Infobox_television_channel"] = 6200, ["Infobox_television_episode"] = 12000, ["Infobox_television_episode/styles.css"] = 12000, ["Infobox_television_season"] = 9300, ["Infobox_television_station"] = 3700, ["Infobox_tennis_biography"] = 10000, ["Infobox_tennis_event"] = 2400, ["Infobox_tennis_tournament_event"] = 18000, ["Infobox_tennis_tournament_year"] = 9000, ["Infobox_tennis_tournament_year/color"] = 27000, ["Infobox_tennis_tournament_year/footer"] = 27000, ["Infobox_train"] = 2300, ["Infobox_union"] = 2100, ["Infobox_university"] = 26000, ["Infobox_user"] = 2600, ["Infobox_venue"] = 18000, ["Infobox_video_game"] = 27000, ["Infobox_video_game/styles.css"] = 27000, ["Infobox_volleyball_biography"] = 5200, ["Infobox_weapon"] = 7200, ["Infobox_website"] = 7700, ["Infobox_writer"] = 38000, ["Information"] = 105000, ["Information/styles.css"] = 105000, ["Inprogress"] = 2300, ["Input_link"] = 32000, ["Instagram"] = 10000, ["Interlanguage_link"] = 146000, ["Interlanguage_link_multi"] = 20000, ["Internet_Archive_author"] = 18000, ["Internet_Archive_film"] = 2500, ["Intitle"] = 12000, ["Invalid_SVG"] = 3700, ["Invalid_SVG/styles.css"] = 3700, ["Ipsock"] = 7900, ["Iptalk"] = 21000, ["IranCensus2006"] = 50000, ["IranNCSGN"] = 3200, ["Iran_Census_2006"] = 50000, ["Irc"] = 2100, ["Irish_place_name"] = 2600, ["IsIPAddress"] = 41000, ["IsValidPageName"] = 138000, ["Is_country_in_Central_America"] = 13000, ["Is_country_in_the_Caribbean"] = 14000, ["Is_interwiki_link"] = 6100, ["Is_italic_taxon"] = 469000, ["Is_redirect"] = 26000, ["Isbn"] = 7300, ["Isfdb_name"] = 3800, ["Isfdb_title"] = 4400, ["Isnumeric"] = 204000, ["Iso2continent"] = 35000, ["Iso2country"] = 23000, ["Iso2country/article"] = 23000, ["Iso2country/data"] = 23000, ["Iso2nationality"] = 220000, ["Issubst"] = 71000, ["Isu_name"] = 2300, ["Italic_dab2"] = 5100, ["Italic_title"] = 284000, ["Italic_title_prefixed"] = 8600, ["Italics_colon"] = 3500, ["Italictitle"] = 4300, ["Ivm"] = 5700, ["Ivm/styles.css"] = 5700, ["Ivmbox"] = 122000, ["Ivory_messagebox"] = 138000, ["Module:I18n/complex_date"] = 65000, ["Module:IP"] = 129000, ["Module:IPA_symbol"] = 4700, ["Module:IPA_symbol/data"] = 4700, ["Module:IPAc-en"] = 48000, ["Module:IPAc-en/data"] = 48000, ["Module:IPAc-en/phonemes"] = 48000, ["Module:IPAc-en/pronunciation"] = 48000, ["Module:IPAddress"] = 190000, ["Module:ISO_3166"] = 1020000, ["Module:ISO_3166/data/AT"] = 2500, ["Module:ISO_3166/data/BA"] = 3400, ["Module:ISO_3166/data/CA"] = 2500, ["Module:ISO_3166/data/CN"] = 2100, ["Module:ISO_3166/data/DE"] = 14000, ["Module:ISO_3166/data/ES"] = 3600, ["Module:ISO_3166/data/FR"] = 38000, ["Module:ISO_3166/data/GB"] = 6400, ["Module:ISO_3166/data/GR"] = 3100, ["Module:ISO_3166/data/IN"] = 28000, ["Module:ISO_3166/data/IR"] = 4600, ["Module:ISO_3166/data/National"] = 1020000, ["Module:ISO_3166/data/PL"] = 5100, ["Module:ISO_3166/data/RS"] = 3200, ["Module:ISO_3166/data/RU"] = 24000, ["Module:ISO_3166/data/US"] = 84000, ["Module:ISO_639_name"] = 20000, ["Module:ISOdate"] = 65000, ["Module:Icon"] = 573000, ["Module:Icon/data"] = 573000, ["Module:If_empty"] = 3670000, ["Module:If_in_page"] = 8800, ["Module:If_preview"] = 542000, ["Module:If_preview/configuration"] = 542000, ["Module:If_preview/styles.css"] = 542000, ["Module:Import_style"] = 11000, ["Module:In_lang"] = 352000, ["Module:Indent"] = 4200, ["Module:Infobox"] = 4050000, ["Module:Infobox/dates"] = 66000, ["Module:Infobox/styles.css"] = 4310000, ["Module:Infobox3cols"] = 294000, ["Module:InfoboxImage"] = 4350000, ["Module:Infobox_body_of_water_tracking"] = 18000, ["Module:Infobox_cyclist_tracking"] = 16000, ["Module:Infobox_gene"] = 13000, ["Module:Infobox_mapframe"] = 398000, ["Module:Infobox_military_conflict"] = 21000, ["Module:Infobox_military_conflict/styles.css"] = 21000, ["Module:Infobox_multi-lingual_name"] = 20000, ["Module:Infobox_multi-lingual_name/data"] = 20000, ["Module:Infobox_power_station"] = 3000, ["Module:Infobox_road"] = 25000, ["Module:Infobox_road/browselinks"] = 25000, ["Module:Infobox_road/errors"] = 24000, ["Module:Infobox_road/length"] = 25000, ["Module:Infobox_road/locations"] = 24000, ["Module:Infobox_road/map"] = 24000, ["Module:Infobox_road/route"] = 25000, ["Module:Infobox_road/sections"] = 24000, ["Module:Infobox_television"] = 56000, ["Module:Infobox_television_disambiguation_check"] = 63000, ["Module:Infobox_television_episode"] = 12000, ["Module:Infobox_television_season_disambiguation_check"] = 8800, ["Module:Infobox_television_season_name"] = 9300, ["Module:Internet_Archive"] = 18000, ["Module:IrelandByCountyCatNav"] = 2900, ["Module:Is_infobox_in_lead"] = 375000, ["Module:Is_instance"] = 332000, ["Module:Italic_title"] = 1100000, ["Module:Italic_title2"] = 5100, } ba90772744fe880e403a431fb72b58155e842d3a Module:Transclusion count/data/N 828 134 300 2023-06-04T05:13:25Z wikipedia>Ahechtbot 0 [[Wikipedia:BOT|Bot]]: Updated page. Scribunto text/plain return { ["N"] = 15000, ["N.b."] = 2200, ["N/A"] = 23000, ["N/a"] = 53000, ["NA-Class"] = 14000, ["NASTRO_comment"] = 30000, ["NBA_Draft_template_list"] = 3400, ["NBA_Year"] = 5500, ["NBA_color"] = 3600, ["NBA_color_cell"] = 4300, ["NBA_color_cell2"] = 3400, ["NBA_player_statistics_legend"] = 4200, ["NBA_player_statistics_start"] = 3800, ["NBbox"] = 3400, ["NCAA_color_cell"] = 9600, ["NCAA_secondary_color_cell"] = 4100, ["NCES_District_ID"] = 2600, ["NED"] = 9600, ["NEXTYEAR"] = 7700, ["NFLAltPrimaryStyle"] = 5800, ["NFLPrimaryColor"] = 2200, ["NFLPrimaryStyle"] = 28000, ["NFLSecondaryColor"] = 19000, ["NFL_Roster_navbox_template_list"] = 2600, ["NFL_Year"] = 23000, ["NFL_predraft"] = 5800, ["NFL_predraft/check"] = 5800, ["NFL_predraft/ftin"] = 5800, ["NFLplayer"] = 2100, ["NFT"] = 6800, ["NFT_player"] = 30000, ["NGA"] = 3200, ["NGR"] = 2300, ["NHLE"] = 18000, ["NHLS_url"] = 2200, ["NLD"] = 11000, ["NLM_content"] = 2800, ["NOINDEX"] = 449000, ["NOMIS2011"] = 2300, ["NOR"] = 9400, ["NRDB_species"] = 6900, ["NRHP-PA"] = 2600, ["NRHPGoogleMapFootnote"] = 2500, ["NRHP_Focus"] = 76000, ["NRHP_color"] = 3700, ["NRHP_date_for_lists"] = 3100, ["NRHP_date_for_lists/dates"] = 3100, ["NRHP_header"] = 3300, ["NRHP_navigation_box"] = 8300, ["NRHP_row"] = 3400, ["NRHP_style"] = 70000, ["NRHP_url"] = 29000, ["NRHP_url/core"] = 31000, ["NRISref"] = 73000, ["NSWcity"] = 2100, ["NSWcity/core"] = 2100, ["NUMBEROFSECTIONS"] = 4700, ["NYCS_br"] = 2700, ["NYCS_time_2"] = 3100, ["NZL"] = 6700, ["NZ_electorate_link"] = 2300, ["Na"] = 2400, ["Nac"] = 2700, ["Namespace_detect"] = 568000, ["Namespace_detect_showall"] = 9600, ["Nastaliq"] = 10000, ["Nat_fs_end"] = 2400, ["National_Film_Awards/style"] = 2000, ["National_Heritage_List_for_England"] = 22000, ["National_Rail_style"] = 5700, ["National_Register_of_Historic_Places"] = 29000, ["National_Register_of_Historic_Places_in_Massachusetts"] = 4400, ["National_Register_of_Historic_Places_in_New_York"] = 5600, ["National_Register_of_Historic_Places_in_North_Carolina"] = 2900, ["National_Register_of_Historic_Places_in_Pennsylvania"] = 3200, ["National_Register_of_Historic_Places_in_Virginia"] = 3100, ["National_basketball_squad"] = 3300, ["National_field_hockey_squad"] = 4000, ["National_football_squad_end"] = 2900, ["National_football_squad_start/styles.css"] = 2400, ["National_rugby_union_team"] = 3600, ["National_squad"] = 41000, ["National_squad_no_numbers"] = 17000, ["Native_name"] = 16000, ["Native_name_checker"] = 80000, ["Naval"] = 2900, ["Naval/core"] = 2900, ["Navbar"] = 40000, ["Navbar-collapsible"] = 3600, ["Navbar-header"] = 15000, ["Navbar-header/styles.css"] = 15000, ["Navbox"] = 3050000, ["Navbox_GR_munic"] = 3500, ["Navbox_Musical_artist"] = 9700, ["Navbox_bottom"] = 15000, ["Navbox_decade_list"] = 11000, ["Navbox_ice_hockey"] = 3100, ["Navbox_musical_artist"] = 220000, ["Navbox_musical_artist/color"] = 220000, ["Navbox_rugby_league_squad"] = 4900, ["Navbox_season_by_team"] = 3100, ["Navbox_top"] = 15000, ["Navbox_with_collapsible_groups"] = 131000, ["Navbox_with_collapsible_sections"] = 2300, ["Navbox_with_columns"] = 24000, ["Navboxes"] = 55000, ["Navboxes_colour"] = 5300, ["Navseasoncats"] = 479000, ["Navseasoncats_with_centuries_below_decade"] = 6700, ["Navseasoncats_with_decades_below_year"] = 18000, ["Navsource"] = 2500, ["Navy"] = 19000, ["Navy/core"] = 19000, ["Nay"] = 19000, ["Nbay"] = 5500, ["Nbsp"] = 480000, ["Nbsp_to_space"] = 20000, ["Ndash"] = 20000, ["Nee"] = 9000, ["NeilBrownPlayers"] = 3100, ["New_user_bar"] = 57000, ["Newbot"] = 4200, ["Next_period"] = 21000, ["Nfly"] = 2200, ["Nihongo"] = 102000, ["Nihongo2"] = 12000, ["Nihongo_foot"] = 2600, ["No"] = 8300, ["No."] = 14000, ["No2"] = 10000, ["NoSpam"] = 3900, ["NoSpamEmail"] = 17000, ["No_col_break"] = 2300, ["No_col_break/styles.css"] = 2300, ["No_footnotes"] = 51000, ["No_ping"] = 376000, ["No_plot"] = 5700, ["No_redirect"] = 562000, ["No_spam"] = 258000, ["No_wrap"] = 2300, ["Nobold"] = 382000, ["Nobold/styles.css"] = 382000, ["Nobr"] = 4700, ["Nobreak"] = 28000, ["Nochange"] = 2400, ["Noindex"] = 4800, ["Noitalic"] = 4500, ["Noitalic/styles.css"] = 4500, ["Nom"] = 40000, ["Nominated"] = 7100, ["Non-English-language_text_category"] = 2500, ["Non-admin_closure"] = 2800, ["Non-diffusing_subcategory"] = 13000, ["Non-free_2D_art"] = 7200, ["Non-free_3D_art"] = 2500, ["Non-free_album_cover"] = 201000, ["Non-free_audio_sample"] = 8400, ["Non-free_biog-pic"] = 25000, ["Non-free_book_cover"] = 55000, ["Non-free_character"] = 2400, ["Non-free_comic"] = 11000, ["Non-free_fair_use"] = 17000, ["Non-free_fair_use_in"] = 14000, ["Non-free_film_poster"] = 24000, ["Non-free_film_screenshot"] = 5000, ["Non-free_game_cover"] = 7400, ["Non-free_game_screenshot"] = 4600, ["Non-free_historic_image"] = 16000, ["Non-free_image_data"] = 8600, ["Non-free_image_rationale"] = 9800, ["Non-free_in_US"] = 2100, ["Non-free_logo"] = 162000, ["Non-free_magazine_cover"] = 7700, ["Non-free_media"] = 729000, ["Non-free_media_data"] = 9800, ["Non-free_media_rationale"] = 11000, ["Non-free_movie_poster"] = 22000, ["Non-free_newspaper_image"] = 2000, ["Non-free_poster"] = 80000, ["Non-free_promotional"] = 8800, ["Non-free_school_logo"] = 2400, ["Non-free_seal"] = 4400, ["Non-free_symbol"] = 6100, ["Non-free_television_screenshot"] = 16000, ["Non-free_title-card"] = 5600, ["Non-free_use_rationale"] = 461000, ["Non-free_use_rationale/styles.css"] = 680000, ["Non-free_use_rationale_2"] = 211000, ["Non-free_use_rationale_album_cover"] = 134000, ["Non-free_use_rationale_book_cover"] = 19000, ["Non-free_use_rationale_logo"] = 94000, ["Non-free_use_rationale_poster"] = 51000, ["Non-free_use_rationale_title-card"] = 2700, ["Non-free_use_rationale_video_cover"] = 5800, ["Non-free_use_rationale_video_game_cover"] = 10000, ["Non-free_video_cover"] = 16000, ["Non-free_video_game_cover"] = 21000, ["Non-free_video_game_cover/platform"] = 21000, ["Non-free_video_game_screenshot"] = 10000, ["Non-free_video_game_screenshot/platform"] = 9600, ["Non-free_with_NC"] = 2700, ["Non-free_with_permission"] = 2100, ["Nonspecific"] = 2200, ["Nonumtoc"] = 2700, ["Nonumtoc/styles.css"] = 2700, ["Noping"] = 366000, ["Noprint"] = 2900, ["Noredirect"] = 8300, ["Normal"] = 5900, ["Normalwraplink"] = 3500, ["NorthAmNative"] = 2000, ["North_America_topic"] = 3500, ["Northern_Ireland_tasks"] = 19000, ["Nospam"] = 20000, ["Not-PD-US-expired-min-year"] = 26000, ["Not_a_ballot"] = 7700, ["Not_a_forum"] = 7700, ["Not_a_typo"] = 11000, ["Not_around"] = 2900, ["Not_done"] = 20000, ["Notability"] = 63000, ["Notavote"] = 2100, ["Notdone"] = 5500, ["Note"] = 25000, ["NoteFoot"] = 3900, ["NoteTag"] = 3900, ["Note_label"] = 9000, ["Notelist"] = 183000, ["Notelist-lr"] = 3500, ["Notelist-ua"] = 6700, ["Notes"] = 6500, ["Noteslist"] = 3600, ["Notice"] = 113000, ["NovelsWikiProject"] = 19000, ["Nowiki_="] = 2300, ["Nowrap"] = 835000, ["Np"] = 2900, ["Npby"] = 2500, ["Nq"] = 3700, ["Nrut"] = 3600, ["Ns"] = 2600, ["Ns0"] = 107000, ["Ns_has_subpages"] = 2170000, ["Nts"] = 20000, ["Ntsh"] = 3300, ["Number_of_defined_parameters"] = 4800, ["Number_table_sorting"] = 34000, ["Number_table_sorting_hidden"] = 3300, ["Numero"] = 3500, ["Nutshell"] = 3900, ["Nw="] = 2300, ["Module:NUMBEROFSECTIONS"] = 4700, ["Module:Namespace_detect"] = 15900000, ["Module:Namespace_detect/config"] = 17000000, ["Module:Namespace_detect/data"] = 17000000, ["Module:National_squad"] = 54000, ["Module:Native_name"] = 91000, ["Module:Navbar"] = 5420000, ["Module:Navbar/configuration"] = 5420000, ["Module:Navbar/styles.css"] = 4770000, ["Module:Navbox"] = 4430000, ["Module:Navbox/configuration"] = 4430000, ["Module:Navbox/styles.css"] = 4430000, ["Module:Navbox_ice_hockey"] = 3100, ["Module:Navbox_top_and_bottom"] = 15000, ["Module:Navbox_with_collapsible_groups"] = 139000, ["Module:Navboxes"] = 55000, ["Module:Navseasoncats"] = 479000, ["Module:Nihongo"] = 104000, ["Module:No_ping"] = 447000, ["Module:Noinclude"] = 734000, ["Module:Ns_has_subpages"] = 2170000, ["Module:Number_table_sorting"] = 37000, } 39e43b2f7d7c960b9c86edd925fdfb685468d0e6 Main Page 0 1 1 2023-06-05T20:43:33Z MediaWiki default 1 Create main page wikitext text/x-wiki __NOTOC__ == Welcome to {{SITENAME}}! == This Main Page was created automatically and it seems it hasn't been replaced yet. === For the bureaucrat(s) of this wiki === Hello, and welcome to your new wiki! Thank you for choosing Miraheze for the hosting of your wiki, we hope you will enjoy our hosting. You can immediately start working on your wiki or whenever you want. Need help? No problem! We will help you with your wiki as needed. To start, try checking out these helpful links: * [[mw:Special:MyLanguage/Help:Contents|MediaWiki guide]] (e.g. navigation, editing, deleting pages, blocking users) * [[meta:Special:MyLanguage/FAQ|Miraheze FAQ]] * [[meta:Special:MyLanguage/Request features|Request settings changes on your wiki]]. (Extensions, Skin and Logo/Favicon changes should be done through [[Special:ManageWiki]] on your wiki, see [[meta:Special:MyLanguage/ManageWiki|ManageWiki]] for more information.) ==== I still don't understand X! ==== Well, that's no problem. Even if something isn't explained in the documentation/FAQ, we are still happy to help you. You can find us here: * [[meta:Special:MyLanguage/Help center|On our own Miraheze wiki]] * On [[phab:|Phabricator]] * On [https://miraheze.org/discord Discord] * On IRC in #miraheze on irc.libera.chat ([irc://irc.libera.chat/%23miraheze direct link]; [https://web.libera.chat/?channel=#miraheze webchat]) === For visitors of this wiki === Hello, the default Main Page of this wiki (this page) has not yet been replaced by the bureaucrat(s) of this wiki. The bureaucrat(s) might still be working on a Main Page, so please check again later! 21236ac3f8d65e5563b6da6b70815ca6bf1e6616 Template:Infobox character 10 2 3 2 2023-06-05T21:30:50Z Otonashi Ayana 2 1 revision imported wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{name}}}'''<br>{{{jname|}}} | header1 = Character Information | image = [[File:{{{image}}}|x350px]] | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{firstAppearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> <pre> {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = | age = | firstAppearance = | seiyu = | relations = }}</pre> 73810c458f02cc86aa3dfad3221d8354e30dc4e8 14 3 2023-06-05T21:38:55Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{name}}}'''<br>{{{jname|}}} | header1 = Character Information | image = [[File:{{{image}}}|x350px]] | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> <pre> {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> 6037bdf234857f4bfa07abd4da5ee9aa6c82927b Template:Infobox 10 3 5 4 2023-06-05T21:30:51Z Otonashi Ayana 2 1 revision imported wikitext text/x-wiki {{#invoke:Infobox|infobox}}<includeonly>{{template other|{{#ifeq:{{PAGENAME}}|Infobox||{{#ifeq:{{str left|{{SUBPAGENAME}}|7}}|Infobox|[[Category:Infobox templates|{{remove first word|{{SUBPAGENAME}}}}]]}}}}|}}</includeonly><noinclude> {{documentation}} <!-- Categories go in the /doc subpage, and interwikis go in Wikidata. --> </noinclude> 817a9f5b6524eced06a57bd1d5fd7179f9369bf2 Template:Template other 10 4 7 6 2023-06-05T21:30:51Z Otonashi Ayana 2 1 revision imported wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Template}} | template | other }} }} | template = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 06fb13d264df967b5232141067eb7d2b67372d76 Module:Infobox 828 5 9 8 2023-06-05T21:30:52Z Otonashi Ayana 2 1 revision imported Scribunto text/plain local p = {} local args = {} local origArgs = {} local root local empty_row_categories = {} local category_in_empty_row_pattern = '%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*]]' local has_rows = false local lists = { plainlist_t = { patterns = { '^plainlist$', '%splainlist$', '^plainlist%s', '%splainlist%s' }, found = false, styles = 'Plainlist/styles.css' }, hlist_t = { patterns = { '^hlist$', '%shlist$', '^hlist%s', '%shlist%s' }, found = false, styles = 'Hlist/styles.css' } } local function has_list_class(args_to_check) for _, list in pairs(lists) do if not list.found then for _, arg in pairs(args_to_check) do for _, pattern in ipairs(list.patterns) do if mw.ustring.find(arg or '', pattern) then list.found = true break end end if list.found then break end end end end end local function fixChildBoxes(sval, tt) local function notempty( s ) return s and s:match( '%S' ) end if notempty(sval) then local marker = '<span class=special_infobox_marker>' local s = sval -- start moving templatestyles and categories inside of table rows local slast = '' while slast ~= s do slast = s s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(%[%[%s*[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]%s*:[^]]*%]%])', '%2%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>%s*)(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)', '%2%1') end -- end moving templatestyles and categories inside of table rows s = mw.ustring.gsub(s, '(<%s*[Tt][Rr])', marker .. '%1') s = mw.ustring.gsub(s, '(</[Tt][Rr]%s*>)', '%1' .. marker) if s:match(marker) then s = mw.ustring.gsub(s, marker .. '%s*' .. marker, '') s = mw.ustring.gsub(s, '([\r\n]|-[^\r\n]*[\r\n])%s*' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '%s*([\r\n]|-)', '%1') s = mw.ustring.gsub(s, '(</[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '(<%s*[Tt][Aa][Bb][Ll][Ee][^<>]*>%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '^(%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, '([\r\n]%{|[^\r\n]*[\r\n]%s*)' .. marker, '%1') s = mw.ustring.gsub(s, marker .. '(%s*</[Tt][Aa][Bb][Ll][Ee]%s*>)', '%1') s = mw.ustring.gsub(s, marker .. '(%s*\n|%})', '%1') end if s:match(marker) then local subcells = mw.text.split(s, marker) s = '' for k = 1, #subcells do if k == 1 then s = s .. subcells[k] .. '</' .. tt .. '></tr>' elseif k == #subcells then local rowstyle = ' style="display:none"' if notempty(subcells[k]) then rowstyle = '' end s = s .. '<tr' .. rowstyle ..'><' .. tt .. ' colspan=2>\n' .. subcells[k] elseif notempty(subcells[k]) then if (k % 2) == 0 then s = s .. subcells[k] else s = s .. '<tr><' .. tt .. ' colspan=2>\n' .. subcells[k] .. '</' .. tt .. '></tr>' end end end end -- the next two lines add a newline at the end of lists for the PHP parser -- [[Special:Diff/849054481]] -- remove when [[:phab:T191516]] is fixed or OBE s = mw.ustring.gsub(s, '([\r\n][%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:][^\r\n]*)$', '%1\n') s = mw.ustring.gsub(s, '^([%*#;:])', '\n%1') s = mw.ustring.gsub(s, '^(%{%|)', '\n%1') return s else return sval end end -- Cleans empty tables local function cleanInfobox() root = tostring(root) if has_rows == false then root = mw.ustring.gsub(root, '<table[^<>]*>%s*</table>', '') end end -- Returns the union of the values of two tables, as a sequence. local function union(t1, t2) local vals = {} for k, v in pairs(t1) do vals[v] = true end for k, v in pairs(t2) do vals[v] = true end local ret = {} for k, v in pairs(vals) do table.insert(ret, k) end return ret end -- Returns a table containing the numbers of the arguments that exist -- for the specified prefix. For example, if the prefix was 'data', and -- 'data1', 'data2', and 'data5' exist, it would return {1, 2, 5}. local function getArgNums(prefix) local nums = {} for k, v in pairs(args) do local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -- Adds a row to the infobox, with either a header cell -- or a label/data cell combination. local function addRow(rowArgs) if rowArgs.header and rowArgs.header ~= '_BLANK_' then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class, args.headerclass }) root :tag('tr') :addClass(rowArgs.rowclass) :cssText(rowArgs.rowstyle) :tag('th') :attr('colspan', '2') :addClass('infobox-header') :addClass(rowArgs.class) :addClass(args.headerclass) -- @deprecated next; target .infobox-<name> .infobox-header :cssText(args.headerstyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.header, 'th')) if rowArgs.data then root:wikitext( '[[Category:Pages using infobox templates with ignored data cells]]' ) end elseif rowArgs.data and rowArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ rowArgs.rowclass, rowArgs.class }) local row = root:tag('tr') row:addClass(rowArgs.rowclass) row:cssText(rowArgs.rowstyle) if rowArgs.label then row :tag('th') :attr('scope', 'row') :addClass('infobox-label') -- @deprecated next; target .infobox-<name> .infobox-label :cssText(args.labelstyle) :cssText(rowArgs.rowcellstyle) :wikitext(rowArgs.label) :done() end local dataCell = row:tag('td') dataCell :attr('colspan', not rowArgs.label and '2' or nil) :addClass(not rowArgs.label and 'infobox-full-data' or 'infobox-data') :addClass(rowArgs.class) -- @deprecated next; target .infobox-<name> .infobox(-full)-data :cssText(rowArgs.datastyle) :cssText(rowArgs.rowcellstyle) :wikitext(fixChildBoxes(rowArgs.data, 'td')) else table.insert(empty_row_categories, rowArgs.data or '') end end local function renderTitle() if not args.title then return end has_rows = true has_list_class({args.titleclass}) root :tag('caption') :addClass('infobox-title') :addClass(args.titleclass) -- @deprecated next; target .infobox-<name> .infobox-title :cssText(args.titlestyle) :wikitext(args.title) end local function renderAboveRow() if not args.above then return end has_rows = true has_list_class({ args.aboveclass }) root :tag('tr') :tag('th') :attr('colspan', '2') :addClass('infobox-above') :addClass(args.aboveclass) -- @deprecated next; target .infobox-<name> .infobox-above :cssText(args.abovestyle) :wikitext(fixChildBoxes(args.above,'th')) end local function renderBelowRow() if not args.below then return end has_rows = true has_list_class({ args.belowclass }) root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-below') :addClass(args.belowclass) -- @deprecated next; target .infobox-<name> .infobox-below :cssText(args.belowstyle) :wikitext(fixChildBoxes(args.below,'td')) end local function addSubheaderRow(subheaderArgs) if subheaderArgs.data and subheaderArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ subheaderArgs.rowclass, subheaderArgs.class }) local row = root:tag('tr') row:addClass(subheaderArgs.rowclass) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-subheader') :addClass(subheaderArgs.class) :cssText(subheaderArgs.datastyle) :cssText(subheaderArgs.rowcellstyle) :wikitext(fixChildBoxes(subheaderArgs.data, 'td')) else table.insert(empty_row_categories, subheaderArgs.data or '') end end local function renderSubheaders() if args.subheader then args.subheader1 = args.subheader end if args.subheaderrowclass then args.subheaderrowclass1 = args.subheaderrowclass end local subheadernums = getArgNums('subheader') for k, num in ipairs(subheadernums) do addSubheaderRow({ data = args['subheader' .. tostring(num)], -- @deprecated next; target .infobox-<name> .infobox-subheader datastyle = args.subheaderstyle, rowcellstyle = args['subheaderstyle' .. tostring(num)], class = args.subheaderclass, rowclass = args['subheaderrowclass' .. tostring(num)] }) end end local function addImageRow(imageArgs) if imageArgs.data and imageArgs.data:gsub(category_in_empty_row_pattern, ''):match('^%S') then has_rows = true has_list_class({ imageArgs.rowclass, imageArgs.class }) local row = root:tag('tr') row:addClass(imageArgs.rowclass) local dataCell = row:tag('td') dataCell :attr('colspan', '2') :addClass('infobox-image') :addClass(imageArgs.class) :cssText(imageArgs.datastyle) :wikitext(fixChildBoxes(imageArgs.data, 'td')) else table.insert(empty_row_categories, imageArgs.data or '') end end local function renderImages() if args.image then args.image1 = args.image end if args.caption then args.caption1 = args.caption end local imagenums = getArgNums('image') for k, num in ipairs(imagenums) do local caption = args['caption' .. tostring(num)] local data = mw.html.create():wikitext(args['image' .. tostring(num)]) if caption then data :tag('div') :addClass('infobox-caption') -- @deprecated next; target .infobox-<name> .infobox-caption :cssText(args.captionstyle) :wikitext(caption) end addImageRow({ data = tostring(data), -- @deprecated next; target .infobox-<name> .infobox-image datastyle = args.imagestyle, class = args.imageclass, rowclass = args['imagerowclass' .. tostring(num)] }) end end -- When autoheaders are turned on, preprocesses the rows local function preprocessRows() if not args.autoheaders then return end local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) local lastheader for k, num in ipairs(rownums) do if args['header' .. tostring(num)] then if lastheader then args['header' .. tostring(lastheader)] = nil end lastheader = num elseif args['data' .. tostring(num)] and args['data' .. tostring(num)]:gsub( category_in_empty_row_pattern, '' ):match('^%S') then local data = args['data' .. tostring(num)] if data:gsub(category_in_empty_row_pattern, ''):match('%S') then lastheader = nil end end end if lastheader then args['header' .. tostring(lastheader)] = nil end end -- Gets the union of the header and data argument numbers, -- and renders them all in order local function renderRows() local rownums = union(getArgNums('header'), getArgNums('data')) table.sort(rownums) for k, num in ipairs(rownums) do addRow({ header = args['header' .. tostring(num)], label = args['label' .. tostring(num)], data = args['data' .. tostring(num)], datastyle = args.datastyle, class = args['class' .. tostring(num)], rowclass = args['rowclass' .. tostring(num)], -- @deprecated next; target .infobox-<name> rowclass rowstyle = args['rowstyle' .. tostring(num)], rowcellstyle = args['rowcellstyle' .. tostring(num)] }) end end local function renderNavBar() if not args.name then return end has_rows = true root :tag('tr') :tag('td') :attr('colspan', '2') :addClass('infobox-navbar') :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, }) end local function renderItalicTitle() local italicTitle = args['italic title'] and mw.ustring.lower(args['italic title']) if italicTitle == '' or italicTitle == 'force' or italicTitle == 'yes' then root:wikitext(require('Module:Italic title')._main({})) end end -- Categories in otherwise empty rows are collected in empty_row_categories. -- This function adds them to the module output. It is not affected by -- args.decat because this module should not prevent module-external categories -- from rendering. local function renderEmptyRowCategories() for _, s in ipairs(empty_row_categories) do root:wikitext(s) end end -- Render tracking categories. args.decat == turns off tracking categories. local function renderTrackingCategories() if args.decat == 'yes' then return end if args.child == 'yes' then if args.title then root:wikitext( '[[Category:Pages using embedded infobox templates with the title parameter]]' ) end elseif #(getArgNums('data')) == 0 and mw.title.getCurrentTitle().namespace == 0 then root:wikitext('[[Category:Articles using infobox templates with no data rows]]') end end --[=[ Loads the templatestyles for the infobox. TODO: FINISH loading base templatestyles here rather than in MediaWiki:Common.css. There are 4-5000 pages with 'raw' infobox tables. See [[Mediawiki_talk:Common.css/to_do#Infobox]] and/or come help :). When we do this we should clean up the inline CSS below too. Will have to do some bizarre conversion category like with sidebar. ]=] local function loadTemplateStyles() local frame = mw.getCurrentFrame() local hlist_templatestyles = '' if lists.hlist_t.found then hlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.hlist_t.styles } } end local plainlist_templatestyles = '' if lists.plainlist_t.found then plainlist_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = lists.plainlist_t.styles } } end -- See function description local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Infobox/styles.css' } } local templatestyles = '' if args['templatestyles'] then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ -- hlist -> plainlist -> base is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because the rows of interest invoking -- each class may not be on a specific page hlist_templatestyles, plainlist_templatestyles, base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles }) end -- common functions between the child and non child cases local function structure_infobox_common() renderSubheaders() renderImages() preprocessRows() renderRows() renderBelowRow() renderNavBar() renderItalicTitle() renderEmptyRowCategories() renderTrackingCategories() cleanInfobox() end -- Specify the overall layout of the infobox, with special settings if the -- infobox is used as a 'child' inside another infobox. local function _infobox() if args.child ~= 'yes' then root = mw.html.create('table') root :addClass(args.subbox == 'yes' and 'infobox-subbox' or 'infobox') :addClass(args.bodyclass) -- @deprecated next; target .infobox-<name> :cssText(args.bodystyle) has_list_class({ args.bodyclass }) renderTitle() renderAboveRow() else root = mw.html.create() root :wikitext(args.title) end structure_infobox_common() return loadTemplateStyles() .. root end -- If the argument exists and isn't blank, add it to the argument table. -- Blank arguments are treated as nil to match the behaviour of ParserFunctions. local function preprocessSingleArg(argName) if origArgs[argName] and origArgs[argName] ~= '' then args[argName] = origArgs[argName] end end -- Assign the parameters with the given prefixes to the args table, in order, in -- batches of the step size specified. This is to prevent references etc. from -- appearing in the wrong order. The prefixTable should be an array containing -- tables, each of which has two possible fields, a "prefix" string and a -- "depend" table. The function always parses parameters containing the "prefix" -- string, but only parses parameters in the "depend" table if the prefix -- parameter is present and non-blank. local function preprocessArgs(prefixTable, step) if type(prefixTable) ~= 'table' then error("Non-table value detected for the prefix table", 2) end if type(step) ~= 'number' then error("Invalid step value detected", 2) end -- Get arguments without a number suffix, and check for bad input. for i,v in ipairs(prefixTable) do if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then error('Invalid input detected to preprocessArgs prefix table', 2) end preprocessSingleArg(v.prefix) -- Only parse the depend parameter if the prefix parameter is present -- and not blank. if args[v.prefix] and v.depend then for j, dependValue in ipairs(v.depend) do if type(dependValue) ~= 'string' then error('Invalid "depend" parameter value detected in preprocessArgs') end preprocessSingleArg(dependValue) end end end -- Get arguments with number suffixes. local a = 1 -- Counter variable. local moreArgumentsExist = true while moreArgumentsExist == true do moreArgumentsExist = false for i = a, a + step - 1 do for j,v in ipairs(prefixTable) do local prefixArgName = v.prefix .. tostring(i) if origArgs[prefixArgName] then -- Do another loop if any arguments are found, even blank ones. moreArgumentsExist = true preprocessSingleArg(prefixArgName) end -- Process the depend table if the prefix argument is present -- and not blank, or we are processing "prefix1" and "prefix" is -- present and not blank, and if the depend table is present. if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then for j,dependValue in ipairs(v.depend) do local dependArgName = dependValue .. tostring(i) preprocessSingleArg(dependArgName) end end end end a = a + step end end -- Parse the data parameters in the same order that the old {{infobox}} did, so -- that references etc. will display in the expected places. Parameters that -- depend on another parameter are only processed if that parameter is present, -- to avoid phantom references appearing in article reference lists. local function parseDataParameters() preprocessSingleArg('autoheaders') preprocessSingleArg('child') preprocessSingleArg('bodyclass') preprocessSingleArg('subbox') preprocessSingleArg('bodystyle') preprocessSingleArg('title') preprocessSingleArg('titleclass') preprocessSingleArg('titlestyle') preprocessSingleArg('above') preprocessSingleArg('aboveclass') preprocessSingleArg('abovestyle') preprocessArgs({ {prefix = 'subheader', depend = {'subheaderstyle', 'subheaderrowclass'}} }, 10) preprocessSingleArg('subheaderstyle') preprocessSingleArg('subheaderclass') preprocessArgs({ {prefix = 'image', depend = {'caption', 'imagerowclass'}} }, 10) preprocessSingleArg('captionstyle') preprocessSingleArg('imagestyle') preprocessSingleArg('imageclass') preprocessArgs({ {prefix = 'header'}, {prefix = 'data', depend = {'label'}}, {prefix = 'rowclass'}, {prefix = 'rowstyle'}, {prefix = 'rowcellstyle'}, {prefix = 'class'} }, 50) preprocessSingleArg('headerclass') preprocessSingleArg('headerstyle') preprocessSingleArg('labelstyle') preprocessSingleArg('datastyle') preprocessSingleArg('below') preprocessSingleArg('belowclass') preprocessSingleArg('belowstyle') preprocessSingleArg('name') -- different behaviour for italics if blank or absent args['italic title'] = origArgs['italic title'] preprocessSingleArg('decat') preprocessSingleArg('templatestyles') preprocessSingleArg('child templatestyles') preprocessSingleArg('grandchild templatestyles') end -- If called via #invoke, use the args passed into the invoking template. -- Otherwise, for testing purposes, assume args are being passed directly in. function p.infobox(frame) if frame == mw.getCurrentFrame() then origArgs = frame:getParent().args else origArgs = frame end parseDataParameters() return _infobox() end -- For calling via #invoke within a template function p.infoboxTemplate(frame) origArgs = {} for k,v in pairs(frame.args) do origArgs[k] = mw.text.trim(v) end parseDataParameters() return _infobox() end return p 0ddb7e5c8426d67cd589b710efb9912ddfb67fea Module:Infobox/styles.css 828 6 11 10 2023-06-05T21:30:52Z Otonashi Ayana 2 1 revision imported text text/plain /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; } .infobox-3cols-child { margin: auto; } .infobox .navbar { font-size: 100%; } /* T281642 */ body.skin-minerva .infobox-header, body.skin-minerva .infobox-subheader, body.skin-minerva .infobox-above, body.skin-minerva .infobox-title, body.skin-minerva .infobox-image, body.skin-minerva .infobox-full-data, body.skin-minerva .infobox-below { text-align: center; } @media screen and (max-width:840px){ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; /* @noflip */ margin-left: auto; margin-right:auto; padding: 0.2em; margin-bottom:1em; } .infobox-image{ text-align:center; } } 96007587f0b8d711d3fb79a06ec4a51c7eeb4007 12 11 2023-06-05T21:34:22Z Otonashi Ayana 2 Otonashi Ayana changed the content model of the page [[Module:Infobox/styles.css]] from "plain text" to "Sanitized CSS" sanitized-css text/css /* {{pp|small=y}} */ /* * This TemplateStyles sheet deliberately does NOT include the full set of * infobox styles. We are still working to migrate all of the manual * infoboxes. See [[MediaWiki talk:Common.css/to do#Infobox]] * DO NOT ADD THEM HERE */ /* * not strictly certain these styles are necessary since the modules now * exclusively output infobox-subbox or infobox, not both * just replicating the module faithfully */ .infobox-subbox { padding: 0; border: none; margin: -3px; width: auto; min-width: 100%; font-size: 100%; clear: none; float: none; background-color: transparent; } .infobox-3cols-child { margin: auto; } .infobox .navbar { font-size: 100%; } /* T281642 */ body.skin-minerva .infobox-header, body.skin-minerva .infobox-subheader, body.skin-minerva .infobox-above, body.skin-minerva .infobox-title, body.skin-minerva .infobox-image, body.skin-minerva .infobox-full-data, body.skin-minerva .infobox-below { text-align: center; } @media screen and (max-width:840px){ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; /* @noflip */ margin-left: auto; margin-right:auto; padding: 0.2em; margin-bottom:1em; } .infobox-image{ text-align:center; } } 96007587f0b8d711d3fb79a06ec4a51c7eeb4007 MediaWiki:Common.css 8 7 13 2023-06-05T21:35:57Z Otonashi Ayana 2 Created page with "/* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for..." css text/css /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ db112051df4a651c718e6bb55829dc832e41d60f Template:Plainlist 10 8 16 15 2023-06-05T21:41:48Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Plainlist]] wikitext text/x-wiki <templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}">{{#if:{{{1|}}}| {{{1}}} </div>}}<noinclude></div> {{documentation}} </noinclude> 8ca89b36606f7babc854ca4f296b3cea3e358a07 Template:Pagelang 10 9 18 17 2023-06-05T21:41:49Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Pagelang]] wikitext text/x-wiki {{#ifeq:{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}}|en |{{#ifeq:{{#titleparts:{{{1|{{PAGENAME}}}}}||-1}}|en |{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}} }} |{{#invoke:Template translation|getLanguageSubpage|{{{1|}}}}} }}<noinclude> {{Documentation}} </noinclude> c4102d40356283246cbc855bef4754c0a15b4bea Module:Template translation 828 10 20 19 2023-06-05T21:41:49Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Template_translation]] Scribunto text/plain local this = {} function this.checkLanguage(subpage, default) --[[Check first if there's an any invalid character that would cause the mw.language.isKnownLanguageTag function() to throw an exception: - all ASCII controls in [\000-\031\127], - double quote ("), sharp sign (#), ampersand (&), apostrophe ('), - slash (/), colon (:), semicolon (;), lower than (<), greater than (>), - brackets and braces ([, ], {, }), pipe (|), backslash (\\) All other characters are accepted, including space and all non-ASCII characters (including \192, which is invalid in UTF-8). --]] if mw.language.isValidCode(subpage) and mw.language.isKnownLanguageTag(subpage) --[[However "SupportedLanguages" are too restrictive, as they discard many valid BCP47 script variants (only because MediaWiki still does not define automatic transliterators for them, e.g. "en-dsrt" or "fr-brai" for French transliteration in Braille), and country variants, (useful in localized data, even if they are no longer used for translations, such as zh-cn, also useful for legacy codes). We want to avoid matching subpagenames containing any uppercase letter, (even if they are considered valid in BCP 47, in which they are case-insensitive; they are not "SupportedLanguages" for MediaWiki, so they are not "KnownLanguageTags" for MediaWiki). To be more restrictive, we exclude any character * that is not ASCII and not a lowercase letter, minus-hyphen, or digit, or does not start by a letter or does not finish by a letter or digit; * or that has more than 8 characters between hyphens; * or that has two hyphens; * or with specific uses in template subpages and unusable as languages. --]] or string.find(subpage, "^[%l][%-%d%l]*[%d%l]$") ~= nil and string.find(subpage, "[%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l][%d%l]") == nil and string.find(subpage, "%-%-") == nil and subpage ~= "doc" and subpage ~= "layout" and subpage ~= "sandbox" and subpage ~= "testcases" and subpage ~= "init" and subpage ~= "preload" and subpage ~= "subpage" and subpage ~= "subpage2" and subpage ~= "sub-subpage" and subpage ~= "sub-sub-subpage" and subpage ~= "sub-sub-sub-subpage" then return subpage end -- Otherwise there's currently no known language subpage return default end --[[Get the last subpage of an arbitrary page if it is a translation. To be used from templates. ]] function this.getLanguageSubpage(frame) local title = frame and frame.args[1] if not title or title == '' then title = mw.title.getCurrentTitle() end return this._getLanguageSubpage(title) end --[[Get the last subpage of an arbitrary page if it is a translation. To be used from Lua. ]] function this._getLanguageSubpage(title) if type(title) == 'string' then title = mw.title.new(title) end if not title then -- invalid title return mw.language.getContentLanguage():getCode() end --[[This code does not work in all namespaces where the Translate tool works. -- It works in the main namespace on Meta because it allows subpages there -- It would not work in the main namespace of English Wikipedia (but the -- articles are monolignual on that wiki). -- On Meta-Wiki the main space uses subpages and its pages are translated. -- The Translate tool allows translatng pages in all namespaces, even if -- the namespace officially does not have subpages. -- On Meta-Wiki the Category namespace still does not have subpages enabled, -- even if they would be very useful for categorizing templates, that DO have -- subpages (for documentatio and tstboxes pages). This is a misconfiguration -- bug of Meta-Wiki. The work-around is to split the full title and then -- get the last titlepart. local subpage = title.subpageText --]] local titleparts = mw.text.split(title.fullText, '/') local subpage = titleparts[#titleparts] return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) end --[[Get the last subpage of the current page if it is a translation. ]] function this.getCurrentLanguageSubpage() return this._getLanguageSubpage(mw.title.getCurrentTitle()) end --[[Get the first part of the language code of the subpage, before the '-'. ]] function this.getMainLanguageSubpage() parts = mw.text.split( this.getCurrentLanguageSubpage(), '-' ) return parts[1] end --[[Get the last subpage of the current frame if it is a translation. Not used locally. ]] function this.getFrameLanguageSubpage(frame) return this._getLanguageSubpage(frame:getParent():getTitle()) end --[[Get the language of the current page. Not used locally. ]] function this.getLanguage() local subpage = mw.title.getCurrentTitle().subpageText return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) end --[[Get the language of the current frame. Not used locally. ]] function this.getFrameLanguage(frame) local titleparts = mw.text.split(frame:getParent():getTitle(), '/') local subpage = titleparts[#titleparts] return this.checkLanguage(subpage, mw.language.getContentLanguage():getCode()) end function this.title(namespace, basepagename, subpage) local message, title local pagename = basepagename if (subpage or '') ~= '' then pagename = pagename .. '/' .. subpage end local valid, title = xpcall(function() return mw.title.new(pagename, namespace) -- costly end, function(msg) -- catch undocumented exception (!?) -- thrown when namespace does not exist. The doc still -- says it should return a title, even in that case... message = msg end) if valid and title ~= nil and (title.id or 0) ~= 0 then return title end return { -- "pseudo" mw.title object with id = nil in case of error prefixedText = pagename, -- the only property we need below message = message -- only for debugging } end --[[If on a translation subpage (like Foobar/de), this function returns a given template in the same language, if the translation is available. Otherwise, the template is returned in its default language, without modification. This is aimed at replacing the current implementation of Template:TNTN. This version does not expand the returned template name: this solves the problem of self-recursion in TNT when translatable templates need themselves to transclude other translable templates (such as Tnavbar). ]] function this.getTranslatedTemplate(frame, withStatus) local args = frame.args local pagename = args['template'] --[[Check whether the pagename is actually in the Template namespace, or if we're transcluding a main-namespace page. (added for backward compatibility of Template:TNT) ]] local title local namespace = args['tntns'] or '' if (namespace ~= '') -- Checks for tntns parameter for custom ns. then title = this.title(namespace, pagename) -- Costly else -- Supposes that set page is in ns10. namespace = 'Template' title = this.title(namespace, pagename) -- Costly if title.id == nil then -- not found in the Template namespace, assume the main namespace (for backward compatibility) namespace = '' title = this.title(namespace, pagename) -- Costly end end -- Get the last subpage and check if it matches a known language code. local subpage = args['uselang'] or '' if (subpage == '') then subpage = this.getCurrentLanguageSubpage() end if (subpage == '') then -- Check if a translation of the pagename exists in English local newtitle = this.title(namespace, pagename, 'en') -- Costly -- Use the translation when it exists if newtitle.id ~= nil then title = newtitle end else -- Check if a translation of the pagename exists in that language local newtitle = this.title(namespace, pagename, subpage) -- Costly if newtitle.id == nil then -- Check if a translation of the pagename exists in English newtitle = this.title(namespace, pagename, 'en') -- Costly end -- Use the translation when it exists if newtitle.id ~= nil then title = newtitle end end -- At this point the title should exist if withStatus then -- status returned to Lua function below return title.prefixedText, title.id ~= nil else -- returned directly to MediaWiki return title.prefixedText end end --[[If on a translation subpage (like Foobar/de), this function renders a given template in the same language, if the translation is available. Otherwise, the template is rendered in its default language, without modification. This is aimed at replacing the current implementation of Template:TNT. Note that translatable templates cannot transclude themselves other translatable templates, as it will recurse on TNT. Use TNTN instead to return only the effective template name to expand externally, with template parameters also provided externally. ]] function this.renderTranslatedTemplate(frame) local title, found = this.getTranslatedTemplate(frame, true) -- At this point the title should exist prior to performing the expansion -- of the template, otherwise render a red link to the missing page -- (resolved in its assumed namespace). If we don't tet this here, a -- script error would be thrown. Returning a red link is consistant with -- MediaWiki behavior when attempting to transclude inexistant templates. if not found then return '[[' .. title .. ']]' end -- Copy args pseudo-table to a proper table so we can feed it to expandTemplate. -- Then render the pagename. local args = frame.args local pargs = (frame:getParent() or {}).args local arguments = {} if (args['noshift'] or '') == '' then for k, v in pairs(pargs) do -- numbered args >= 1 need to be shifted local n = tonumber(k) or 0 if (n > 0) then if (n >= 2) then arguments[n - 1] = v end else arguments[k] = v end end else -- special case where TNT is used as autotranslate -- (don't shift again what is shifted in the invokation) for k, v in pairs(pargs) do arguments[k] = v end end arguments['template'] = title -- override the existing parameter of the base template name supplied with the full name of the actual template expanded arguments['tntns'] = nil -- discard the specified namespace override arguments['uselang'] = args['uselang'] -- argument forwarded into parent frame arguments['noshift'] = args['noshift'] -- argument forwarded into parent frame return frame:expandTemplate{title = ':' .. title, args = arguments} end --[[A helper for mocking TNT in Special:TemplateSandbox. TNT breaks TemplateSandbox; mocking it with this method means templates won't be localized but at least TemplateSandbox substitutions will work properly. Won't work with complex uses. ]] function this.mockTNT(frame) local pargs = (frame:getParent() or {}).args local arguments = {} for k, v in pairs(pargs) do -- numbered args >= 1 need to be shifted local n = tonumber(k) or 0 if (n > 0) then if (n >= 2) then arguments[n - 1] = v end else arguments[k] = v end end if not pargs[1] then return '' end return frame:expandTemplate{title = 'Template:' .. pargs[1], args = arguments} end return this d8b891aad5c405bb237bd0a79d564ccb6b8e946b Module:Message box 828 11 22 21 2023-06-05T21:41:50Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box]] Scribunto text/plain -- This is a meta-module for producing message box templates, including -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}. -- Load necessary modules. require('strict') local getArgs local yesno = require('Module:Yesno') -- Get a language object for formatDate and ucfirst. local lang = mw.language.getContentLanguage() -- Define constants local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} local TEMPLATE_STYLES = 'Module:Message box/%s.css' -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} obj.boxType = boxType -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] obj.boxType = DEMOSPACES[demospace] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox obj.boxType = 'tmbox' else -- default to ombox obj.cfg = cfg.ombox obj.boxType = 'ombox' end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace obj.boxType = 'ambox' elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace obj.boxType = 'imbox' elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace obj.boxType = 'cmbox' else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace obj.boxType = 'tmbox' else obj.cfg = cfg.ombox -- other namespaces or invalid input obj.boxType = 'ombox' end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end self.classes[class] = 1 end function MessageBox:removeClass(class) if not class then return nil end self.classes[class] = nil end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end local plainlinks = yesno(args.plainlinks) if plainlinks == true then self:addClass('plainlinks') elseif plainlinks == false then self:removeClass('plainlinks') end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell if cfg.imageEmptyCellStyle then self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px' end -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end -- Add TemplateStyles root:wikitext(mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = TEMPLATE_STYLES:format(self.boxType) }, }) -- Create the box table. local boxTable -- Check for fmbox because not all interface messages have mw-parser-output -- which is necessary for TemplateStyles. Add the wrapper class if it is and -- then start the actual mbox, else start the mbox. if self.boxType == 'fmbox' then boxTable = root:tag('div') :addClass('mw-parser-output') :tag('table') else boxTable = root:tag('table') end boxTable:attr('id', self.id or nil) for class, _ in pairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):css('width', '52px') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') :cssText(self.imageEmptyCellStyle or nil) end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) and not self.isSmall then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('small') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):css('width', '52px') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :css('text-align', 'center') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) fcf2586b774e6db72e0a2837019f5b445124ddc4 Module:Yesno 828 12 24 23 2023-06-05T21:41:50Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Yesno]] Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end f767643e7d12126d020d88d662a3dd057817b9dc Module:Arguments 828 13 26 25 2023-06-05T21:41:51Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Arguments]] Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 3134ecce8429b810d445e29eae115e2ae4c36c53 Module:Message box/configuration 828 14 28 27 2023-06-05T21:41:51Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box/configuration]] Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[Module:Message box]]. -- -------------------------------------------------------------------------------- return { ambox = { types = { speedy = { class = 'ambox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'ambox-delete', image = 'OOjs UI icon alert-destructive.svg' }, warning = { -- alias for content class = 'ambox-content', image = 'OOjs UI icon notice-warning.svg' }, content = { class = 'ambox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'ambox-style', image = 'Edit-clear.svg' }, move = { class = 'ambox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ambox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ambox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'}, allowSmall = true, smallParam = 'left', smallClass = 'mbox-small-left', substCheck = true, classes = {'metadata', 'plainlinks', 'ambox'}, imageEmptyCell = true, imageCheckBlank = true, imageSmallSize = '20x20px', imageCellDiv = true, useCollapsibleTextFields = true, imageRightNone = true, sectionDefault = 'article', allowMainspaceCategories = true, templateCategory = 'Article message templates', templateCategoryRequireName = true, templateErrorCategory = nil, templateErrorParamsToCheck = {'issue', 'fix', 'subst'} }, cmbox = { types = { speedy = { class = 'cmbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'cmbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'cmbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'cmbox-style', image = 'Edit-clear.svg' }, move = { class = 'cmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'cmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'cmbox-notice', image = 'OOjs UI icon information-progressive.svg' }, caution = { class = 'cmbox-style', image = 'Ambox warning yellow.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'cmbox'}, imageEmptyCell = true }, fmbox = { types = { warning = { class = 'fmbox-warning', image = 'OOjs UI icon clock-destructive.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'OOjs UI icon information-progressive.svg' }, system = { class = 'fmbox-system', image = 'OOjs UI icon information-progressive.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'plainlinks', 'fmbox'}, imageEmptyCell = false, imageRightNone = false }, imbox = { types = { speedy = { class = 'imbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'imbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'imbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'imbox-style', image = 'Edit-clear.svg' }, move = { class = 'imbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'imbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, license = { class = 'imbox-license licensetpl', image = 'Imbox license.png' -- @todo We need an SVG version of this }, featured = { class = 'imbox-featured', image = 'Cscr-featured.svg' }, notice = { class = 'imbox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'imbox'}, usePlainlinksParam = true, imageEmptyCell = true, below = true, templateCategory = 'File message boxes' }, ombox = { types = { speedy = { class = 'ombox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'ombox-delete', image = 'OOjs UI icon alert-destructive.svg' }, warning = { -- alias for content class = 'ombox-content', image = 'OOjs UI icon notice-warning.svg' }, content = { class = 'ombox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ombox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ombox-notice', image = 'OOjs UI icon information-progressive.svg' }, critical = { class = 'mbox-critical', image = 'OOjs UI icon clock-destructive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'ombox'}, allowSmall = true, imageEmptyCell = true, imageRightNone = true }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'tmbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'tmbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, imageEmptyCellStyle = true, templateCategory = 'Talk message boxes' } } d8cf419a57983f67944903d17535c0ee0780ceb6 Template:Documentation 10 15 30 29 2023-06-05T21:41:51Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Documentation]] wikitext text/x-wiki <noinclude> <languages/> </noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude> {{documentation|content= {{Lua|Module:Documentation}} <translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate> <translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate> <translate> ==Usage== <!--T:2--> ===Customizing display=== <!--T:3--> <!--T:4--> Overrides exist to customize the output in special cases: </translate> * <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate> <translate> ==Rationale== <!--T:6--> </translate> <translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate> <translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate> <translate> ==See also== <!--T:9--> </translate> * <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate> * {{tim|Documentation}} * <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate> }} [[Category:Formatting templates{{#translation:}}|Template documentation]] [[Category:Template documentation{{#translation:}}| ]] </noinclude><includeonly>{{#if:{{{content|}}}| [[Category:Template documentation pages{{#translation:}}]] }}</includeonly> e9a25c87d40f5882dd425c83ed4d3be628082f3c Template:Documentation/en 10 16 32 31 2023-06-05T21:41:51Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Documentation/en]] wikitext text/x-wiki <noinclude> <languages/> </noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude> {{documentation|content= {{Lua|Module:Documentation}} This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page. It is intended for pages which are [[Special:MyLanguage/Help:Transclusion|transcluded]] in other pages, i.e. templates, whether in the template namespace or not. ==Usage== ===Customizing display=== Overrides exist to customize the output in special cases: * <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - change the text of the "documentation" heading. If this is set to blank, the entire heading line (including the first [edit] link) will also disappear. ==Rationale== This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories. It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[:en:Special:Diff/69888944|developer's explanation]]). ==See also== * [[w:Template:Documentation subpage]] * {{tim|Documentation}} * [[w:Wikipedia:Template documentation]] }} [[Category:Formatting templates{{#translation:}}|Template documentation]] [[Category:Template documentation{{#translation:}}| ]] </noinclude><includeonly>{{#if:{{{content|}}}| [[Category:Template documentation pages{{#translation:}}]] }}</includeonly> ea09a0702078c03b055fa66d2628126da3e3c062 Template:Uses TemplateStyles 10 17 34 33 2023-06-05T21:41:52Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Uses_TemplateStyles]] wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Uses TemplateStyles|main}}</includeonly></onlyinclude> {{Uses TemplateStyles|Template:Uses TemplateStyles/example.css|nocat=true}} {{documentation}} 91689f58ed39c0b53e3fadf3edb76166ba33a964 Template:Documentation subpage 10 18 36 35 2023-06-05T21:41:52Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Documentation_subpage]] wikitext text/x-wiki <noinclude> <languages/> </noinclude>{{#switch:<translate></translate> | = <includeonly><!-- -->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]] | text = '''<translate><!--T:4--> This is a [[w:Wikipedia:Template documentation|documentation]] [[<tvar name=2>Special:MyLanguage/Help:Subpages</tvar>|subpage]] for <tvar name=1>{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}</tvar>.</translate>'''<br /><!-- -->{{#if:{{{text2|}}}{{{text1|}}} |<translate><!--T:5--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{{text2|{{{text1}}}}}}</tvar>.</translate> |<translate><!--T:10--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{SUBJECTSPACE}}</tvar> page.</translate> }} }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- -->{{#if:{{{inhibit|}}} |<!--(don't categorize)--> | <includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} | Template | Project = Template | Module = Module | User = User | #default = MediaWiki }} documentation pages{{#translation:}}]] | [[Category:Documentation subpages without corresponding pages{{#translation:}}]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{Documentation|content= <translate> == Usage == <!--T:6--> <!--T:7--> Use this template on Template Documentation subpage (/doc). == See also == <!--T:8--> </translate> *{{tl|Documentation}} *{{tl|tl}} }} </noinclude> 0d6a10a903dbd572fffeb01aff5983d9b3abc65c Template:Documentation subpage/en 10 19 38 37 2023-06-05T21:41:52Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Documentation_subpage/en]] wikitext text/x-wiki <noinclude> <languages/> </noinclude>{{#switch: | = <includeonly><!-- -->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]] | text = '''This is a [[w:Wikipedia:Template documentation|documentation]] [[Special:MyLanguage/Help:Subpages|subpage]] for {{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}.'''<br /><!-- -->{{#if:{{{text2|}}}{{{text1|}}} |It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{{text2|{{{text1}}}}}}. |It contains usage information, [[Special:MyLanguage/Help:Categories|categories]] and other content that is not part of the original {{SUBJECTSPACE}} page. }} }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- -->{{#if:{{{inhibit|}}} |<!--(don't categorize)--> | <includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} | Template | Project = Template | Module = Module | User = User | #default = MediaWiki }} documentation pages{{#translation:}}]] | [[Category:Documentation subpages without corresponding pages{{#translation:}}]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{Documentation|content= == Usage == Use this template on Template Documentation subpage (/doc). == See also == *{{tl|Documentation}} *{{tl|tl}} }} </noinclude> 7ed5cbfd5118b37933b2c38487c1ab00f969bf46 Template:IsDocSubpage 10 20 40 39 2023-06-05T21:41:53Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:IsDocSubpage]] wikitext text/x-wiki <onlyinclude><includeonly>{{#ifexpr: ( {{#ifeq:{{lc:{{SUBPAGENAME}}}}|{{lc:{{{override|doc}}}}}|1|0}} or ( {{#ifeq:{{lc:{{#titleparts:{{FULLPAGENAME}}|-1|-2}}}}|{{lc:{{{override|doc}}}}}|1|0}} and {{#if:{{#translation:}}|1|0}} ) )<!-- -->|{{{true|1}}}<!-- -->|{{{false|}}}<!-- -->}}</includeonly></onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 47b5d5a2fb89240a721f8874924170f791de93b2 Template:TemplateData header 10 21 42 41 2023-06-05T21:41:55Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:TemplateData_header]] wikitext text/x-wiki <noinclude> <languages/> <onlyinclude>{{#switch:<translate></translate> |= <div class="templatedata-header"><!-- -->{{#if:{{yesno|{{{editlinks|}}}}}<!-- -->|{{#ifexpr:<!-- -->{{#if:{{{docpage|}}}<!-- -->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!-- -->|not{{IsDocSubpage|false=0}}<!-- -->}}<!-- -->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!-- -->}}<!-- -->}} {{#if:{{{noheader|}}}||<translate><!--T:1--> This is the [[<tvar name=1>Special:MyLanguage/Help:TemplateData</tvar>|TemplateData]] documentation for this template used by [[<tvar name=2>Special:MyLanguage/VisualEditor</tvar>|VisualEditor]] and other tools.</translate>}} '''{{{1|{{BASEPAGENAME}}}}}''' </div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!-- -->|{{#if:{{IsDocSubpage|false=}}<!-- -->|[[Category:TemplateData documentation{{#translation:}}]]<!-- -->|[[Category:Templates using TemplateData{{#translation:}}]]<!-- -->}}<!-- -->}}</includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}} }}</onlyinclude> {{Documentation|content= Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]]. == Usage == {{#tag:syntaxhighlight| ==TemplateData== or ==Parameters== or ==Usage== {{((}}TemplateData header{{))}} {{^(}}templatedata{{)^}}{ ... }{{^(}}/templatedata{{)^}} |lang=html }} Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]]. <dl><dd> {{TemplateData header|Template name}} </dd></dl> Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text. <dl><dd> {{TemplateData header|noheader=1}} </dd></dl> ==Parameters== {{TemplateData header/doc}} }} </noinclude> adcf50c8d3c870a44b190116c53a975926dc17d8 Template:TemplateData header/en 10 22 44 43 2023-06-05T21:41:55Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:TemplateData_header/en]] wikitext text/x-wiki <noinclude> <languages/> <onlyinclude>{{#switch: |= <div class="templatedata-header"><!-- -->{{#if:{{yesno|{{{editlinks|}}}}}<!-- -->|{{#ifexpr:<!-- -->{{#if:{{{docpage|}}}<!-- -->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!-- -->|not{{IsDocSubpage|false=0}}<!-- -->}}<!-- -->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!-- -->}}<!-- -->}} {{#if:{{{noheader|}}}||This is the [[Special:MyLanguage/Help:TemplateData|TemplateData]] documentation for this template used by [[Special:MyLanguage/VisualEditor|VisualEditor]] and other tools.}} '''{{{1|{{BASEPAGENAME}}}}}''' </div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!-- -->|{{#if:{{IsDocSubpage|false=}}<!-- -->|[[Category:TemplateData documentation{{#translation:}}]]<!-- -->|[[Category:Templates using TemplateData{{#translation:}}]]<!-- -->}}<!-- -->}}</includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}} }}</onlyinclude> {{Documentation|content= Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]]. == Usage == {{#tag:syntaxhighlight| ==TemplateData== or ==Parameters== or ==Usage== {{((}}TemplateData header{{))}} {{^(}}templatedata{{)^}}{ ... }{{^(}}/templatedata{{)^}} |lang=html }} Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]]. <dl><dd> {{TemplateData header|Template name}} </dd></dl> Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text. <dl><dd> {{TemplateData header|noheader=1}} </dd></dl> ==Parameters== {{TemplateData header/doc}} }} </noinclude> dce30fc2e3f9848db82a3e0290f65f2d61e1c5ed Template:Yesno 10 23 46 45 2023-06-05T21:41:55Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Yesno]] wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |false |0 = {{{no|<!-- null -->}}} | = {{{blank|{{{no|<!-- null -->}}}}}} |¬ = {{{¬|}}} |yes |y |true |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }}<noinclude> {{Documentation}} </noinclude> 166fab9e5411aacd02ca4c9e93fbc7bf6bcf26ac Template:Sandbox other 10 24 48 47 2023-06-05T21:41:56Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Sandbox_other]] wikitext text/x-wiki <onlyinclude>{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}</onlyinclude> {{documentation}} 44919af6b57ac865d8ec53eabfcb2cb9de35f157 Module:Documentation 828 25 50 49 2023-06-05T21:41:56Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Documentation]] Scribunto text/plain -- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs local messageBox = require('Module:Message box') -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local i18n = mw.loadData('Module:Documentation/i18n') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but are made available in the p -- table for testing purposes. ---------------------------------------------------------------------------- local function message(cfgKey, valArray, expectType) --[[ -- Gets a message from the cfg table and formats it if appropriate. -- The function raises an error if the value from the cfg table is not -- of the type expectType. The default type for expectType is 'string'. -- If the table valArray is present, strings such as $1, $2 etc. in the -- message are substituted with values from the table keys [1], [2] etc. -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." --]] local msg = cfg[cfgKey] expectType = expectType or 'string' if type(msg) ~= expectType then error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4) end local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal) return ret end p.message = message local function makeWikilink(page, display) if display then return mw.ustring.format('[[%s|%s]]', page, display) else return mw.ustring.format('[[%s]]', page) end end p.makeWikilink = makeWikilink local function makeCategoryLink(cat, sort) local catns = mw.site.namespaces[14].name return makeWikilink(catns .. ':' .. cat, sort) end p.makeCategoryLink = makeCategoryLink local function makeUrlLink(url, display) return mw.ustring.format('[%s %s]', url, display) end p.makeUrlLink = makeUrlLink local function makeToolbar(...) local ret = {} local lim = select('#', ...) if lim < 1 then return nil end for i = 1, lim do ret[#ret + 1] = select(i, ...) end return '<small style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>' end p.makeToolbar = makeToolbar ---------------------------------------------------------------------------- -- Argument processing ---------------------------------------------------------------------------- local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame, { valueFunc = function (key, value) if type(value) == 'string' then value = value:match('^%s*(.-)%s*$') -- Remove whitespace. if key == 'heading' or value ~= '' then return value else return nil end else return value end end }) return p[funcName](args) end end ---------------------------------------------------------------------------- -- Load TemplateStyles ---------------------------------------------------------------------------- p.main = function(frame) local parent = frame.getParent(frame) local output = p._main(parent.args) return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output end ---------------------------------------------------------------------------- -- Main function ---------------------------------------------------------------------------- function p._main(args) --[[ -- This function defines logic flow for the module. -- @args - table of arguments passed by the user -- -- Messages: -- 'main-div-id' --> 'template-documentation' -- 'main-div-classes' --> 'template-documentation iezoomfix' --]] local env = p.getEnvironment(args) local root = mw.html.create() root :wikitext(p._getModuleWikitext(args, env)) :wikitext(p.protectionTemplate(env)) :wikitext(p.sandboxNotice(args, env)) -- This div tag is from {{documentation/start box}}, but moving it here -- so that we don't have to worry about unclosed tags. :tag('div') :attr('id', message('main-div-id')) :addClass(message('main-div-class')) :wikitext(p._startBox(args, env)) :wikitext(p._content(args, env)) :done() :wikitext(p._endBox(args, env)) :wikitext(p.addTrackingCategories(env)) return tostring(root) end ---------------------------------------------------------------------------- -- Environment settings ---------------------------------------------------------------------------- function p.getEnvironment(args) --[[ -- Returns a table with information about the environment, including title objects and other namespace- or -- path-related data. -- @args - table of arguments passed by the user -- -- Title objects include: -- env.title - the page we are making documentation for (usually the current title) -- env.templateTitle - the template (or module, file, etc.) -- env.docTitle - the /doc subpage. -- env.sandboxTitle - the /sandbox subpage. -- env.testcasesTitle - the /testcases subpage. -- env.printTitle - the print version of the template, located at the /Print subpage. -- -- Data includes: -- env.protectionLevels - the protection levels table of the title object. -- env.subjectSpace - the number of the title's subject namespace. -- env.docSpace - the number of the namespace the title puts its documentation in. -- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace. -- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template. -- -- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value -- returned will be nil. --]] local env, envFuncs = {}, {} -- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value -- returned by that function is memoized in the env table so that we don't call any of the functions -- more than once. (Nils won't be memoized.) setmetatable(env, { __index = function (t, key) local envFunc = envFuncs[key] if envFunc then local success, val = pcall(envFunc) if success then env[key] = val -- Memoise the value. return val end end return nil end }) function envFuncs.title() -- The title object for the current page, or a test page passed with args.page. local title local titleArg = args.page if titleArg then title = mw.title.new(titleArg) else title = mw.title.getCurrentTitle() end return title end function envFuncs.templateTitle() --[[ -- The template (or module, etc.) title object. -- Messages: -- 'sandbox-subpage' --> 'sandbox' -- 'testcases-subpage' --> 'testcases' --]] local subjectSpace = env.subjectSpace local title = env.title local subpage = title.subpageText if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then return mw.title.makeTitle(subjectSpace, title.baseText) else return mw.title.makeTitle(subjectSpace, title.text) end end function envFuncs.docTitle() --[[ -- Title object of the /doc subpage. -- Messages: -- 'doc-subpage' --> 'doc' --]] local title = env.title local docname = args[1] -- User-specified doc page. local docpage if docname then docpage = docname else docpage = env.docpageBase .. '/' .. message('doc-subpage') end return mw.title.new(docpage) end function envFuncs.sandboxTitle() --[[ -- Title object for the /sandbox subpage. -- Messages: -- 'sandbox-subpage' --> 'sandbox' --]] return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage')) end function envFuncs.testcasesTitle() --[[ -- Title object for the /testcases subpage. -- Messages: -- 'testcases-subpage' --> 'testcases' --]] return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) end function envFuncs.printTitle() --[[ -- Title object for the /Print subpage. -- Messages: -- 'print-subpage' --> 'Print' --]] return env.templateTitle:subPageTitle(message('print-subpage')) end function envFuncs.protectionLevels() -- The protection levels table of the title object. return env.title.protectionLevels end function envFuncs.subjectSpace() -- The subject namespace number. return mw.site.namespaces[env.title.namespace].subject.id end function envFuncs.docSpace() -- The documentation namespace number. For most namespaces this is the same as the -- subject namespace. However, pages in the Article, File, MediaWiki or Category -- namespaces must have their /doc, /sandbox and /testcases pages in talk space. local subjectSpace = env.subjectSpace if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then return subjectSpace + 1 else return subjectSpace end end function envFuncs.docpageBase() -- The base page of the /doc, /sandbox, and /testcases subpages. -- For some namespaces this is the talk page, rather than the template page. local templateTitle = env.templateTitle local docSpace = env.docSpace local docSpaceText = mw.site.namespaces[docSpace].name -- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon. return docSpaceText .. ':' .. templateTitle.text end function envFuncs.compareUrl() -- Diff link between the sandbox and the main template using [[Special:ComparePages]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.fullUrl( 'Special:ComparePages', {page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} ) return tostring(compareUrl) else return nil end end return env end ---------------------------------------------------------------------------- -- Auxiliary templates ---------------------------------------------------------------------------- p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext') function p._getModuleWikitext(args, env) local currentTitle = mw.title.getCurrentTitle() if currentTitle.contentModel ~= 'Scribunto' then return end pcall(require, currentTitle.prefixedText) -- if it fails, we don't care local moduleWikitext = package.loaded["Module:Module wikitext"] if moduleWikitext then return moduleWikitext.main() end end function p.sandboxNotice(args, env) --[=[ -- Generates a sandbox notice for display above sandbox pages. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' -- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page' -- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page' -- 'sandbox-notice-pagetype-other' --> 'sandbox page' -- 'sandbox-notice-compare-link-display' --> 'diff' -- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.' -- 'sandbox-notice-testcases-link-display' --> 'test cases' -- 'sandbox-category' --> 'Template sandboxes' --]=] local title = env.title local sandboxTitle = env.sandboxTitle local templateTitle = env.templateTitle local subjectSpace = env.subjectSpace if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then return nil end -- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text". local omargs = {} omargs.image = message('sandbox-notice-image') -- Get the text. We start with the opening blurb, which is something like -- "This is the template sandbox for [[Template:Foo]] (diff)." local text = '' local frame = mw.getCurrentFrame() local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed. local pagetype if subjectSpace == 10 then pagetype = message('sandbox-notice-pagetype-template') elseif subjectSpace == 828 then pagetype = message('sandbox-notice-pagetype-module') else pagetype = message('sandbox-notice-pagetype-other') end local templateLink = makeWikilink(templateTitle.prefixedText) local compareUrl = env.compareUrl if isPreviewing or not compareUrl then text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) else local compareDisplay = message('sandbox-notice-compare-link-display') local compareLink = makeUrlLink(compareUrl, compareDisplay) text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) end -- Get the test cases page blurb if the page exists. This is something like -- "See also the companion subpage for [[Template:Foo/testcases|test cases]]." local testcasesTitle = env.testcasesTitle if testcasesTitle and testcasesTitle.exists then if testcasesTitle.contentModel == "Scribunto" then local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink}) else local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink}) end end -- Add the sandbox to the sandbox category. text = text .. makeCategoryLink(message('sandbox-category')) omargs.text = text omargs.class = message('sandbox-class') local ret = '<div style="clear: both;"></div>' ret = ret .. messageBox.main('ombox', omargs) return ret end function p.protectionTemplate(env) -- Generates the padlock icon in the top right. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'protection-template' --> 'pp-template' -- 'protection-template-args' --> {docusage = 'yes'} local title = env.title local protectionLevels local protectionTemplate = message('protection-template') local namespace = title.namespace if not (protectionTemplate and (namespace == 10 or namespace == 828)) then -- Don't display the protection template if we are not in the template or module namespaces. return nil end protectionLevels = env.protectionLevels if not protectionLevels then return nil end local editLevels = protectionLevels.edit local moveLevels = protectionLevels.move if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then -- The page is full-move protected, or full, template, or semi-protected. local frame = mw.getCurrentFrame() return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')} else return nil end end ---------------------------------------------------------------------------- -- Start box ---------------------------------------------------------------------------- p.startBox = makeInvokeFunc('_startBox') function p._startBox(args, env) --[[ -- This function generates the start box. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make -- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox -- which generate the box HTML. --]] env = env or p.getEnvironment(args) local links local content = args.content if not content then -- No need to include the links if the documentation is on the template page itself. local linksData = p.makeStartBoxLinksData(args, env) if linksData then links = p.renderStartBoxLinks(linksData) end end -- Generate the start box html. local data = p.makeStartBoxData(args, env, links) if data then return p.renderStartBox(data) else -- User specified no heading. return nil end end function p.makeStartBoxLinksData(args, env) --[[ -- Does initial processing of data to make the [view] [edit] [history] [purge] links. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'view-link-display' --> 'view' -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'purge-link-display' --> 'purge' -- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'docpage-preload' --> 'Template:Documentation/preload' -- 'create-link-display' --> 'create' --]] local subjectSpace = env.subjectSpace local title = env.title local docTitle = env.docTitle if not title or not docTitle then return nil end if docTitle.isRedirect then docTitle = docTitle.redirectTarget end local data = {} data.title = title data.docTitle = docTitle -- View, display, edit, and purge links if /doc exists. data.viewLinkDisplay = i18n['view-link-display'] data.editLinkDisplay = i18n['edit-link-display'] data.historyLinkDisplay = i18n['history-link-display'] data.purgeLinkDisplay = i18n['purge-link-display'] -- Create link if /doc doesn't exist. local preload = args.preload if not preload then if subjectSpace == 6 then -- File namespace preload = message('file-docpage-preload') elseif subjectSpace == 828 then -- Module namespace preload = message('module-preload') else preload = message('docpage-preload') end end data.preload = preload data.createLinkDisplay = i18n['create-link-display'] return data end function p.renderStartBoxLinks(data) --[[ -- Generates the [view][edit][history][purge] or [create] links from the data table. -- @data - a table of data generated by p.makeStartBoxLinksData --]] local function escapeBrackets(s) -- Escapes square brackets with HTML entities. s = s:gsub('%[', '&#91;') -- Replace square brackets with HTML entities. s = s:gsub('%]', '&#93;') return s end local ret local docTitle = data.docTitle local title = data.title if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) ret = '[%s] [%s] [%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) else local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) ret = '[%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, createLink) end return ret end function p.makeStartBoxData(args, env, links) --[=[ -- Does initial processing of data to pass to the start-box render function, p.renderStartBox. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' -- 'template-namespace-heading' --> 'Template documentation' -- 'module-namespace-heading' --> 'Module documentation' -- 'file-namespace-heading' --> 'Summary' -- 'other-namespaces-heading' --> 'Documentation' -- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks' -- 'start-box-link-id' --> 'doc_editlinks' -- 'testcases-create-link-display' --> 'create' --]=] local subjectSpace = env.subjectSpace if not subjectSpace then -- Default to an "other namespaces" namespace, so that we get at least some output -- if an error occurs. subjectSpace = 2 end local data = {} -- Heading local heading = args.heading -- Blank values are not removed. if heading == '' then -- Don't display the start box if the heading arg is defined but blank. return nil end if heading then data.heading = heading elseif subjectSpace == 10 then -- Template namespace data.heading = i18n['template-namespace-heading'] elseif subjectSpace == 828 then -- Module namespace data.heading = i18n['module-namespace-heading'] elseif subjectSpace == 6 then -- File namespace data.heading = i18n['file-namespace-heading'] else data.heading = i18n['other-namespaces-heading'] end -- Data for the [view][edit][history][purge] or [create] links. if links then data.linksClass = message('start-box-linkclasses') data.linksId = message('start-box-link-id') data.links = links end return data end function p.renderStartBox(data) -- Renders the start box html. -- @data - a table of data generated by p.makeStartBoxData. local sbox = mw.html.create('div') sbox :addClass(message('header-div-class')) :tag('div') :addClass(message('heading-div-class')) :wikitext(data.heading) local links = data.links if links then sbox :tag('div') :addClass(data.linksClass) :attr('id', data.linksId) :wikitext(links) end return tostring(sbox) end ---------------------------------------------------------------------------- -- Documentation content ---------------------------------------------------------------------------- p.content = makeInvokeFunc('_content') function p._content(args, env) -- Displays the documentation contents -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment env = env or p.getEnvironment(args) local docTitle = env.docTitle local content = args.content if not content and docTitle and docTitle.exists then content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle} end -- The line breaks below are necessary so that "=== Headings ===" at the start and end -- of docs are interpreted correctly. local cbox = mw.html.create('div') cbox :addClass(message('content-div-class')) :wikitext('\n' .. (content or '') .. '\n') return tostring(cbox) end p.contentTitle = makeInvokeFunc('_contentTitle') function p._contentTitle(args, env) env = env or p.getEnvironment(args) local docTitle = env.docTitle if not args.content and docTitle and docTitle.exists then return docTitle.prefixedText else return '' end end ---------------------------------------------------------------------------- -- End box ---------------------------------------------------------------------------- p.endBox = makeInvokeFunc('_endBox') function p._endBox(args, env) --[=[ -- This function generates the end box (also known as the link box). -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment --]=] -- Get environment data. env = env or p.getEnvironment(args) local subjectSpace = env.subjectSpace local docTitle = env.docTitle if not subjectSpace or not docTitle then return nil end -- Check whether we should output the end box at all. Add the end -- box by default if the documentation exists or if we are in the -- user, module or template namespaces. local linkBox = args['link box'] if linkBox == 'off' or not ( docTitle.exists or subjectSpace == 2 or subjectSpace == 828 or subjectSpace == 10 ) then return nil end -- Assemble the footer text field. local text = '' if linkBox then text = text .. linkBox else text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then -- We are in the user, template or module namespaces. -- Add sandbox and testcases links. -- "Editors can experiment in this template's sandbox and testcases pages." text = text .. (p.makeExperimentBlurb(args, env) or '') text = text .. '<br />' if not args.content and not args[1] then -- "Please add categories to the /doc subpage." -- Don't show this message with inline docs or with an explicitly specified doc page, -- as then it is unclear where to add the categories. text = text .. (p.makeCategoriesBlurb(args, env) or '') end text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates. if printBlurb then text = text .. '<br />' .. printBlurb end end end local ebox = mw.html.create('div') ebox :addClass(message('footer-div-class')) :wikitext(text) return tostring(ebox) end function p.makeDocPageBlurb(args, env) --[=[ -- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'transcluded-from-blurb' --> -- 'The above [[w:Wikipedia:Template documentation|documentation]] -- is [[w:Wikipedia:Transclusion|transcluded]] from $1.' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'create-link-display' --> 'create' -- 'create-module-doc-blurb' --> -- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].' --]=] local docTitle = env.docTitle if not docTitle or args.content then return nil end local ret if docTitle.exists then -- /doc exists; link to it. local docLink = makeWikilink(docTitle.prefixedText) local editUrl = docTitle:fullUrl{action = 'edit'} local editDisplay = i18n['edit-link-display'] local editLink = makeUrlLink(editUrl, editDisplay) local historyUrl = docTitle:fullUrl{action = 'history'} local historyDisplay = i18n['history-link-display'] local historyLink = makeUrlLink(historyUrl, historyDisplay) ret = message('transcluded-from-blurb', {docLink}) .. ' ' .. makeToolbar(editLink, historyLink) .. '<br />' elseif env.subjectSpace == 828 then -- /doc does not exist; ask to create it. local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} local createDisplay = i18n['create-link-display'] local createLink = makeUrlLink(createUrl, createDisplay) ret = message('create-module-doc-blurb', {createLink}) .. '<br />' end return ret end function p.makeExperimentBlurb(args, env) --[[ -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'sandbox' -- 'sandbox-edit-link-display' --> 'edit' -- 'compare-link-display' --> 'diff' -- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'sandbox-create-link-display' --> 'create' -- 'mirror-edit-summary' --> 'Create sandbox version of $1' -- 'mirror-link-display' --> 'mirror' -- 'mirror-link-preload' --> 'Template:Documentation/mirror' -- 'sandbox-link-display' --> 'sandbox' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display'--> 'edit' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'testcases-create-link-display' --> 'create' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display' --> 'edit' -- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases' -- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases' -- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.' -- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle local testcasesTitle = env.testcasesTitle local templatePage = templateTitle.prefixedText if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then return nil end -- Make links. local sandboxLinks, testcasesLinks if sandboxTitle.exists then local sandboxPage = sandboxTitle.prefixedText local sandboxDisplay = message('sandbox-link-display') local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'} local sandboxEditDisplay = message('sandbox-edit-link-display') local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay) local compareUrl = env.compareUrl local compareLink if compareUrl then local compareDisplay = message('compare-link-display') compareLink = makeUrlLink(compareUrl, compareDisplay) end sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink) else local sandboxPreload if subjectSpace == 828 then sandboxPreload = message('module-sandbox-preload') else sandboxPreload = message('template-sandbox-preload') end local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload} local sandboxCreateDisplay = message('sandbox-create-link-display') local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) local mirrorPreload = message('mirror-link-preload') local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} local mirrorDisplay = message('mirror-link-display') local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink) end if testcasesTitle.exists then local testcasesPage = testcasesTitle.prefixedText local testcasesDisplay = message('testcases-link-display') local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'} local testcasesEditDisplay = message('testcases-edit-link-display') local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) else local testcasesPreload if subjectSpace == 828 then testcasesPreload = message('module-testcases-preload') else testcasesPreload = message('template-testcases-preload') end local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload} local testcasesCreateDisplay = message('testcases-create-link-display') local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink) end local messageName if subjectSpace == 828 then messageName = 'experiment-blurb-module' else messageName = 'experiment-blurb-template' end return message(messageName, {sandboxLinks, testcasesLinks}) end function p.makeCategoriesBlurb(args, env) --[[ -- Generates the text "Please add categories to the /doc subpage." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'doc-link-display' --> '/doc' -- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.' --]] local docTitle = env.docTitle if not docTitle then return nil end local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display')) return message('add-categories-blurb', {docPathLink}) end function p.makeSubpagesBlurb(args, env) --[[ -- Generates the "Subpages of this template" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'template' -- 'module-pagetype' --> 'module' -- 'default-pagetype' --> 'page' -- 'subpages-link-display' --> 'Subpages of this $1' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle if not subjectSpace or not templateTitle then return nil end local pagetype if subjectSpace == 10 then pagetype = message('template-pagetype') elseif subjectSpace == 828 then pagetype = message('module-pagetype') else pagetype = message('default-pagetype') end local subpagesLink = makeWikilink( 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', message('subpages-link-display', {pagetype}) ) return message('subpages-blurb', {subpagesLink}) end function p.makePrintBlurb(args, env) --[=[ -- Generates the blurb displayed when there is a print version of the template available. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'print-link-display' --> '/Print' -- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]' -- .. ' of this template exists at $1.' -- .. ' If you make a change to this template, please update the print version as well.' -- 'display-print-category' --> true -- 'print-category' --> 'Templates with print versions' --]=] local printTitle = env.printTitle if not printTitle then return nil end local ret if printTitle.exists then local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display')) ret = message('print-blurb', {printLink}) local displayPrintCategory = message('display-print-category', nil, 'boolean') if displayPrintCategory then ret = ret .. makeCategoryLink(message('print-category')) end end return ret end ---------------------------------------------------------------------------- -- Tracking categories ---------------------------------------------------------------------------- function p.addTrackingCategories(env) --[[ -- Check if {{documentation}} is transcluded on a /doc or /testcases page. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'display-strange-usage-category' --> true -- 'doc-subpage' --> 'doc' -- 'testcases-subpage' --> 'testcases' -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' -- -- /testcases pages in the module namespace are not categorised, as they may have -- {{documentation}} transcluded automatically. --]] local title = env.title local subjectSpace = env.subjectSpace if not title or not subjectSpace then return nil end local subpage = title.subpageText local ret = '' if message('display-strange-usage-category', nil, 'boolean') and ( subpage == message('doc-subpage') or subjectSpace ~= 828 and subpage == message('testcases-subpage') ) then ret = ret .. makeCategoryLink(message('strange-usage-category')) end return ret end return p 0e23eec0d3c20c23afcd28849e240b9083dbcf88 Module:Documentation/config 828 26 52 51 2023-06-05T21:41:57Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Documentation/config]] Scribunto text/plain ---------------------------------------------------------------------------------------------------- -- -- Configuration for Module:Documentation -- -- Here you can set the values of the parameters and messages used in Module:Documentation to -- localise it to your wiki and your language. Unless specified otherwise, values given here -- should be string values. ---------------------------------------------------------------------------------------------------- local _format = require('Module:TNT').format local function format(id) return _format('I18n/Documentation', id) end local cfg = {} -- Do not edit this line. cfg['templatestyles-scr'] = 'Module:Documentation/styles.css' ---------------------------------------------------------------------------------------------------- -- Protection template configuration ---------------------------------------------------------------------------------------------------- -- cfg['protection-template'] -- The name of the template that displays the protection icon (a padlock on enwiki). cfg['protection-template'] = 'pp-template' -- cfg['protection-reason-edit'] -- The protection reason for edit-protected templates to pass to -- [[Module:Protection banner]]. cfg['protection-reason-edit'] = 'template' --[[ -- cfg['protection-template-args'] -- Any arguments to send to the protection template. This should be a Lua table. -- For example, if the protection template is "pp-template", and the wikitext template invocation -- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}". --]] cfg['protection-template-args'] = {docusage = 'yes'} --[[ ---------------------------------------------------------------------------------------------------- -- Sandbox notice configuration -- -- On sandbox pages the module can display a template notifying users that the current page is a -- sandbox, and the location of test cases pages, etc. The module decides whether the page is a -- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the -- messages that the notices contains. ---------------------------------------------------------------------------------------------------- --]] -- cfg['sandbox-notice-image'] -- The image displayed in the sandbox notice. cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]' --[[ -- cfg['sandbox-notice-pagetype-template'] -- cfg['sandbox-notice-pagetype-module'] -- cfg['sandbox-notice-pagetype-other'] -- The page type of the sandbox page. The message that is displayed depends on the current subject -- namespace. This message is used in either cfg['sandbox-notice-blurb'] or -- cfg['sandbox-notice-diff-blurb']. --]] cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template') cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module') cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other') --[[ -- cfg['sandbox-notice-blurb'] -- cfg['sandbox-notice-diff-blurb'] -- cfg['sandbox-notice-diff-display'] -- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence -- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page -- type, which is either cfg['sandbox-notice-pagetype-template'], -- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what -- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between -- the sandbox and the main template. The display value of the diff link is set by -- cfg['sandbox-notice-compare-link-display']. --]] cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb') cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb') cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display') --[[ -- cfg['sandbox-notice-testcases-blurb'] -- cfg['sandbox-notice-testcases-link-display'] -- cfg['sandbox-notice-testcases-run-blurb'] -- cfg['sandbox-notice-testcases-run-link-display'] -- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit. $1 is a link to the test cases page. -- cfg['sandbox-notice-testcases-link-display'] is the display value for that link. -- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test -- cases page, and $2 is a link to the page to run it. -- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test -- cases. --]] cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb') cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display') cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb') cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display') -- cfg['sandbox-category'] -- A category to add to all template sandboxes. cfg['sandbox-category'] = 'Template sandboxes' ---------------------------------------------------------------------------------------------------- -- Start box configuration ---------------------------------------------------------------------------------------------------- -- cfg['documentation-icon-wikitext'] -- The wikitext for the icon shown at the top of the template. cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' ---------------------------------------------------------------------------------------------------- -- Link box (end box) configuration ---------------------------------------------------------------------------------------------------- -- cfg['transcluded-from-blurb'] -- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page. cfg['transcluded-from-blurb'] = format('transcluded-from-blurb') --[[ -- cfg['create-module-doc-blurb'] -- Notice displayed in the module namespace when the documentation subpage does not exist. -- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the -- display cfg['create-link-display']. --]] cfg['create-module-doc-blurb'] = format('create-module-doc-blurb') ---------------------------------------------------------------------------------------------------- -- Experiment blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['experiment-blurb-template'] -- cfg['experiment-blurb-module'] -- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages. -- It is only shown in the template and module namespaces. With the default English settings, it -- might look like this: -- -- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages. -- -- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links. -- -- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending -- on what namespace we are in. -- -- Parameters: -- -- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display']) -- -- If the sandbox doesn't exist, it is in the format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display']) -- -- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload'] -- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display'] -- loads a default edit summary of cfg['mirror-edit-summary']. -- -- $2 is a link to the test cases page. If the test cases page exists, it is in the following format: -- -- cfg['testcases-link-display'] (cfg['testcases-edit-link-display']) -- -- If the test cases page doesn't exist, it is in the format: -- -- cfg['testcases-link-display'] (cfg['testcases-create-link-display']) -- -- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the -- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current -- namespace. --]] cfg['experiment-blurb-template'] = format('experiment-blurb-template') cfg['experiment-blurb-module'] = format('experiment-blurb-module') ---------------------------------------------------------------------------------------------------- -- Sandbox link configuration ---------------------------------------------------------------------------------------------------- -- cfg['sandbox-subpage'] -- The name of the template subpage typically used for sandboxes. cfg['sandbox-subpage'] = 'sandbox' -- cfg['template-sandbox-preload'] -- Preload file for template sandbox pages. cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox' -- cfg['module-sandbox-preload'] -- Preload file for Lua module sandbox pages. cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox' -- cfg['sandbox-link-display'] -- The text to display for "sandbox" links. cfg['sandbox-link-display'] = format('sandbox-link-display') -- cfg['sandbox-edit-link-display'] -- The text to display for sandbox "edit" links. cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display') -- cfg['sandbox-create-link-display'] -- The text to display for sandbox "create" links. cfg['sandbox-create-link-display'] = format('sandbox-create-link-display') -- cfg['compare-link-display'] -- The text to display for "compare" links. cfg['compare-link-display'] = format('compare-link-display') -- cfg['mirror-edit-summary'] -- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the -- template page. cfg['mirror-edit-summary'] = 'Create sandbox version of $1' -- cfg['mirror-link-display'] -- The text to display for "mirror" links. cfg['mirror-link-display'] = format('mirror-link-display') -- cfg['mirror-link-preload'] -- The page to preload when a user clicks the "mirror" link. cfg['mirror-link-preload'] = 'Template:Documentation/mirror' ---------------------------------------------------------------------------------------------------- -- Test cases link configuration ---------------------------------------------------------------------------------------------------- -- cfg['testcases-subpage'] -- The name of the template subpage typically used for test cases. cfg['testcases-subpage'] = 'testcases' -- cfg['template-testcases-preload'] -- Preload file for template test cases pages. cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases' -- cfg['module-testcases-preload'] -- Preload file for Lua module test cases pages. cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases' -- cfg['testcases-link-display'] -- The text to display for "testcases" links. cfg['testcases-link-display'] = format('testcases-link-display') -- cfg['testcases-edit-link-display'] -- The text to display for test cases "edit" links. cfg['testcases-edit-link-display'] = format('testcases-edit-link-display') -- cfg['testcases-create-link-display'] -- The text to display for test cases "create" links. cfg['testcases-create-link-display'] = format('testcases-create-link-display') ---------------------------------------------------------------------------------------------------- -- Add categories blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['add-categories-blurb'] -- Text to direct users to add categories to the /doc subpage. Not used if the "content" or -- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a -- link to the /doc subpage with a display value of cfg['doc-link-display']. --]] cfg['add-categories-blurb'] = format('add-categories-blurb') -- cfg['doc-link-display'] -- The text to display when linking to the /doc subpage. cfg['doc-link-display'] = '/doc' ---------------------------------------------------------------------------------------------------- -- Subpages link configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['subpages-blurb'] -- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a -- display value of cfg['subpages-link-display']. In the English version this blurb is simply -- the link followed by a period, and the link display provides the actual text. --]] cfg['subpages-blurb'] = format('subpages-blurb') --[[ -- cfg['subpages-link-display'] -- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'], -- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in -- the template namespace, the module namespace, or another namespace. --]] cfg['subpages-link-display'] = format('subpages-link-display') -- cfg['template-pagetype'] -- The pagetype to display for template pages. cfg['template-pagetype'] = format('template-pagetype') -- cfg['module-pagetype'] -- The pagetype to display for Lua module pages. cfg['module-pagetype'] = format('module-pagetype') -- cfg['default-pagetype'] -- The pagetype to display for pages other than templates or Lua modules. cfg['default-pagetype'] = format('default-pagetype') ---------------------------------------------------------------------------------------------------- -- Doc link configuration ---------------------------------------------------------------------------------------------------- -- cfg['doc-subpage'] -- The name of the subpage typically used for documentation pages. cfg['doc-subpage'] = 'doc' -- cfg['file-docpage-preload'] -- Preload file for documentation page in the file namespace. cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace' -- cfg['docpage-preload'] -- Preload file for template documentation pages in all namespaces. cfg['docpage-preload'] = 'Template:Documentation/preload' -- cfg['module-preload'] -- Preload file for Lua module documentation pages. cfg['module-preload'] = 'Template:Documentation/preload-module-doc' ---------------------------------------------------------------------------------------------------- -- Print version configuration ---------------------------------------------------------------------------------------------------- -- cfg['print-subpage'] -- The name of the template subpage used for print versions. cfg['print-subpage'] = 'Print' -- cfg['print-link-display'] -- The text to display when linking to the /Print subpage. cfg['print-link-display'] = '/Print' -- cfg['print-blurb'] -- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display']. cfg['print-blurb'] = format('print-blurb') -- cfg['display-print-category'] -- Set to true to enable output of cfg['print-category'] if a /Print subpage exists. -- This should be a boolean value (either true or false). cfg['display-print-category'] = true -- cfg['print-category'] -- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists. cfg['print-category'] = 'Templates with print versions' ---------------------------------------------------------------------------------------------------- -- HTML and CSS configuration ---------------------------------------------------------------------------------------------------- -- cfg['main-div-id'] -- The "id" attribute of the main HTML "div" tag. cfg['main-div-id'] = 'template-documentation' -- cfg['main-div-classes'] -- The CSS classes added to the main HTML "div" tag. cfg['main-div-class'] = 'ts-doc-doc' cfg['header-div-class'] = 'ts-doc-header' cfg['heading-div-class'] = 'ts-doc-heading' cfg['content-div-class'] = 'ts-doc-content' cfg['footer-div-class'] = 'ts-doc-footer plainlinks' cfg['sandbox-class'] = 'ts-doc-sandbox' -- cfg['start-box-linkclasses'] -- The CSS classes used for the [view][edit][history] or [create] links in the start box. cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks' -- cfg['start-box-link-id'] -- The HTML "id" attribute for the links in the start box. cfg['start-box-link-id'] = 'doc_editlinks' ---------------------------------------------------------------------------------------------------- -- Tracking category configuration ---------------------------------------------------------------------------------------------------- -- cfg['display-strange-usage-category'] -- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage -- or a /testcases subpage. This should be a boolean value (either true or false). cfg['display-strange-usage-category'] = false -- cfg['strange-usage-category'] -- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a -- /doc subpage or a /testcases subpage. cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage' --[[ ---------------------------------------------------------------------------------------------------- -- End configuration -- -- Don't edit anything below this line. ---------------------------------------------------------------------------------------------------- --]] return cfg 224f3664a83268936f1b9935eafc0055a97071ac Module:TNT 828 27 54 53 2023-06-05T21:41:57Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:TNT]] Scribunto text/plain -- -- INTRO: (!!! DO NOT RENAME THIS PAGE !!!) -- This module allows any template or module to be copy/pasted between -- wikis without any translation changes. All translation text is stored -- in the global Data:*.tab pages on Commons, and used everywhere. -- -- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- ATTENTION: -- Please do NOT rename this module - it has to be identical on all wikis. -- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT -- Please do not modify it anywhere else, as it may get copied and override your changes. -- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT -- -- DESCRIPTION: -- The "msg" function uses a Commons dataset to translate a message -- with a given key (e.g. source-table), plus optional arguments -- to the wiki markup in the current content language. -- Use lang=xx to set language. Example: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- uses a translation message with id = "source-table" --> -- | param1 }} <!-- optional parameter --> -- -- -- The "doc" function will generate the <templatedata> parameter documentation for templates. -- This way all template parameters can be stored and localized in a single Commons dataset. -- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab -- if the current page is Template:Graph:Lines/doc -- local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Forward declaration of the local functions local sanitizeDataset, loadData, link, formatMessage function p.msg(frame) local dataset, id local params = {} local lang = nil for k, v in pairs(frame.args) do if k == 1 then dataset = mw.text.trim(v) elseif k == 2 then id = mw.text.trim(v) elseif type(k) == 'number' then params[k - 2] = mw.text.trim(v) elseif k == 'lang' and v ~= '_' then lang = mw.text.trim(v) end end return formatMessage(dataset, id, params, lang) end -- Identical to p.msg() above, but used from other lua modules -- Parameters: name of dataset, message key, optional arguments -- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.format(dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('format', 1, dataset, 'string') checkType('format', 2, key, 'string') return formatMessage(dataset, key, {...}) end -- Identical to p.msg() above, but used from other lua modules with the language param -- Parameters: language code, name of dataset, message key, optional arguments -- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.formatInLanguage(lang, dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('formatInLanguage', 1, lang, 'string') checkType('formatInLanguage', 2, dataset, 'string') checkType('formatInLanguage', 3, key, 'string') return formatMessage(dataset, key, {...}, lang) end -- Obsolete function that adds a 'c:' prefix to the first param. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' function p.link(frame) return link(frame.args[1]) end function p.doc(frame) local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1]) return frame:extensionTag('templatedata', p.getTemplateData(dataset)) .. formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) end function p.getTemplateData(dataset) -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages local data = loadData(dataset) local names = {} for _, field in ipairs(data.schema.fields) do table.insert(names, field.name) end local numOnly = true local params = {} local paramOrder = {} for _, row in ipairs(data.data) do local newVal = {} local name = nil for pos, columnName in ipairs(names) do if columnName == 'name' then name = row[pos] else newVal[columnName] = row[pos] end end if name then if ( (type(name) ~= "number") and ( (type(name) ~= "string") or not string.match(name, "^%d+$") ) ) then numOnly = false end params[name] = newVal table.insert(paramOrder, name) end end -- Work around json encoding treating {"1":{...}} as an [{...}] if numOnly then params['zzz123']='' end local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description, }) if numOnly then json = string.gsub(json,'"zzz123":"",?', "") end return json end -- Local functions sanitizeDataset = function(dataset) if not dataset then return nil end dataset = mw.text.trim(dataset) if dataset == '' then return nil elseif string.sub(dataset,-4) ~= '.tab' then return dataset .. '.tab' else return dataset end end loadData = function(dataset, lang) dataset = sanitizeDataset(dataset) if not dataset then error(formatMessage(i18nDataset, 'error_no_dataset', {})) end -- Give helpful error to thirdparties who try and copy this module. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error(string.format([['''Missing JsonConfig extension, or not properly configured; Cannot load https://commons.wikimedia.org/wiki/Data:%s. See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset)) end local data = mw.ext.data.get(dataset, lang) if data == false then if dataset == i18nDataset then -- Prevent cyclical calls error('Missing Commons dataset ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) end end return data end -- Given a dataset name, convert it to a title with the 'commons:data:' prefix link = function(dataset) return 'c:Data:' .. mw.text.trim(dataset or '') end formatMessage = function(dataset, key, params, lang) for _, row in pairs(loadData(dataset, lang).data) do local id, msg = unpack(row) if id == key then local result = mw.message.newRawMessage(msg, unpack(params or {})) return result:plain() end end if dataset == i18nDataset then -- Prevent cyclical calls error('Invalid message key "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end return p e8ec673cd9d57a37a2bc326979c7980f1657fc3a Module:Documentation/i18n 828 28 56 55 2023-06-05T21:41:57Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Documentation/i18n]] Scribunto text/plain local format = require('Module:TNT').format local i18n = {} i18n['cfg-error-msg-type'] = format('I18n/Documentation', 'cfg-error-msg-type') i18n['cfg-error-msg-empty'] = format('I18n/Documentation', 'cfg-error-msg-empty') -- cfg['template-namespace-heading'] -- The heading shown in the template namespace. i18n['template-namespace-heading'] = format('I18n/Documentation', 'template-namespace-heading') -- cfg['module-namespace-heading'] -- The heading shown in the module namespace. i18n['module-namespace-heading'] = format('I18n/Documentation', 'module-namespace-heading') -- cfg['file-namespace-heading'] -- The heading shown in the file namespace. i18n['file-namespace-heading'] = format('I18n/Documentation', 'file-namespace-heading') -- cfg['other-namespaces-heading'] -- The heading shown in other namespaces. i18n['other-namespaces-heading'] = format('I18n/Documentation', 'other-namespaces-heading') -- cfg['view-link-display'] -- The text to display for "view" links. i18n['view-link-display'] = format('I18n/Documentation', 'view-link-display') -- cfg['edit-link-display'] -- The text to display for "edit" links. i18n['edit-link-display'] = format('I18n/Documentation', 'edit-link-display') -- cfg['history-link-display'] -- The text to display for "history" links. i18n['history-link-display'] = format('I18n/Documentation', 'history-link-display') -- cfg['purge-link-display'] -- The text to display for "purge" links. i18n['purge-link-display'] = format('I18n/Documentation', 'purge-link-display') -- cfg['create-link-display'] -- The text to display for "create" links. i18n['create-link-display'] = format('I18n/Documentation', 'create-link-display') return i18n 9a9f234b177a424f1fc465eb25c484eff54905c0 Module:Uses TemplateStyles 828 29 58 57 2023-06-05T21:41:58Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Uses_TemplateStyles]] Scribunto text/plain -- This module implements the {{Uses TemplateStyles}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local TNT = require('Module:TNT') local p = {} local function format(msg, ...) -- Content sourced from [[commons:Data:I18n/Uses TemplateStyles.tab]] return TNT.format('I18n/Uses TemplateStyles', msg, ...) end local function getConfig() return mw.loadData('Module:Uses TemplateStyles/config') end function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args, cfg) local tStyles = mTableTools.compressSparseArray(args) local box = p.renderBox(tStyles) local trackingCategories = p.renderTrackingCategories(args, tStyles) return box .. trackingCategories end function p.renderBox(tStyles) local boxArgs = {} if #tStyles < 1 then boxArgs.text = string.format('<strong class="error">%s</strong>', format('error-emptylist')) else local cfg = getConfig() local tStylesLinks = {} for i, ts in ipairs(tStyles) do local link = string.format('[[:%s]]', ts) local sandboxLink = nil local tsTitle = mw.title.new(ts) if tsTitle and cfg['sandbox_title'] then local tsSandboxTitle = mw.title.new(string.format( '%s:%s/%s/%s', tsTitle.nsText, tsTitle.baseText, cfg['sandbox_title'], tsTitle.subpageText)) if tsSandboxTitle and tsSandboxTitle.exists then sandboxLink = format('sandboxlink', link, ':' .. tsSandboxTitle.prefixedText) end end tStylesLinks[i] = sandboxLink or link end local tStylesList = mList.makeList('bulleted', tStylesLinks) boxArgs.text = format( mw.title.getCurrentTitle():inNamespaces(828,829) and 'header-module' or 'header-template') .. '\n' .. tStylesList end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = string.format('[[File:Farm-Fresh css add.svg|32px|alt=%s]]', format('logo-alt')) return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, tStyles, titleObj) if yesno(args.nocat) then return '' end local cfg = getConfig() local cats = {} -- Error category if #tStyles < 1 and cfg['error_category'] then cats[#cats + 1] = cfg['error_category'] end -- TemplateStyles category titleObj = titleObj or mw.title.getCurrentTitle() if (titleObj.namespace == 10 or titleObj.namespace == 828) and not cfg['subpage_blacklist'][titleObj.subpageText] then local category = args.category or cfg['default_category'] if category then cats[#cats + 1] = category end if not yesno(args.noprotcat) and (cfg['protection_conflict_category'] or cfg['padlock_pattern']) then local currentProt = titleObj.protectionLevels["edit"] and titleObj.protectionLevels["edit"][1] or nil local addedLevelCat = false local addedPadlockCat = false for i, ts in ipairs(tStyles) do local tsTitleObj = mw.title.new(ts) local tsProt = tsTitleObj.protectionLevels["edit"] and tsTitleObj.protectionLevels["edit"][1] or nil if cfg['protection_conflict_category'] and tsProt ~= currentProt and not addedLevelCat then addedLevelCat = true cats[#cats + 1] = cfg['protection_conflict_category'] end if cfg['padlock_pattern'] and tsProt and not addedPadlockCat then local content = tsTitleObj:getContent() if not content:find(cfg['padlock_pattern']) then cats[#cats + 1] = cfg['missing_padlock_category'] addedPadlockCat = true end end end end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p d8c03c62b4a547f8918259e8509680e55bda1c90 Module:List 828 30 60 59 2023-06-05T21:41:58Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:List]] Scribunto text/plain -- This module outputs different kinds of lists. At the moment, bulleted, -- unbulleted, horizontal, ordered, and horizontal ordered lists are supported. local libUtil = require('libraryUtil') local checkType = libUtil.checkType local mTableTools = require('Module:TableTools') local p = {} local listTypes = { ['bulleted'] = true, ['unbulleted'] = true, ['horizontal'] = true, ['ordered'] = true, ['horizontal_ordered'] = true } function p.makeListData(listType, args) -- Constructs a data table to be passed to p.renderList. local data = {} -- Classes data.classes = {} data.templatestyles = '' if listType == 'horizontal' or listType == 'horizontal_ordered' then table.insert(data.classes, 'hlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Flatlist/styles.css' } } elseif listType == 'unbulleted' then table.insert(data.classes, 'plainlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plainlist/styles.css' } } end table.insert(data.classes, args.class) -- Main div style data.style = args.style -- Indent for horizontal lists if listType == 'horizontal' or listType == 'horizontal_ordered' then local indent = tonumber(args.indent) indent = indent and indent * 1.6 or 0 if indent > 0 then data.marginLeft = indent .. 'em' end end -- List style types for ordered lists -- This could be "1, 2, 3", "a, b, c", or a number of others. The list style -- type is either set by the "type" attribute or the "list-style-type" CSS -- property. if listType == 'ordered' or listType == 'horizontal_ordered' then data.listStyleType = args.list_style_type or args['list-style-type'] data.type = args['type'] -- Detect invalid type attributes and attempt to convert them to -- list-style-type CSS properties. if data.type and not data.listStyleType and not tostring(data.type):find('^%s*[1AaIi]%s*$') then data.listStyleType = data.type data.type = nil end end -- List tag type if listType == 'ordered' or listType == 'horizontal_ordered' then data.listTag = 'ol' else data.listTag = 'ul' end -- Start number for ordered lists data.start = args.start if listType == 'horizontal_ordered' then -- Apply fix to get start numbers working with horizontal ordered lists. local startNum = tonumber(data.start) if startNum then data.counterReset = 'listitem ' .. tostring(startNum - 1) end end -- List style -- ul_style and ol_style are included for backwards compatibility. No -- distinction is made for ordered or unordered lists. data.listStyle = args.list_style -- List items -- li_style is included for backwards compatibility. item_style was included -- to be easier to understand for non-coders. data.itemStyle = args.item_style or args.li_style data.items = {} for i, num in ipairs(mTableTools.numKeys(args)) do local item = {} item.content = args[num] item.style = args['item' .. tostring(num) .. '_style'] or args['item_style' .. tostring(num)] item.value = args['item' .. tostring(num) .. '_value'] or args['item_value' .. tostring(num)] table.insert(data.items, item) end return data end function p.renderList(data) -- Renders the list HTML. -- Return the blank string if there are no list items. if type(data.items) ~= 'table' or #data.items < 1 then return '' end -- Render the main div tag. local root = mw.html.create(( #data.classes > 0 or data.marginLeft or data.style ) and 'div' or nil) for i, class in ipairs(data.classes or {}) do root:addClass(class) end root:css{['margin-left'] = data.marginLeft} if data.style then root:cssText(data.style) end -- Render the list tag. local list = root:tag(data.listTag or 'ul') list :attr{start = data.start, type = data.type} :css{ ['counter-reset'] = data.counterReset, ['list-style-type'] = data.listStyleType } if data.listStyle then list:cssText(data.listStyle) end -- Render the list items for i, t in ipairs(data.items or {}) do local item = list:tag('li') if data.itemStyle then item:cssText(data.itemStyle) end if t.style then item:cssText(t.style) end item :attr{value = t.value} :wikitext(t.content) end return data.templatestyles .. tostring(root) end function p.makeList(listType, args) if not listType or not listTypes[listType] then error(string.format( "bad argument #1 to 'makeList' ('%s' is not a valid list type)", tostring(listType) ), 2) end checkType('makeList', 2, args, 'table') local data = p.makeListData(listType, args) return p.renderList(data) end for listType in pairs(listTypes) do p[listType] = function (frame) local mArguments = require('Module:Arguments') local origArgs = mArguments.getArgs(frame) -- Copy all the arguments to a new table, for faster indexing. local args = {} for k, v in pairs(origArgs) do args[k] = v end return p.makeList(listType, args) end end return p d701c0798e541793aa5ed1e9af50fc3b20548907 Module:TableTools 828 31 62 61 2023-06-05T21:41:59Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:TableTools]] Scribunto text/plain --[[ ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should -- -- not be called directly from #invoke. -- ------------------------------------------------------------------------------------ --]] local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti --[[ ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ --]] function p.isPositiveInteger(v) if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then return true else return false end end --[[ ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a value can be a valid table key. Lua will -- generate an error if a NaN is used as a table key. ------------------------------------------------------------------------------------ --]] function p.isNan(v) if type(v) == 'number' and tostring(v) == '-nan' then return true else return false end end --[[ ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ --]] function p.shallowClone(t) local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end --[[ ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ --]] function p.removeDuplicates(t) checkType('removeDuplicates', 1, t, 'table') local isNan = p.isNan local ret, exists = {}, {} for i, v in ipairs(t) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v else if not exists[v] then ret[#ret + 1] = v exists[v] = true end end end return ret end --[[ ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ --]] function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k, v in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end --[[ ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will -- return {1, 3, 6}. ------------------------------------------------------------------------------------ --]] function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') return s end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k, v in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end --[[ ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table -- of subtables in the format -- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} } -- Keys that don't end with an integer are stored in a subtable named "other". -- The compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ --]] function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end --[[ ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ --]] function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end --[[ ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ --]] function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end --[[ ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ --]] function p.size(t) checkType('size', 1, t, 'table') local i = 0 for k in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 else -- This will fail with table, boolean, function. return item1 < item2 end end --[[ Returns a list of the keys in a table, sorted using either a default comparison function or a custom keySort function. ]] function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' }) end local list = {} local index = 1 for key, value in pairs(t) do list[index] = key index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(list, keySort) end return list end --[[ Iterates through a table, with the keys sorted using the keysToList function. If there are only numerical keys, sparseIpairs is probably more efficient. ]] function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local list = p.keysToList(t, keySort, true) local i = 0 return function() i = i + 1 local key = list[i] if key ~= nil then return key, t[key] else return nil, nil end end end --[[ Returns true if all keys in the table are consecutive integers starting at 1. --]] function p.isArray(t) checkType("isArray", 1, t, "table") local i = 0 for k, v in pairs(t) do i = i + 1 if t[i] == nil then return false end end return true end -- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 } function p.invert(array) checkType("invert", 1, array, "table") local map = {} for i, v in ipairs(array) do map[v] = i end return map end --[[ { "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true } --]] function p.listToSet(t) checkType("listToSet", 1, t, "table") local set = {} for _, item in ipairs(t) do set[item] = true end return set end --[[ Recursive deep copy function. Preserves identities of subtables. ]] local function _deepCopy(orig, includeMetatable, already_seen) -- Stores copies of tables indexed by the original table. already_seen = already_seen or {} local copy = already_seen[orig] if copy ~= nil then return copy end if type(orig) == 'table' then copy = {} for orig_key, orig_value in pairs(orig) do copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen) end already_seen[orig] = copy if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then local mt_copy = deepcopy(mt, includeMetatable, already_seen) setmetatable(copy, mt_copy) already_seen[mt] = mt_copy end end else -- number, string, boolean, etc copy = orig end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen) end --[[ Concatenates all values in the table that are indexed by a number, in order. sparseConcat{ a, nil, c, d } => "acd" sparseConcat{ nil, b, c, d } => "bcd" ]] function p.sparseConcat(t, sep, i, j) local list = {} local list_i = 0 for _, v in p.sparseIpairs(t) do list_i = list_i + 1 list[list_i] = v end return table.concat(list, sep, i, j) end --[[ -- This returns the length of a table, or the first integer key n counting from -- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return -- a different value when there are gaps in the array portion of the table. -- Intended to be used on data loaded with mw.loadData. For other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of -- the number of unnamed template parameters, so use this function for -- frame.args. --]] function p.length(t) local i = 1 while t[i] ~= nil do i = i + 1 end return i - 1 end function p.inArray(arr, valueToFind) checkType("inArray", 1, arr, "table") -- if valueToFind is nil, error? for _, v in ipairs(arr) do if v == valueToFind then return true end end return false end return p fe918509f168332267834b3a6f5c219a9de5b2e7 Module:Uses TemplateStyles/config 828 32 64 63 2023-06-05T21:41:59Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Uses_TemplateStyles/config]] Scribunto text/plain local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always added if there is an error). -- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have -- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules, -- so they *will* have categories. All rules should be in the -- ['<subpage name>'] = true, -- format. cfg['subpage_blacklist'] = { ['doc'] = true, ['sandbox'] = true, ['sandbox2'] = true, ['testcases'] = true, } -- Sandbox title: if the stylesheet’s title is <template>/<stylesheet>.css, the -- stylesheet’s sandbox is expected to be at <template>/<sandbox_title>/<stylesheet>.css -- Set to nil to disable sandbox links. cfg['sandbox_title'] = 'sandbox' -- Error category: this category is added if the module call contains errors -- (e.g. no stylesheet listed). A category name without namespace, or nil -- to disable categorization (not recommended). cfg['error_category'] = nil -- Default category: this category is added if no custom category is specified -- in module/template call. A category name without namespace, or nil -- to disable categorization. cfg['default_category'] = 'Templates using TemplateStyles' .. mw.getCurrentFrame():callParserFunction("#translation:") -- Protection conflict category: this category is added if the protection level -- of any stylesheet differs from the one of the template. A category name -- without namespace, or nil to disable categorization (not recommended). cfg['protection_conflict_category'] = nil -- Padlock pattern: Lua pattern to search on protected stylesheets for, or nil -- to disable padlock check. cfg['padlock_pattern'] = nil -- Missing padlock category: this category is added if a protected stylesheet -- doesn’t contain any padlock template (specified by the above Lua pattern). -- A category name without namespace (no nil allowed) if the pattern is not nil, -- unused (and thus may be nil) otherwise. cfg['missing_padlock_category'] = nil return cfg -- Don’t touch this line. 2e6b3c52ca2ac4b6a454a6d572121c4bf6e16ea1 Module:Message box/ombox.css 828 33 66 65 2023-06-05T21:42:00Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box/ombox.css]] sanitized-css text/css /** * {{ombox}} (other pages message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.ombox { margin: 4px 10%; border-collapse: collapse; /* Default "notice" gray */ border: 1px solid #a2a9b1; background-color: #f8f9fa; box-sizing: border-box; } /* An empty narrow cell */ .ombox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .ombox th.mbox-text, .ombox td.mbox-text { border: none; /* 0.9em left/right */ padding: 0.25em 0.9em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .ombox td.mbox-image { border: none; text-align: center; /* 0.9em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.9em; } /* The right image cell */ .ombox td.mbox-imageright { border: none; text-align: center; /* 0px left, 0.9em right */ /* @noflip */ padding: 2px 0.9em 2px 0; } table.ombox-notice { /* Gray */ border-color: #a2a9b1; } table.ombox-speedy { /* Pink */ background-color: #fee7e6; } table.ombox-speedy, table.ombox-delete { /* Red */ border-color: #b32424; border-width: 2px; } table.ombox-content { /* Orange */ border-color: #f28500; } table.ombox-style { /* Yellow */ border-color: #fc3; } table.ombox-move { /* Purple */ border-color: #9932cc; } table.ombox-protection { /* Gray-gold */ border-color: #a2a9b1; border-width: 2px; } /** * {{ombox|small=1}} styles * * These ".mbox-small" classes must be placed after all other * ".ombox" classes. "html body.mediawiki .ombox" * is so they apply only to other page message boxes. * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ /* For the "small=yes" option. */ html body.mediawiki .ombox.mbox-small { clear: right; float: right; margin: 4px 0 4px 1em; box-sizing: border-box; width: 238px; font-size: 88%; line-height: 1.25em; } e2c21da9b2e5ea3a68e2f5a7432cbfd3cfce80a8 Module:Documentation/styles.css 828 34 68 67 2023-06-05T21:42:01Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Documentation/styles.css]] sanitized-css text/css .ts-doc-sandbox .mbox-image { padding:.75em 0 .75em .75em; } .ts-doc-doc { clear: both; background-color: #eaf3ff; border: 1px solid #a3caff; margin-top: 1em; border-top-left-radius: 2px; border-top-right-radius: 2px; } .ts-doc-header { background-color: #c2dcff; padding: .642857em 1em .5em; border-top-left-radius: 2px; border-top-right-radius: 2px; } .ts-doc-header .ts-tlinks-tlinks { line-height: 24px; margin-left: 0; } .ts-doc-header .ts-tlinks-tlinks a.external { color: #0645ad; } .ts-doc-header .ts-tlinks-tlinks a.external:visited { color: #0b0080; } .ts-doc-header .ts-tlinks-tlinks a.external:active { color: #faa700; } .ts-doc-content { padding: .214286em 1em; } .ts-doc-content:after { content: ''; clear: both; display: block; } .ts-doc-heading { display: inline-block; padding-left: 30px; background: center left/24px 24px no-repeat; /* @noflip */ background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fb/OOjs_UI_icon_puzzle-ltr.svg); height: 24px; line-height: 24px; font-size: 13px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; } .ts-doc-content > *:first-child, .ts-doc-footer > *:first-child { margin-top: .5em; } .ts-doc-content > *:last-child, .ts-doc-footer > *:last-child { margin-bottom: .5em; } .ts-doc-footer { background-color: #eaf3ff; border: 1px solid #a3caff; padding: .214286em 1em; margin-top: .214286em; font-style: italic; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } @media all and (min-width: 720px) { .ts-doc-header .ts-tlinks-tlinks { float: right; } } 71b09af67524324bf70d203a0a724bc74ec6c82e Template:Tlx 10 35 70 69 2023-06-05T21:42:02Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tlx]] wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Mono/styles.css"/><!-- -->{{#if:{{yesno|{{{nowrap|}}}}}<!-- -->|<templatestyles src="Template:Nowrap/styles.css"/><!-- -->}}<span class=" monospaced {{#if:{{yesno|{{{nowrap|}}}}}|nowrap}} "><!-- -->{{((}}<!-- --><noinclude>[[Template:Tlx|tlx]]</noinclude><!-- --><includeonly>[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:10}}}}:{{{1}}}|{{{1}}}]]</includeonly><!-- -->{{#if:{{{2|}}}|{{!}}{{{2}}}}}<!-- -->{{#if:{{{3|}}}|{{!}}{{{3}}}}}<!-- -->{{#if:{{{4|}}}|{{!}}{{{4}}}}}<!-- -->{{#if:{{{5|}}}|{{!}}{{{5}}}}}<!-- -->{{#if:{{{6|}}}|{{!}}{{{6}}}}}<!-- -->{{#if:{{{7|}}}|{{!}}{{{7}}}}}<!-- -->{{#if:{{{8|}}}|{{!}}''...''}}<!-- -->{{))}}<!-- --></span><!-- --></onlyinclude> {{documentation}} 25c4c72191d3dad2c3476ae6092c6c17ee3034d8 Template:Mono/styles.css 10 36 72 71 2023-06-05T21:42:02Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Mono/styles.css]] sanitized-css text/css /* Styling for [[Template:Mono]] */ .monospaced { /* Keep it like this: "monospace, monospace". Those are the rules from [[w:WP:MONO]]. */ font-family: monospace, monospace; } 170e200cb4116c2055eb21c4e733217152b5a5fa Template:(( 10 37 74 73 2023-06-05T21:42:02Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:((]] wikitext text/x-wiki {{<noinclude> {{documentation}}[[Category:Workaround templates]] </noinclude> f8c63100e113b89d20396b75811d33e13b808f1a Template:)) 10 38 76 75 2023-06-05T21:42:03Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:))]] wikitext text/x-wiki }}<noinclude> {{documentation}}[[Category:Workaround templates]] </noinclude> e2331ab1b2f6b7061b29f929a502a016b6d54a54 Template:Plainlist/styles.css 10 39 78 77 2023-06-05T21:42:04Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Plainlist/styles.css]] sanitized-css text/css /** * Unbulleted lists */ .plainlist ul { line-height: inherit; list-style: none none; margin: 0; } .plainlist ul li { margin-bottom: 0; } 7243fd4329145928d2b4b02fc42513ab65934318 Template:Tag 10 40 80 79 2023-06-05T21:42:04Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tag]] wikitext text/x-wiki {{#if:{{{plain|}}}| |<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}"> }}{{#switch:{{{2|pair}}} |c|close = <!--nothing--> |s|single |o|open |p|pair = {{#tag:span|&lrm;&lt;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}|&#32;{{{params}}}}} }}{{#switch:{{{2|pair}}} |c|close = {{{content|}}} |s|single = &#32;{{#tag:span|&#47;&gt;|class="p"}} |o|open = {{#tag:span|&gt;|class="p"}}{{{content|}}} |p|pair = {{#tag:span|&gt;|class="p"}}{{{content|...}}} }}{{#switch:{{{2|pair}}} |s|single |o|open = <!--nothing--> |c|close |p|pair = {{#tag:span|&lrm;&lt;&#47;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|&gt;|class="p"}} }}{{#if:{{{plain|}}}| |</code> }}<noinclude> {{Documentation}} </noinclude> 88657ad7afd7844d9681f7f08ba60c75c25800a1 Template:Plainlist/doc 10 41 82 81 2023-06-05T21:42:05Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Plainlist/doc]] wikitext text/x-wiki {{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{Uses TemplateStyles|Template:Plainlist/styles.css}} This template provides a [[:en:Web Content Accessibility Guidelines|WCAG]]/ISO-standards-compliant accessible alternative to {{tag|br|s}} separated lists, which should not be used. == Usage == {{tlx|plainlist}} starts a plain (i.e. unbulleted) list. It uses proper HTML list markup, which is more standards-compliant and more accessible than separating list items with {{tag|br|s}}. Detailed reasons for using this template can be found at [[:en:WP:UBLIST]]. == TemplateData == {{TemplateData header}} <templatedata> { "description": { "en": "Used to create plain (i.e. unbulleted) lists.", "cs": "Slouží k vytváření jednoduchých (tj. bez odrážek) seznamů." }, "format": "inline", "params": { "1": { "label": { "en": "Content", "cs": "Obsah" }, "description": { "en": "The list to wrap.", "cs": "Seznam k zabalení." }, "suggested": true, "type": "content" }, "class": { "label": { "en": "Extra Classes", "cs": "Extra třídy" }, "description": { "en": "Extra class names to add to the `class` attribute.", "cs": "Další názvy tříd, které se mají přidat do atributu `class`." }, "type": "string" } }, "paramOrder": [ "class", "1" ] } </templatedata> == See also == * {{tlx|Unbulleted list}} – Uses [[Module:List]] <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Formatting templates]] }}</includeonly> c5c829e1be67018c2403beee28b7f945f132c172 Reiji Tokisaka 0 42 83 2023-06-05T21:42:52Z Otonashi Ayana 2 Created page with "{{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }}" wikitext text/x-wiki {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} 69acbcf6e61c97f950aa6d1c5e49509a66947c38 87 83 2023-06-05T22:08:29Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = {{PAGENAME}} | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} ef453976d85e31338bc2f25e055f2c3de2bf9e2b Template:Kns 10 43 84 2023-06-05T22:05:49Z Otonashi Ayana 2 Created page with "[[Kara no Shoujo]]" wikitext text/x-wiki [[Kara no Shoujo]] a1423ba9e447f6504c366a5f8c5060b068002313 89 84 2023-06-05T23:56:07Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shoujo]]'' c7a004988707f4da4452d6debeb8ebb5161f8758 File:Srei0102a.png 6 44 85 2023-06-05T22:07:18Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Infobox character 10 2 86 14 2023-06-05T22:08:09Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{name}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> <pre> {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> 6e063724b0741a09a19e5c2abcaf0c2551175506 MediaWiki:Tagline 8 45 88 2023-06-05T22:10:36Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Gadgets-definition 8 46 90 2023-06-06T05:07:17Z Otonashi Ayana 2 Created page with "* spoilers [Kns1]" wikitext text/x-wiki * spoilers [Kns1] 843646bd585528c2447429a999dd2518e2ddce3e 92 90 2023-06-06T05:13:08Z Otonashi Ayana 2 wikitext text/x-wiki * spoilers [Kns1] | spoilers.css 67c9f7f8e6215520fd8c42de0fceb2481dcb6397 93 92 2023-06-06T05:15:02Z Otonashi Ayana 2 wikitext text/x-wiki * spoilers [ rights=foo,bar ] | spoilers.css 9fa50b545aa92450aa4e0e8348372e8c10062da4 94 93 2023-06-06T05:15:35Z Otonashi Ayana 2 wikitext text/x-wiki * spoilers [ mkey=foo,bar ] | spoilers.css da2a6514759676917fa4bd3d2bfb92df18bd9501 95 94 2023-06-06T05:20:03Z Otonashi Ayana 2 wikitext text/x-wiki * spoilers [ ResourceLoader | mykey=foo,bar ] | spoilers.css 9faf77894f52c40a399bb3fed1ee8d7dc9f1427c 96 95 2023-06-06T05:23:07Z Otonashi Ayana 2 wikitext text/x-wiki * spoilers [ KnS1 | mykey=foo,bar ] | spoilers.css f83dab646c210f284aa68e5aaa87ebdef4b93a05 100 96 2023-06-06T05:27:59Z Otonashi Ayana 2 wikitext text/x-wiki == header-spoilers == * spoilers [ KnS1 | mykey=foo,bar ] | spoilers.css 58c7fa3d558428d95eda858415e38e9340159324 MediaWiki:Gadget-spoilers/kns1.css 8 47 91 2023-06-06T05:12:41Z Otonashi Ayana 2 Created page with ".spoiler-kns1{ color:red; }" css text/css .spoiler-kns1{ color:red; } fa6773597c05b7a4802bf1b1ed5598097fb8a789 97 91 2023-06-06T05:23:35Z Otonashi Ayana 2 Otonashi Ayana moved page [[MediaWiki:Spoilers.css]] to [[MediaWiki:Gadget-spoilers.css]] css text/css .spoiler-kns1{ color:red; } fa6773597c05b7a4802bf1b1ed5598097fb8a789 MediaWiki:Spoilers.css 8 48 98 2023-06-06T05:23:35Z Otonashi Ayana 2 Otonashi Ayana moved page [[MediaWiki:Spoilers.css]] to [[MediaWiki:Gadget-spoilers.css]] css text/css /* #REDIRECT */@import url(https://karanoshoujo.miraheze.org/w/index.php?title=MediaWiki:Gadget-spoilers.css&action=raw&ctype=text/css); d6531c0eb3478cf195ce83650b9e59657c2562e5 MediaWiki:Gadget-spoilers 8 49 99 2023-06-06T05:24:13Z Otonashi Ayana 2 Created page with "Determines visible spoilers." wikitext text/x-wiki Determines visible spoilers. 4f3a568f50bcfe7b62560d13b88f70051a6f70c6 MediaWiki:Gadget-section-header-spoilers 8 50 101 2023-06-06T05:30:23Z Otonashi Ayana 2 Created page with "Spoilers" wikitext text/x-wiki Spoilers 63cc8c362870763052b162be9680b9b52bbf23e9 102 101 2023-06-06T05:36:21Z Otonashi Ayana 2 Otonashi Ayana moved page [[MediaWiki:Gadget-section-interface-gadgets]] to [[MediaWiki:Gadget-section-header-spoilers]] without leaving a redirect wikitext text/x-wiki Spoilers 63cc8c362870763052b162be9680b9b52bbf23e9 MediaWiki:Gadgets-definition 8 46 103 100 2023-06-06T05:38:18Z Otonashi Ayana 2 wikitext text/x-wiki == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * spoilers [ KnS1 | mykey=foo,bar ] | spoilers.css e89d72d1037b9b8226a8c4cd9208a4e91ea0f9a8 104 103 2023-06-06T05:45:10Z Otonashi Ayana 2 wikitext text/x-wiki == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css 374a69d0ba86f957cd79aa6f3b193f4d9c7f4516 121 104 2023-06-06T06:13:19Z Otonashi Ayana 2 wikitext text/x-wiki == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css | spoilers/cartagra.js * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css d32be96822c0ff259c620870280bf70bc87dcc62 122 121 2023-06-06T06:14:19Z Otonashi Ayana 2 wikitext text/x-wiki == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra [ ResourceLoader ] | spoilers/cartagra.css | spoilers/cartagra.js * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css d098ab4ccbba48f32381585b3b8bc1c668993b04 MediaWiki:Gadget-spoilers/kns1.css 8 47 105 97 2023-06-06T05:45:33Z Otonashi Ayana 2 Otonashi Ayana moved page [[MediaWiki:Gadget-spoilers.css]] to [[MediaWiki:Gadget-spoilers/kns1.css]] without leaving a redirect css text/css .spoiler-kns1{ color:red; } fa6773597c05b7a4802bf1b1ed5598097fb8a789 MediaWiki:Gadget-spoilers/kns2.css 8 51 106 2023-06-06T05:46:31Z Otonashi Ayana 2 Created page with ".spoiler-kns2{ color:red; }" css text/css .spoiler-kns2{ color:red; } 7a89ab088cce897e2111b88a32c464870d640199 MediaWiki:Gadget-spoilers/kns3.css 8 52 107 2023-06-06T05:46:45Z Otonashi Ayana 2 Created page with ".spoiler-kns3{ color:red; }" css text/css .spoiler-kns3{ color:red; } d5ff84b002906535cd04d222d3f436a7b5bbb723 MediaWiki:Gadget-spoilers/cartagra.css 8 53 108 2023-06-06T05:47:01Z Otonashi Ayana 2 Created page with ".spoiler-cartagra{ color:blue; }" css text/css .spoiler-cartagra{ color:blue; } 79324c5f9799e85380db16b264617c4fa6ed3a7a 127 108 2023-06-06T06:28:05Z Otonashi Ayana 2 css text/css .spoiler-cartagra{ display:inline; color:blue; } 1d8535bdad13deada0bece527fd70fd48b92e515 128 127 2023-06-06T06:30:24Z Otonashi Ayana 2 css text/css .spoiler-cartagra{ display:inline !important; color:blue; } 8b761bf7036748a6f2bb2732c5b22f7fac525373 MediaWiki:Gadget-cartagra 8 54 109 2023-06-06T05:48:20Z Otonashi Ayana 2 Created page with "'''Cartagra''' — Reveal all spoilers for ''Cartagra''" wikitext text/x-wiki '''Cartagra''' — Reveal all spoilers for ''Cartagra'' 4fa93b39885dfb9b14c0a9de6bc54e880d46a376 110 109 2023-06-06T05:48:33Z Otonashi Ayana 2 wikitext text/x-wiki '''Cartagra''' — Reveal all spoilers for ''[[Cartagra]]'' 05992ec26075cba2a9fc01528fb90d5258a9c313 MediaWiki:Gadget-kns1 8 55 111 2023-06-06T05:49:10Z Otonashi Ayana 2 Created page with "'''Kara no Shōjo''' — Reveal all spoilers for {{kns}}" wikitext text/x-wiki '''Kara no Shōjo''' — Reveal all spoilers for {{kns}} 81b4301e8a5d510eaaac8a99a7a6881631f9e7c9 Template:Kns 10 43 112 89 2023-06-06T05:49:39Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shōjo]]'' bea1fe564ce79fbe82d7f55ba04960777ef3164e MediaWiki:Gadget-kns2 8 56 113 2023-06-06T05:50:03Z Otonashi Ayana 2 Created page with "'''Kara no Shōjo 2''' — Reveal all spoilers for {{kns2}}" wikitext text/x-wiki '''Kara no Shōjo 2''' — Reveal all spoilers for {{kns2}} 576e0df248dd96e11a73972c7e4b7d8947b529d0 MediaWiki:Gadget-kns3 8 57 114 2023-06-06T05:50:07Z Otonashi Ayana 2 Created page with "'''Kara no Shōjo 3''' — Reveal all spoilers for {{kns3}}" wikitext text/x-wiki '''Kara no Shōjo 3''' — Reveal all spoilers for {{kns3}} 772b4229d94032fdc291e29e281a3684abd64a49 Template:Kns2 10 58 115 2023-06-06T05:50:37Z Otonashi Ayana 2 Created page with "''[[Kara no Shōjo: The Second Episode]]''" wikitext text/x-wiki ''[[Kara no Shōjo: The Second Episode]]'' 8b20d92c868e99f5a2d673f69b78c77d8190ecb1 Template:Kns3 10 59 116 2023-06-06T05:50:52Z Otonashi Ayana 2 Created page with "''[[Kara no Shōjo: The Last Episode]]''" wikitext text/x-wiki ''[[Kara no Shōjo: The Last Episode]]'' 2f47c347aeeb463efa04e711c351d774113e5257 Template:Cartagra 10 60 117 2023-06-06T05:53:22Z Otonashi Ayana 2 Created page with "''[[Cartagra]]''" wikitext text/x-wiki ''[[Cartagra]]'' bc7dc68cc9308f3556cfb8370c7f15407ee261b8 File:Ssyu0101a.png 6 61 118 2023-06-06T05:54:18Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Shugo Takashiro 0 62 119 2023-06-06T05:58:07Z Otonashi Ayana 2 Created page with "{{infobox character | name = {{PAGENAME}} | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * [[Kazuna Kozuki]] (love interest) * [[Kazuna Takashiro]] (wife) }} }}" wikitext text/x-wiki {{infobox character | name = {{PAGENAME}} | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * [[Kazuna Kozuki]] (love interest) * [[Kazuna Takashiro]] (wife) }} }} 09a2266f7f78ad5cd717fa1392f05d6c81dcc0db 124 119 2023-06-06T06:19:54Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = {{PAGENAME}} | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * {{spoiler|[[Kazuna Kozuki]] (love interest)}} * [[Kazuna Takashiro]] (wife) }} }} 8b6113f095ca4d70002f3ae82f0ffee32e33d157 MediaWiki:Gadget-spoilers/cartagra.js 8 63 120 2023-06-06T06:12:33Z Otonashi Ayana 2 Created page with "var spoilerCartagra = true;" javascript text/javascript var spoilerCartagra = true; a4579a1889e40f72ed3ba787edf164928ed9e9c3 Template:Spoiler 10 64 123 2023-06-06T06:18:12Z Otonashi Ayana 2 Created page with "<span class="spoiler-cartagra">{{{1}}}</span>" wikitext text/x-wiki <span class="spoiler-cartagra">{{{1}}}</span> f8014c20438dc0ac129316a0db3ebb1ed93ac6da 126 123 2023-06-06T06:26:42Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> <span class="spoiler-cartagra">{{{1}}}</span> 4048d6b77fefbf4bf27271b6954268d838c45a5a 129 126 2023-06-06T06:38:07Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /><span class="spoiler-cartagra">{{{1}}}</span> 07b7707055bdee6f1e8b089969cd1b6c647ca9d5 Template:Navbox 10 66 131 130 2023-06-06T08:51:15Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Navbox]]: w wikitext text/x-wiki <includeonly>{{#invoke:Navbox|navbox}}</includeonly><noinclude> {{Documentation}} </noinclude> fe9b964401f895918ee4fe078678f1722a3c41ec Module:Yesno 828 12 133 24 2023-06-06T08:51:16Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Yesno]]: w Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end f767643e7d12126d020d88d662a3dd057817b9dc Module:Arguments 828 13 135 26 2023-06-06T08:51:16Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Arguments]]: w Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 3134ecce8429b810d445e29eae115e2ae4c36c53 Template:Tl 10 67 137 136 2023-06-06T08:51:16Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tl]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Redirect category shell| {{R from move}} }} d6593bb3b4a866249f55d0f34b047a71fe1f1529 Template:Template link 10 68 139 138 2023-06-06T08:51:17Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link]]: w wikitext text/x-wiki &#123;&#123;[[Template:{{{1}}}|{{{1}}}]]&#125;&#125;<noinclude>{{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> eabbec62efe3044a98ebb3ce9e7d4d43c222351d Module:Message box 828 11 141 22 2023-06-06T08:51:17Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Message_box]]: w Scribunto text/plain -- This is a meta-module for producing message box templates, including -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}. -- Load necessary modules. require('strict') local getArgs local yesno = require('Module:Yesno') -- Get a language object for formatDate and ucfirst. local lang = mw.language.getContentLanguage() -- Define constants local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} local TEMPLATE_STYLES = 'Module:Message box/%s.css' -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} obj.boxType = boxType -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] obj.boxType = DEMOSPACES[demospace] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox obj.boxType = 'tmbox' else -- default to ombox obj.cfg = cfg.ombox obj.boxType = 'ombox' end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace obj.boxType = 'ambox' elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace obj.boxType = 'imbox' elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace obj.boxType = 'cmbox' else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace obj.boxType = 'tmbox' else obj.cfg = cfg.ombox -- other namespaces or invalid input obj.boxType = 'ombox' end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end self.classes[class] = 1 end function MessageBox:removeClass(class) if not class then return nil end self.classes[class] = nil end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end local plainlinks = yesno(args.plainlinks) if plainlinks == true then self:addClass('plainlinks') elseif plainlinks == false then self:removeClass('plainlinks') end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell if cfg.imageEmptyCellStyle then self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px' end -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end -- Add TemplateStyles root:wikitext(mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = TEMPLATE_STYLES:format(self.boxType) }, }) -- Create the box table. local boxTable -- Check for fmbox because not all interface messages have mw-parser-output -- which is necessary for TemplateStyles. Add the wrapper class if it is and -- then start the actual mbox, else start the mbox. if self.boxType == 'fmbox' then boxTable = root:tag('div') :addClass('mw-parser-output') :tag('table') else boxTable = root:tag('table') end boxTable:attr('id', self.id or nil) for class, _ in pairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):css('width', '52px') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') :cssText(self.imageEmptyCellStyle or nil) end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) and not self.isSmall then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('small') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):css('width', '52px') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :css('text-align', 'center') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) fcf2586b774e6db72e0a2837019f5b445124ddc4 Module:Message box/configuration 828 14 143 28 2023-06-06T08:51:17Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Message_box/configuration]]: w Scribunto text/plain -------------------------------------------------------------------------------- -- Message box configuration -- -- -- -- This module contains configuration data for [[Module:Message box]]. -- -------------------------------------------------------------------------------- return { ambox = { types = { speedy = { class = 'ambox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'ambox-delete', image = 'OOjs UI icon alert-destructive.svg' }, warning = { -- alias for content class = 'ambox-content', image = 'OOjs UI icon notice-warning.svg' }, content = { class = 'ambox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'ambox-style', image = 'Edit-clear.svg' }, move = { class = 'ambox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ambox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ambox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', allowBlankParams = {'talk', 'sect', 'date', 'issue', 'fix', 'subst', 'hidden'}, allowSmall = true, smallParam = 'left', smallClass = 'mbox-small-left', substCheck = true, classes = {'metadata', 'plainlinks', 'ambox'}, imageEmptyCell = true, imageCheckBlank = true, imageSmallSize = '20x20px', imageCellDiv = true, useCollapsibleTextFields = true, imageRightNone = true, sectionDefault = 'article', allowMainspaceCategories = true, templateCategory = 'Article message templates', templateCategoryRequireName = true, templateErrorCategory = nil, templateErrorParamsToCheck = {'issue', 'fix', 'subst'} }, cmbox = { types = { speedy = { class = 'cmbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'cmbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'cmbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'cmbox-style', image = 'Edit-clear.svg' }, move = { class = 'cmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'cmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'cmbox-notice', image = 'OOjs UI icon information-progressive.svg' }, caution = { class = 'cmbox-style', image = 'Ambox warning yellow.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'cmbox'}, imageEmptyCell = true }, fmbox = { types = { warning = { class = 'fmbox-warning', image = 'OOjs UI icon clock-destructive.svg' }, editnotice = { class = 'fmbox-editnotice', image = 'OOjs UI icon information-progressive.svg' }, system = { class = 'fmbox-system', image = 'OOjs UI icon information-progressive.svg' } }, default = 'system', showInvalidTypeError = true, classes = {'plainlinks', 'fmbox'}, imageEmptyCell = false, imageRightNone = false }, imbox = { types = { speedy = { class = 'imbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'imbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'imbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'imbox-style', image = 'Edit-clear.svg' }, move = { class = 'imbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'imbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, license = { class = 'imbox-license licensetpl', image = 'Imbox license.png' -- @todo We need an SVG version of this }, featured = { class = 'imbox-featured', image = 'Cscr-featured.svg' }, notice = { class = 'imbox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'imbox'}, usePlainlinksParam = true, imageEmptyCell = true, below = true, templateCategory = 'File message boxes' }, ombox = { types = { speedy = { class = 'ombox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'ombox-delete', image = 'OOjs UI icon alert-destructive.svg' }, warning = { -- alias for content class = 'ombox-content', image = 'OOjs UI icon notice-warning.svg' }, content = { class = 'ombox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'ombox-style', image = 'Edit-clear.svg' }, move = { class = 'ombox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'ombox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'ombox-notice', image = 'OOjs UI icon information-progressive.svg' }, critical = { class = 'mbox-critical', image = 'OOjs UI icon clock-destructive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'ombox'}, allowSmall = true, imageEmptyCell = true, imageRightNone = true }, tmbox = { types = { speedy = { class = 'tmbox-speedy', image = 'OOjs UI icon clock-destructive.svg' }, delete = { class = 'tmbox-delete', image = 'OOjs UI icon alert-destructive.svg' }, content = { class = 'tmbox-content', image = 'OOjs UI icon notice-warning.svg' }, style = { class = 'tmbox-style', image = 'Edit-clear.svg' }, move = { class = 'tmbox-move', image = 'Merge-split-transwiki default.svg' }, protection = { class = 'tmbox-protection', image = 'Semi-protection-shackle-keyhole.svg' }, notice = { class = 'tmbox-notice', image = 'OOjs UI icon information-progressive.svg' } }, default = 'notice', showInvalidTypeError = true, classes = {'plainlinks', 'tmbox'}, allowSmall = true, imageRightNone = true, imageEmptyCell = true, imageEmptyCellStyle = true, templateCategory = 'Talk message boxes' } } d8cf419a57983f67944903d17535c0ee0780ceb6 Module:Redirect 828 69 145 144 2023-06-06T08:51:18Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Redirect]]: w Scribunto text/plain -- This module provides functions for getting the target of a redirect page. local p = {} -- Gets a mw.title object, using pcall to avoid generating script errors if we -- are over the expensive function count limit (among other possible causes). local function getTitle(...) local success, titleObj = pcall(mw.title.new, ...) if success then return titleObj else return nil end end -- Gets the name of a page that a redirect leads to, or nil if it isn't a -- redirect. function p.getTargetFromText(text) local target = string.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]" ) or string.match( text, "^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]" ) return target and mw.uri.decode(target, 'PATH') end -- Gets the target of a redirect. If the page specified is not a redirect, -- returns nil. function p.getTarget(page, fulltext) -- Get the title object. Both page names and title objects are allowed -- as input. local titleObj if type(page) == 'string' or type(page) == 'number' then titleObj = getTitle(page) elseif type(page) == 'table' and type(page.getContent) == 'function' then titleObj = page else error(string.format( "bad argument #1 to 'getTarget'" .. " (string, number, or title object expected, got %s)", type(page) ), 2) end if not titleObj then return nil end local targetTitle = titleObj.redirectTarget if targetTitle then if fulltext then return targetTitle.fullText else return targetTitle.prefixedText end else return nil end end --[[ -- Given a single page name determines what page it redirects to and returns the -- target page name, or the passed page name when not a redirect. The passed -- page name can be given as plain text or as a page link. -- -- Returns page name as plain text, or when the bracket parameter is given, as a -- page link. Returns an error message when page does not exist or the redirect -- target cannot be determined for some reason. --]] function p.luaMain(rname, bracket, fulltext) if type(rname) ~= "string" or not rname:find("%S") then return nil end bracket = bracket and "[[%s]]" or "%s" rname = rname:match("%[%[(.+)%]%]") or rname local target = p.getTarget(rname, fulltext) local ret = target or rname ret = getTitle(ret) if ret then if fulltext then ret = ret.fullText else ret = ret.prefixedText end return bracket:format(ret) else return nil end end -- Provides access to the luaMain function from wikitext. function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) return p.luaMain(args[1], args.bracket, args.fulltext) or '' end -- Returns true if the specified page is a redirect, and false otherwise. function p.luaIsRedirect(page) local titleObj = getTitle(page) if not titleObj then return false end if titleObj.isRedirect then return true else return false end end -- Provides access to the luaIsRedirect function from wikitext, returning 'yes' -- if the specified page is a redirect, and the blank string otherwise. function p.isRedirect(frame) local args = require('Module:Arguments').getArgs(frame, {frameOnly = true}) if p.luaIsRedirect(args[1]) then return 'yes' else return '' end end return p a224c45940343d66f49a78b0a39b2045e2c45d20 Template:DMCA 10 70 147 146 2023-06-06T08:51:18Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:DMCA]]: w wikitext text/x-wiki #REDIRECT [[Template:Dated maintenance category (articles)]] {{Redirect category shell| {{R from move}} {{R from modification}} {{R from template shortcut}} }} 711d3f1c53fa704297f675a8dcf1a56719c5b654 Template:Dated maintenance category 10 71 149 148 2023-06-06T08:51:19Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Dated_maintenance_category]]: w wikitext text/x-wiki <nowiki/><!--This nowiki helps to prevent whitespace at the top of articles-->{{#ifeq:{{FULLROOTPAGENAME}}|Wikipedia:Template messages|<!--Do not categorize-->|<!-- -->{{#ifexpr:{{#if:{{NAMESPACE}}|0|1}}+{{#ifeq:{{{onlyarticles|no}}}|yes|0|1}} |{{#if:{{{3|}}} |[[Category:{{{1}}} {{{2}}} {{{3}}}]]<!-- -->{{#ifexist:Category:{{{1}}} {{{2}}} {{{3}}} |<!-- -->|[[Category:Articles with invalid date parameter in template]]<!-- -->}} |[[Category:{{#if:{{{5|}}} |{{{5}}}<!-- -->|{{{1}}}<!-- -->}}]]<!-- -->}}{{#if:{{{4|}}} |[[Category:{{{4}}}]]}}<!-- -->}}<!-- -->}}<noinclude> {{documentation}} </noinclude> 41e7d4000124d4f718ddf222af0b72825048c4c4 Template:FULLROOTPAGENAME 10 72 151 150 2023-06-06T08:51:19Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:FULLROOTPAGENAME]]: w wikitext text/x-wiki {{ safesubst:<noinclude/>#if: {{ safesubst:<noinclude/>Ns has subpages | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{ safesubst:<noinclude/>NAMESPACE:{{{1}}}}}|{{ safesubst:<noinclude/>NAMESPACE}}}} }} | {{ safesubst:<noinclude/>#titleparts:{{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}}|1}} | {{ safesubst:<noinclude/>#if:{{{1|}}}|{{{1}}}|{{ safesubst:<noinclude/>FULLPAGENAME}}}} }}<noinclude> {{documentation}} </noinclude> fd0c4e7050dded2d50e5df405e6e5e31dd0d46ac Template:Ns has subpages 10 73 153 152 2023-06-06T08:51:19Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Ns_has_subpages]]: w wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#invoke:Ns has subpages|main}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 060d2d01af26cb67fd90a7c346a0d2d5e450a040 Module:Ns has subpages 828 74 155 154 2023-06-06T08:51:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Ns_has_subpages]]: w Scribunto text/plain -- This module implements [[Template:Ns has subpages]]. -- While the template is fairly simple, this information is made available to -- Lua directly, so using a module means that we don't have to update the -- template as new namespaces are added. local p = {} function p._main(ns, frame) -- Get the current namespace if we were not passed one. if not ns then ns = mw.title.getCurrentTitle().namespace end -- Look up the namespace table from mw.site.namespaces. This should work -- for a majority of cases. local nsTable = mw.site.namespaces[ns] -- Try using string matching to get the namespace from page names. -- Do a quick and dirty bad title check to try and make sure we do the same -- thing as {{NAMESPACE}} in most cases. if not nsTable and type(ns) == 'string' and not ns:find('[<>|%[%]{}]') then local nsStripped = ns:gsub('^[_%s]*:', '') nsStripped = nsStripped:gsub(':.*$', '') nsTable = mw.site.namespaces[nsStripped] end -- If we still have no match then try the {{NAMESPACE}} parser function, -- which should catch the remainder of cases. Don't use a mw.title object, -- as this would increment the expensive function count for each new page -- tested. if not nsTable then frame = frame or mw.getCurrentFrame() local nsProcessed = frame:callParserFunction('NAMESPACE', ns) nsTable = nsProcessed and mw.site.namespaces[nsProcessed] end return nsTable and nsTable.hasSubpages end function p.main(frame) local ns = frame:getParent().args[1] if ns then ns = ns:match('^%s*(.-)%s*$') -- trim whitespace ns = tonumber(ns) or ns end local hasSubpages = p._main(ns, frame) return hasSubpages and 'yes' or '' end return p e133068ba73738b16e1e3eba47735516a461eb5b Template:Yesno 10 23 157 46 2023-06-06T08:51:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Yesno]]: w wikitext text/x-wiki {{<includeonly>safesubst:</includeonly>#switch: {{<includeonly>safesubst:</includeonly>lc: {{{1|¬}}} }} |no |n |false |0 = {{{no|<!-- null -->}}} | = {{{blank|{{{no|<!-- null -->}}}}}} |¬ = {{{¬|}}} |yes |y |true |1 = {{{yes|yes}}} |#default = {{{def|{{{yes|yes}}}}}} }}<noinclude> {{Documentation}} </noinclude> 166fab9e5411aacd02ca4c9e93fbc7bf6bcf26ac Template:Main other 10 75 159 158 2023-06-06T08:51:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Main_other]]: w wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:0}} | main | other }} }} | main = {{{1|}}} | other | #default = {{{2|}}} }}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 86ad907ffeea3cc545159e00cd1f2d6433946450 Module:Check for unknown parameters 828 76 161 160 2023-06-06T08:51:21Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Check_for_unknown_parameters]]: w Scribunto text/plain -- This module may be used to compare the arguments passed to the parent -- with a list of arguments, returning a specified result if an argument is -- not on the list local p = {} local function trim(s) return s:match('^%s*(.-)%s*$') end local function isnotempty(s) return s and s:match('%S') end local function clean(text) -- Return text cleaned for display and truncated if too long. -- Strip markers are replaced with dummy text representing the original wikitext. local pos, truncated local function truncate(text) if truncated then return '' end if mw.ustring.len(text) > 25 then truncated = true text = mw.ustring.sub(text, 1, 25) .. '...' end return mw.text.nowiki(text) end local parts = {} for before, tag, remainder in text:gmatch('([^\127]*)\127[^\127]*%-(%l+)%-[^\127]*\127()') do pos = remainder table.insert(parts, truncate(before) .. '&lt;' .. tag .. '&gt;...&lt;/' .. tag .. '&gt;') end table.insert(parts, truncate(text:sub(pos or 1))) return table.concat(parts) end function p._check(args, pargs) if type(args) ~= "table" or type(pargs) ~= "table" then -- TODO: error handling return end -- create the list of known args, regular expressions, and the return string local knownargs = {} local regexps = {} for k, v in pairs(args) do if type(k) == 'number' then v = trim(v) knownargs[v] = 1 elseif k:find('^regexp[1-9][0-9]*$') then table.insert(regexps, '^' .. v .. '$') end end -- loop over the parent args, and make sure they are on the list local ignoreblank = isnotempty(args['ignoreblank']) local showblankpos = isnotempty(args['showblankpositional']) local values = {} for k, v in pairs(pargs) do if type(k) == 'string' and knownargs[k] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(k, regexp) then knownflag = true break end end if not knownflag and ( not ignoreblank or isnotempty(v) ) then table.insert(values, clean(k)) end elseif type(k) == 'number' and knownargs[tostring(k)] == nil then local knownflag = false for _, regexp in ipairs(regexps) do if mw.ustring.match(tostring(k), regexp) then knownflag = true break end end if not knownflag and ( showblankpos or isnotempty(v) ) then table.insert(values, k .. ' = ' .. clean(v)) end end end -- add results to the output tables local res = {} if #values > 0 then local unknown_text = args['unknown'] or 'Found _VALUE_, ' if mw.getCurrentFrame():preprocess( "{{REVISIONID}}" ) == "" then local preview_text = args['preview'] if isnotempty(preview_text) then preview_text = require('Module:If preview')._warning({preview_text}) elseif preview == nil then preview_text = unknown_text end unknown_text = preview_text end for _, v in pairs(values) do -- Fix odd bug for | = which gets stripped to the empty string and -- breaks category links if v == '' then v = ' ' end -- avoid error with v = 'example%2' ("invalid capture index") local r = unknown_text:gsub('_VALUE_', {_VALUE_ = v}) table.insert(res, r) end end return table.concat(res) end function p.check(frame) local args = frame.args local pargs = frame:getParent().args return p._check(args, pargs) end return p 93db6d115d4328d2a5148bb42959105e367b663e Module:String 828 77 163 162 2023-06-06T08:51:21Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:String]]: w Scribunto text/plain --[[ This module is intended to provide access to basic string functions. Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace. Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated. Unit tests for this module are available at Module:String/tests. ]] local str = {} --[[ len This function returns the length of the target string. Usage: {{#invoke:String|len|target_string|}} OR {{#invoke:String|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ) local s = new_args['s'] or '' return mw.ustring.len( s ) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:String|sub|target_string|start_index|end_index}} OR {{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The fist index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 local len = mw.ustring.len( s ) -- Convert negatives for range checking if i < 0 then i = len + i + 1 end if j < 0 then j = len + j + 1 end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ) end if j < i then return str._error( 'String subset indices out of order' ) end return mw.ustring.sub( s, i, j ) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function str.sublength( frame ) local i = tonumber( frame.args.i ) or 0 local len = tonumber( frame.args.len ) return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) ) end --[[ _match This function returns a substring from the source string that matches a specified pattern. It is exported for use in other modules Usage: strmatch = require("Module:String")._match sresult = strmatch( s, pattern, start, match, plain, nomatch ) Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This sub-routine is exported for use in other modules function str._match( s, pattern, start, match_index, plain_flag, nomatch ) if s == '' then return str._error( 'Target string is empty' ) end if pattern == '' then return str._error( 'Pattern string is empty' ) end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Requested start is out of range' ) end if match_index == 0 then return str._error( 'Match index is out of range' ) end if plain_flag then pattern = str._escapePattern( pattern ) end local result if match_index == 1 then -- Find first match is simple case result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ) end local iterator = mw.ustring.gmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table = {} local count = 1 for w in iterator do result_table[count] = w count = count + 1 end result = result_table[ count + match_index ] end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ) else return nomatch end else return result end end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} OR {{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This is the entry point for #invoke:String|match function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) local s = new_args['s'] or '' local start = tonumber( new_args['start'] ) or 1 local plain_flag = str._getBoolean( new_args['plain'] or false ) local pattern = new_args['pattern'] or '' local match_index = math.floor( tonumber(new_args['match']) or 1 ) local nomatch = new_args['nomatch'] return str._match( s, pattern, start, match_index, plain_flag, nomatch ) end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:String|pos|target_string|index_value}} OR {{#invoke:String|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ) local target_str = new_args['target'] or '' local pos = tonumber( new_args['pos'] ) or 0 if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'String index out of range' ) end return mw.ustring.sub( target_str, pos, pos ) end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separatetly. ]] function str.str_find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target'} ) local source_str = new_args['source'] or '' local target_str = new_args['target'] or '' if target_str == '' then return 1 end local start = mw.ustring.find( source_str, target_str, 1, true ) if start == nil then start = -1 end return start end --[[ find This function allows one to search for a target string or pattern within another string. Usage: {{#invoke:String|find|source_str|target_string|start_index|plain_flag}} OR {{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}} Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to true If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0. This function should be safe for UTF-8 strings. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['target'] or '' local start_pos = tonumber(new_args['start']) or 1 local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return 0 end plain = str._getBoolean( plain ) local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber( new_args['count'] ) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = str._getBoolean( plain ) if plain then pattern = str._escapePattern( pattern ) replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. end local result if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ) else result = mw.ustring.gsub( source_str, pattern, replace ) end return result end --[[ simple function to pipe string.rep to templates. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end --[[ escapePattern This function escapes special characters from a Lua string pattern. See [1] for details on how patterns work. [1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns Usage: {{#invoke:String|escapePattern|pattern_string}} Parameters pattern_string: The pattern string to escape. ]] function str.escapePattern( frame ) local pattern_str = frame.args[1] if not pattern_str then return str._error( 'No pattern string specified' ) end local result = str._escapePattern( pattern_str ) return result end --[[ count This function counts the number of occurrences of one string in another. ]] function str.count(frame) local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'}) local source = args.source or '' local pattern = args.pattern or '' local plain = str._getBoolean(args.plain or true) if plain then pattern = str._escapePattern(pattern) end local _, count = mw.ustring.gsub(source, pattern, '') return count end --[[ endswith This function determines whether a string ends with another string. ]] function str.endswith(frame) local args = str._getParameters(frame.args, {'source', 'pattern'}) local source = args.source or '' local pattern = args.pattern or '' if pattern == '' then -- All strings end with the empty string. return "yes" end if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then return "yes" else return "" end end --[[ join Join all non empty arguments together; the first argument is the separator. Usage: {{#invoke:String|join|sep|one|two|three}} ]] function str.join(frame) local args = {} local sep for _, v in ipairs( frame.args ) do if sep then if v ~= '' then table.insert(args, v) end else sep = v end end return table.concat( args, sep or '' ) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {} local index = 1 local value for _, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index] index = index + 1 end new_args[arg] = value end return new_args end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'Errors reported by Module String' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return '' end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Category:' .. error_category .. ']]' .. error_str end return error_str end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'No boolean value found' ) end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) end return str 6df794dd52434e0f6a372c9918f5a9dedd15f579 Module:List 828 30 165 60 2023-06-06T08:51:21Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:List]]: w Scribunto text/plain -- This module outputs different kinds of lists. At the moment, bulleted, -- unbulleted, horizontal, ordered, and horizontal ordered lists are supported. local libUtil = require('libraryUtil') local checkType = libUtil.checkType local mTableTools = require('Module:TableTools') local p = {} local listTypes = { ['bulleted'] = true, ['unbulleted'] = true, ['horizontal'] = true, ['ordered'] = true, ['horizontal_ordered'] = true } function p.makeListData(listType, args) -- Constructs a data table to be passed to p.renderList. local data = {} -- Classes data.classes = {} data.templatestyles = '' if listType == 'horizontal' or listType == 'horizontal_ordered' then table.insert(data.classes, 'hlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Flatlist/styles.css' } } elseif listType == 'unbulleted' then table.insert(data.classes, 'plainlist') data.templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Plainlist/styles.css' } } end table.insert(data.classes, args.class) -- Main div style data.style = args.style -- Indent for horizontal lists if listType == 'horizontal' or listType == 'horizontal_ordered' then local indent = tonumber(args.indent) indent = indent and indent * 1.6 or 0 if indent > 0 then data.marginLeft = indent .. 'em' end end -- List style types for ordered lists -- This could be "1, 2, 3", "a, b, c", or a number of others. The list style -- type is either set by the "type" attribute or the "list-style-type" CSS -- property. if listType == 'ordered' or listType == 'horizontal_ordered' then data.listStyleType = args.list_style_type or args['list-style-type'] data.type = args['type'] -- Detect invalid type attributes and attempt to convert them to -- list-style-type CSS properties. if data.type and not data.listStyleType and not tostring(data.type):find('^%s*[1AaIi]%s*$') then data.listStyleType = data.type data.type = nil end end -- List tag type if listType == 'ordered' or listType == 'horizontal_ordered' then data.listTag = 'ol' else data.listTag = 'ul' end -- Start number for ordered lists data.start = args.start if listType == 'horizontal_ordered' then -- Apply fix to get start numbers working with horizontal ordered lists. local startNum = tonumber(data.start) if startNum then data.counterReset = 'listitem ' .. tostring(startNum - 1) end end -- List style -- ul_style and ol_style are included for backwards compatibility. No -- distinction is made for ordered or unordered lists. data.listStyle = args.list_style -- List items -- li_style is included for backwards compatibility. item_style was included -- to be easier to understand for non-coders. data.itemStyle = args.item_style or args.li_style data.items = {} for i, num in ipairs(mTableTools.numKeys(args)) do local item = {} item.content = args[num] item.style = args['item' .. tostring(num) .. '_style'] or args['item_style' .. tostring(num)] item.value = args['item' .. tostring(num) .. '_value'] or args['item_value' .. tostring(num)] table.insert(data.items, item) end return data end function p.renderList(data) -- Renders the list HTML. -- Return the blank string if there are no list items. if type(data.items) ~= 'table' or #data.items < 1 then return '' end -- Render the main div tag. local root = mw.html.create(( #data.classes > 0 or data.marginLeft or data.style ) and 'div' or nil) for i, class in ipairs(data.classes or {}) do root:addClass(class) end root:css{['margin-left'] = data.marginLeft} if data.style then root:cssText(data.style) end -- Render the list tag. local list = root:tag(data.listTag or 'ul') list :attr{start = data.start, type = data.type} :css{ ['counter-reset'] = data.counterReset, ['list-style-type'] = data.listStyleType } if data.listStyle then list:cssText(data.listStyle) end -- Render the list items for i, t in ipairs(data.items or {}) do local item = list:tag('li') if data.itemStyle then item:cssText(data.itemStyle) end if t.style then item:cssText(t.style) end item :attr{value = t.value} :wikitext(t.content) end return data.templatestyles .. tostring(root) end function p.makeList(listType, args) if not listType or not listTypes[listType] then error(string.format( "bad argument #1 to 'makeList' ('%s' is not a valid list type)", tostring(listType) ), 2) end checkType('makeList', 2, args, 'table') local data = p.makeListData(listType, args) return p.renderList(data) end for listType in pairs(listTypes) do p[listType] = function (frame) local mArguments = require('Module:Arguments') local origArgs = mArguments.getArgs(frame) -- Copy all the arguments to a new table, for faster indexing. local args = {} for k, v in pairs(origArgs) do args[k] = v end return p.makeList(listType, args) end end return p d701c0798e541793aa5ed1e9af50fc3b20548907 Module:TableTools 828 31 167 62 2023-06-06T08:51:22Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:TableTools]]: w Scribunto text/plain --[[ ------------------------------------------------------------------------------------ -- TableTools -- -- -- -- This module includes a number of functions for dealing with Lua tables. -- -- It is a meta-module, meant to be called from other Lua modules, and should -- -- not be called directly from #invoke. -- ------------------------------------------------------------------------------------ --]] local libraryUtil = require('libraryUtil') local p = {} -- Define often-used variables and functions. local floor = math.floor local infinity = math.huge local checkType = libraryUtil.checkType local checkTypeMulti = libraryUtil.checkTypeMulti --[[ ------------------------------------------------------------------------------------ -- isPositiveInteger -- -- This function returns true if the given value is a positive integer, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a given table key is in the array part or the -- hash part of a table. ------------------------------------------------------------------------------------ --]] function p.isPositiveInteger(v) if type(v) == 'number' and v >= 1 and floor(v) == v and v < infinity then return true else return false end end --[[ ------------------------------------------------------------------------------------ -- isNan -- -- This function returns true if the given number is a NaN value, and false -- if not. Although it doesn't operate on tables, it is included here as it is -- useful for determining whether a value can be a valid table key. Lua will -- generate an error if a NaN is used as a table key. ------------------------------------------------------------------------------------ --]] function p.isNan(v) if type(v) == 'number' and tostring(v) == '-nan' then return true else return false end end --[[ ------------------------------------------------------------------------------------ -- shallowClone -- -- This returns a clone of a table. The value returned is a new table, but all -- subtables and functions are shared. Metamethods are respected, but the returned -- table will have no metatable of its own. ------------------------------------------------------------------------------------ --]] function p.shallowClone(t) local ret = {} for k, v in pairs(t) do ret[k] = v end return ret end --[[ ------------------------------------------------------------------------------------ -- removeDuplicates -- -- This removes duplicate values from an array. Non-positive-integer keys are -- ignored. The earliest value is kept, and all subsequent duplicate values are -- removed, but otherwise the array order is unchanged. ------------------------------------------------------------------------------------ --]] function p.removeDuplicates(t) checkType('removeDuplicates', 1, t, 'table') local isNan = p.isNan local ret, exists = {}, {} for i, v in ipairs(t) do if isNan(v) then -- NaNs can't be table keys, and they are also unique, so we don't need to check existence. ret[#ret + 1] = v else if not exists[v] then ret[#ret + 1] = v exists[v] = true end end end return ret end --[[ ------------------------------------------------------------------------------------ -- numKeys -- -- This takes a table and returns an array containing the numbers of any numerical -- keys that have non-nil values, sorted in numerical order. ------------------------------------------------------------------------------------ --]] function p.numKeys(t) checkType('numKeys', 1, t, 'table') local isPositiveInteger = p.isPositiveInteger local nums = {} for k, v in pairs(t) do if isPositiveInteger(k) then nums[#nums + 1] = k end end table.sort(nums) return nums end --[[ ------------------------------------------------------------------------------------ -- affixNums -- -- This takes a table and returns an array containing the numbers of keys with the -- specified prefix and suffix. For example, for the table -- {a1 = 'foo', a3 = 'bar', a6 = 'baz'} and the prefix "a", affixNums will -- return {1, 3, 6}. ------------------------------------------------------------------------------------ --]] function p.affixNums(t, prefix, suffix) checkType('affixNums', 1, t, 'table') checkType('affixNums', 2, prefix, 'string', true) checkType('affixNums', 3, suffix, 'string', true) local function cleanPattern(s) -- Cleans a pattern so that the magic characters ()%.[]*+-?^$ are interpreted literally. s = s:gsub('([%(%)%%%.%[%]%*%+%-%?%^%$])', '%%%1') return s end prefix = prefix or '' suffix = suffix or '' prefix = cleanPattern(prefix) suffix = cleanPattern(suffix) local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$' local nums = {} for k, v in pairs(t) do if type(k) == 'string' then local num = mw.ustring.match(k, pattern) if num then nums[#nums + 1] = tonumber(num) end end end table.sort(nums) return nums end --[[ ------------------------------------------------------------------------------------ -- numData -- -- Given a table with keys like ("foo1", "bar1", "foo2", "baz2"), returns a table -- of subtables in the format -- { [1] = {foo = 'text', bar = 'text'}, [2] = {foo = 'text', baz = 'text'} } -- Keys that don't end with an integer are stored in a subtable named "other". -- The compress option compresses the table so that it can be iterated over with -- ipairs. ------------------------------------------------------------------------------------ --]] function p.numData(t, compress) checkType('numData', 1, t, 'table') checkType('numData', 2, compress, 'boolean', true) local ret = {} for k, v in pairs(t) do local prefix, num = mw.ustring.match(tostring(k), '^([^0-9]*)([1-9][0-9]*)$') if num then num = tonumber(num) local subtable = ret[num] or {} if prefix == '' then -- Positional parameters match the blank string; put them at the start of the subtable instead. prefix = 1 end subtable[prefix] = v ret[num] = subtable else local subtable = ret.other or {} subtable[k] = v ret.other = subtable end end if compress then local other = ret.other ret = p.compressSparseArray(ret) ret.other = other end return ret end --[[ ------------------------------------------------------------------------------------ -- compressSparseArray -- -- This takes an array with one or more nil values, and removes the nil values -- while preserving the order, so that the array can be safely traversed with -- ipairs. ------------------------------------------------------------------------------------ --]] function p.compressSparseArray(t) checkType('compressSparseArray', 1, t, 'table') local ret = {} local nums = p.numKeys(t) for _, num in ipairs(nums) do ret[#ret + 1] = t[num] end return ret end --[[ ------------------------------------------------------------------------------------ -- sparseIpairs -- -- This is an iterator for sparse arrays. It can be used like ipairs, but can -- handle nil values. ------------------------------------------------------------------------------------ --]] function p.sparseIpairs(t) checkType('sparseIpairs', 1, t, 'table') local nums = p.numKeys(t) local i = 0 local lim = #nums return function () i = i + 1 if i <= lim then local key = nums[i] return key, t[key] else return nil, nil end end end --[[ ------------------------------------------------------------------------------------ -- size -- -- This returns the size of a key/value pair table. It will also work on arrays, -- but for arrays it is more efficient to use the # operator. ------------------------------------------------------------------------------------ --]] function p.size(t) checkType('size', 1, t, 'table') local i = 0 for k in pairs(t) do i = i + 1 end return i end local function defaultKeySort(item1, item2) -- "number" < "string", so numbers will be sorted before strings. local type1, type2 = type(item1), type(item2) if type1 ~= type2 then return type1 < type2 else -- This will fail with table, boolean, function. return item1 < item2 end end --[[ Returns a list of the keys in a table, sorted using either a default comparison function or a custom keySort function. ]] function p.keysToList(t, keySort, checked) if not checked then checkType('keysToList', 1, t, 'table') checkTypeMulti('keysToList', 2, keySort, { 'function', 'boolean', 'nil' }) end local list = {} local index = 1 for key, value in pairs(t) do list[index] = key index = index + 1 end if keySort ~= false then keySort = type(keySort) == 'function' and keySort or defaultKeySort table.sort(list, keySort) end return list end --[[ Iterates through a table, with the keys sorted using the keysToList function. If there are only numerical keys, sparseIpairs is probably more efficient. ]] function p.sortedPairs(t, keySort) checkType('sortedPairs', 1, t, 'table') checkType('sortedPairs', 2, keySort, 'function', true) local list = p.keysToList(t, keySort, true) local i = 0 return function() i = i + 1 local key = list[i] if key ~= nil then return key, t[key] else return nil, nil end end end --[[ Returns true if all keys in the table are consecutive integers starting at 1. --]] function p.isArray(t) checkType("isArray", 1, t, "table") local i = 0 for k, v in pairs(t) do i = i + 1 if t[i] == nil then return false end end return true end -- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 } function p.invert(array) checkType("invert", 1, array, "table") local map = {} for i, v in ipairs(array) do map[v] = i end return map end --[[ { "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true } --]] function p.listToSet(t) checkType("listToSet", 1, t, "table") local set = {} for _, item in ipairs(t) do set[item] = true end return set end --[[ Recursive deep copy function. Preserves identities of subtables. ]] local function _deepCopy(orig, includeMetatable, already_seen) -- Stores copies of tables indexed by the original table. already_seen = already_seen or {} local copy = already_seen[orig] if copy ~= nil then return copy end if type(orig) == 'table' then copy = {} for orig_key, orig_value in pairs(orig) do copy[deepcopy(orig_key, includeMetatable, already_seen)] = deepcopy(orig_value, includeMetatable, already_seen) end already_seen[orig] = copy if includeMetatable then local mt = getmetatable(orig) if mt ~= nil then local mt_copy = deepcopy(mt, includeMetatable, already_seen) setmetatable(copy, mt_copy) already_seen[mt] = mt_copy end end else -- number, string, boolean, etc copy = orig end return copy end function p.deepCopy(orig, noMetatable, already_seen) checkType("deepCopy", 3, already_seen, "table", true) return _deepCopy(orig, not noMetatable, already_seen) end --[[ Concatenates all values in the table that are indexed by a number, in order. sparseConcat{ a, nil, c, d } => "acd" sparseConcat{ nil, b, c, d } => "bcd" ]] function p.sparseConcat(t, sep, i, j) local list = {} local list_i = 0 for _, v in p.sparseIpairs(t) do list_i = list_i + 1 list[list_i] = v end return table.concat(list, sep, i, j) end --[[ -- This returns the length of a table, or the first integer key n counting from -- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return -- a different value when there are gaps in the array portion of the table. -- Intended to be used on data loaded with mw.loadData. For other tables, use #. -- Note: #frame.args in frame object always be set to 0, regardless of -- the number of unnamed template parameters, so use this function for -- frame.args. --]] function p.length(t) local i = 1 while t[i] ~= nil do i = i + 1 end return i - 1 end function p.inArray(arr, valueToFind) checkType("inArray", 1, arr, "table") -- if valueToFind is nil, error? for _, v in ipairs(arr) do if v == valueToFind then return true end end return false end return p fe918509f168332267834b3a6f5c219a9de5b2e7 Template:Spaces 10 78 169 168 2023-06-06T08:51:22Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Spaces]]: w wikitext text/x-wiki <span class="nowrap">{{#iferror:{{#expr:{{{1|1}}}}} |{{#switch:{{{1}}} |fig=&#8199; |en=&ensp; |em=&emsp; |thin=&thinsp; |hair=&#8202; |&nbsp; }} |{{#invoke:String|rep|{{#switch:{{{2}}} |fig=&#8199; |en=&ensp; |em=&emsp; |thin=&thinsp; |hair=&#8202; |&nbsp; }}|{{{1|1}}}}} }}</span><noinclude> {{documentation}} </noinclude> a9ed762825e7579f15dcb9b171b0c1c3bf524b3f Module:Template link general 828 79 171 170 2023-06-06T08:51:22Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Template_link_general]]: w Scribunto text/plain -- This implements Template:Tlg local getArgs = require('Module:Arguments').getArgs local p = {} -- Is a string non-empty? local function _ne(s) return s ~= nil and s ~= "" end local nw = mw.text.nowiki local function addTemplate(s) local i, _ = s:find(':', 1, true) if i == nil then return 'Template:' .. s end local ns = s:sub(1, i - 1) if ns == '' or mw.site.namespaces[ns] then return s else return 'Template:' .. s end end local function trimTemplate(s) local needle = 'template:' if s:sub(1, needle:len()):lower() == needle then return s:sub(needle:len() + 1) else return s end end local function linkTitle(args) if _ne(args.nolink) then return args['1'] end local titleObj local titlePart = '[[' if args['1'] then -- This handles :Page and other NS titleObj = mw.title.new(args['1'], 'Template') else titleObj = mw.title.getCurrentTitle() end titlePart = titlePart .. (titleObj ~= nil and titleObj.fullText or addTemplate(args['1'])) local textPart = args.alttext if not _ne(textPart) then if titleObj ~= nil then textPart = titleObj:inNamespace("Template") and args['1'] or titleObj.fullText else -- redlink textPart = args['1'] end end if _ne(args.subst) then -- HACK: the ns thing above is probably broken textPart = 'subst:' .. textPart end if _ne(args.brace) then textPart = nw('{{') .. textPart .. nw('}}') elseif _ne(args.braceinside) then textPart = nw('{') .. textPart .. nw('}') end titlePart = titlePart .. '|' .. textPart .. ']]' if _ne(args.braceinside) then titlePart = nw('{') .. titlePart .. nw('}') end return titlePart end function p.main(frame) local args = getArgs(frame, { trim = true, removeBlanks = false }) return p._main(args) end function p._main(args) local bold = _ne(args.bold) or _ne(args.boldlink) or _ne(args.boldname) local italic = _ne(args.italic) or _ne(args.italics) local dontBrace = _ne(args.brace) or _ne(args.braceinside) local code = _ne(args.code) or _ne(args.tt) local show_result = _ne(args._show_result) local expand = _ne(args._expand) -- Build the link part local titlePart = linkTitle(args) if bold then titlePart = "'''" .. titlePart .. "'''" end if _ne(args.nowrapname) then titlePart = '<span class="nowrap">' .. titlePart .. '</span>' end -- Build the arguments local textPart = "" local textPartBuffer = "&#124;" local codeArguments = {} local codeArgumentsString = "" local i = 2 local j = 1 while args[i] do local val = args[i] if val ~= "" then if _ne(args.nowiki) then -- Unstrip nowiki tags first because calling nw on something that already contains nowiki tags will -- mangle the nowiki strip marker and result in literal UNIQ...QINU showing up val = nw(mw.text.unstripNoWiki(val)) end local k, v = string.match(val, "(.*)=(.*)") if not k then codeArguments[j] = val j = j + 1 else codeArguments[k] = v end codeArgumentsString = codeArgumentsString .. textPartBuffer .. val if italic then val = '<span style="font-style:italic;">' .. val .. '</span>' end textPart = textPart .. textPartBuffer .. val end i = i + 1 end -- final wrap local ret = titlePart .. textPart if not dontBrace then ret = nw('{{') .. ret .. nw('}}') end if _ne(args.a) then ret = nw('*') .. '&nbsp;' .. ret end if _ne(args.kbd) then ret = '<kbd>' .. ret .. '</kbd>' end if code then ret = '<code>' .. ret .. '</code>' elseif _ne(args.plaincode) then ret = '<code style="border:none;background:transparent;">' .. ret .. '</code>' end if _ne(args.nowrap) then ret = '<span class="nowrap">' .. ret .. '</span>' end --[[ Wrap as html?? local span = mw.html.create('span') span:wikitext(ret) --]] if _ne(args.debug) then ret = ret .. '\n<pre>' .. mw.text.encode(mw.dumpObject(args)) .. '</pre>' end if show_result then local result = mw.getCurrentFrame():expandTemplate{title = addTemplate(args[1]), args = codeArguments} ret = ret .. " → " .. result end if expand then local query = mw.text.encode('{{' .. addTemplate(args[1]) .. string.gsub(codeArgumentsString, textPartBuffer, "|") .. '}}') local url = mw.uri.fullUrl('special:ExpandTemplates', 'wpInput=' .. query) mw.log() ret = ret .. " [" .. tostring(url) .. "]" end return ret end return p c7307fa3959d308a2dd7fd2f5009c1ce6db3d122 Template:Template other 10 4 173 7 2023-06-06T08:51:23Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_other]]: w wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Template}} | template | other }} }} | template = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 06fb13d264df967b5232141067eb7d2b67372d76 Template:Clear 10 80 175 174 2023-06-06T08:51:23Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Clear]]: w wikitext text/x-wiki <div style="clear:{{{1|both}}};"></div><noinclude> {{documentation}} </noinclude> 38bab3e3d7fbd3d6800d46556e60bc6bac494d72 Template:Main 10 81 177 176 2023-06-06T08:51:24Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Main]]: w wikitext text/x-wiki <includeonly>{{#invoke:Labelled list hatnote|labelledList|Main article|Main articles|Main page|Main pages}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 99ebf54e265aa9354bc4861d3b0da913f1441ede Template:Sidebar 10 82 179 178 2023-06-06T08:51:24Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Sidebar]]: w wikitext text/x-wiki {{#invoke:Sidebar|sidebar}}<noinclude> {{documentation}}</noinclude> ab2498000a99daf324f656b0badd187b4a3e2b42 Template:Plainlist 10 8 181 16 2023-06-06T08:51:25Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Plainlist]]: w wikitext text/x-wiki <templatestyles src="Plainlist/styles.css"/><div class="plainlist {{{class|}}}">{{#if:{{{1|}}}| {{{1}}} </div>}}<noinclude></div> {{documentation}} </noinclude> 8ca89b36606f7babc854ca4f296b3cea3e358a07 Module:Effective protection expiry 828 83 183 182 2023-06-06T08:51:25Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Effective_protection_expiry]]: w Scribunto text/plain local p = {} -- Returns the expiry of a restriction of an action on a given title, or unknown if it cannot be known. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) local title if type(pagename) == 'table' and pagename.prefixedText then title = pagename elseif pagename then title = mw.title.new(pagename) else title = mw.title.getCurrentTitle() end pagename = title.prefixedText if action == 'autoreview' then local stabilitySettings = mw.ext.FlaggedRevs.getStabilitySettings(title) return stabilitySettings and stabilitySettings.expiry or 'unknown' elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' then error( 'First parameter must be one of edit, move, create, upload, autoreview', 2 ) end local rawExpiry = mw.getCurrentFrame():callParserFunction('PROTECTIONEXPIRY', action, pagename) if rawExpiry == 'infinity' then return 'infinity' elseif rawExpiry == '' then return 'unknown' else local year, month, day, hour, minute, second = rawExpiry:match( '^(%d%d%d%d)(%d%d)(%d%d)(%d%d)(%d%d)(%d%d)$' ) if year then return string.format( '%s-%s-%sT%s:%s:%s', year, month, day, hour, minute, second ) else error('internal error in Module:Effective protection expiry; malformed expiry timestamp') end end end setmetatable(p, { __index = function(t, k) return function(frame) return t._main(k, frame.args[1]) end end }) return p 9a8c58dc2667232ed08a9b206a5d89ca8150312b Module:Effective protection level 828 84 185 184 2023-06-06T08:51:25Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Effective_protection_level]]: w Scribunto text/plain local p = {} -- Returns the permission required to perform a given action on a given title. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) local title if type(pagename) == 'table' and pagename.prefixedText then title = pagename elseif pagename then title = mw.title.new(pagename) else title = mw.title.getCurrentTitle() end pagename = title.prefixedText if action == 'autoreview' then local level = mw.ext.FlaggedRevs.getStabilitySettings(title) level = level and level.autoreview if level == 'review' then return 'reviewer' elseif level ~= '' then return level else return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review end elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 ) end if title.namespace == 8 then -- MediaWiki namespace if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page return 'interfaceadmin' else -- any non-JS/CSS MediaWiki page return 'sysop' end elseif title.namespace == 2 and title.isSubpage then if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page return 'interfaceadmin' elseif title.contentModel == 'json' then -- user JSON page return 'sysop' end end if action == 'undelete' then return 'sysop' end local level = title.protectionLevels[action] and title.protectionLevels[action][1] if level == 'sysop' or level == 'editprotected' then return 'sysop' elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page return 'sysop' elseif level == 'templateeditor' then return 'templateeditor' elseif action == 'move' then local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move. if blacklistentry and not blacklistentry.params.autoconfirmed then return 'templateeditor' elseif title.namespace == 6 then return 'filemover' elseif level == 'extendedconfirmed' then return 'extendedconfirmed' else return 'autoconfirmed' end end local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename) if blacklistentry then if not blacklistentry.params.autoconfirmed then return 'templateeditor' elseif level == 'extendedconfirmed' then return 'extendedconfirmed' else return 'autoconfirmed' end elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason return 'autoconfirmed' elseif level then return level elseif action == 'upload' then return 'autoconfirmed' elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts return 'user' else return '*' end end setmetatable(p, { __index = function(t, k) return function(frame) return t._main(k, frame.args[1]) end end }) return p 70256a489edf6be9808031b14a7e3ef3e025da97 Module:File link 828 85 187 186 2023-06-06T08:51:26Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:File_link]]: w Scribunto text/plain -- This module provides a library for formatting file wikilinks. local yesno = require('Module:Yesno') local checkType = require('libraryUtil').checkType local p = {} function p._main(args) checkType('_main', 1, args, 'table') -- This is basically libraryUtil.checkTypeForNamedArg, but we are rolling our -- own function to get the right error level. local function checkArg(key, val, level) if type(val) ~= 'string' then error(string.format( "type error in '%s' parameter of '_main' (expected string, got %s)", key, type(val) ), level) end end local ret = {} -- Adds a positional parameter to the buffer. local function addPositional(key) local val = args[key] if not val then return nil end checkArg(key, val, 4) ret[#ret + 1] = val end -- Adds a named parameter to the buffer. We assume that the parameter name -- is the same as the argument key. local function addNamed(key) local val = args[key] if not val then return nil end checkArg(key, val, 4) ret[#ret + 1] = key .. '=' .. val end -- Filename checkArg('file', args.file, 3) ret[#ret + 1] = 'File:' .. args.file -- Format if args.format then checkArg('format', args.format) if args.formatfile then checkArg('formatfile', args.formatfile) ret[#ret + 1] = args.format .. '=' .. args.formatfile else ret[#ret + 1] = args.format end end -- Border if yesno(args.border) then ret[#ret + 1] = 'border' end addPositional('location') addPositional('alignment') addPositional('size') addNamed('upright') addNamed('link') addNamed('alt') addNamed('page') addNamed('class') addNamed('lang') addNamed('start') addNamed('end') addNamed('thumbtime') addPositional('caption') return string.format('[[%s]]', table.concat(ret, '|')) end function p.main(frame) local origArgs = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:File link' }) if not origArgs.file then error("'file' parameter missing from [[Template:File link]]", 0) end -- Copy the arguments that were passed to a new table to avoid looking up -- every possible parameter in the frame object. local args = {} for k, v in pairs(origArgs) do -- Make _BLANK a special argument to add a blank parameter. For use in -- conditional templates etc. it is useful for blank arguments to be -- ignored, but we still need a way to specify them so that we can do -- things like [[File:Example.png|link=]]. if v == '_BLANK' then v = '' end args[k] = v end return p._main(args) end return p 66925f088d11530f2482f04181a3baaaa0ad3d0c Module:Format link 828 86 189 188 2023-06-06T08:51:26Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Format_link]]: w Scribunto text/plain -------------------------------------------------------------------------------- -- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the {{format link}} template. -------------------------------------------------------------------------------- local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg local mArguments -- lazily initialise [[Module:Arguments]] local mError -- lazily initialise [[Module:Error]] local yesno -- lazily initialise [[Module:Yesno]] local p = {} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end local function maybeItalicize(s, shouldItalicize) -- Italicize s if s is a string and the shouldItalicize parameter is true. if s and shouldItalicize then return '<i>' .. s .. '</i>' else return s end end local function parseLink(link) -- Parse a link and return a table with the link's components. -- These components are: -- - link: the link, stripped of any initial colon (always present) -- - page: the page name (always present) -- - section: the page name (may be nil) -- - display: the display text, if manually entered after a pipe (may be nil) link = removeInitialColon(link) -- Find whether a faux display value has been added with the {{!}} magic -- word. local prePipe, display = link:match('^(.-)|(.*)$') link = prePipe or link -- Find the page, if it exists. -- For links like [[#Bar]], the page will be nil. local preHash, postHash = link:match('^(.-)#(.*)$') local page if not preHash then -- We have a link like [[Foo]]. page = link elseif preHash ~= '' then -- We have a link like [[Foo#Bar]]. page = preHash end -- Find the section, if it exists. local section if postHash and postHash ~= '' then section = postHash end return { link = link, page = page, section = section, display = display, } end local function formatDisplay(parsed, options) -- Formats a display string based on a parsed link table (matching the -- output of parseLink) and an options table (matching the input options for -- _formatLink). local page = maybeItalicize(parsed.page, options.italicizePage) local section = maybeItalicize(parsed.section, options.italicizeSection) if (not section) then return page elseif (not page) then return mw.ustring.format('§&nbsp;%s', section) else return mw.ustring.format('%s §&nbsp;%s', page, section) end end local function missingArgError(target) mError = require('Module:Error') return mError.error{message = 'Error: no link or target specified! ([[' .. target .. '#Errors|help]])' } end -------------------------------------------------------------------------------- -- Main functions -------------------------------------------------------------------------------- function p.formatLink(frame) -- The formatLink export function, for use in templates. yesno = require('Module:Yesno') local args = getArgs(frame) local link = args[1] or args.link local target = args[3] or args.target if not (link or target) then return missingArgError('Template:Format link') end return p._formatLink{ link = link, display = args[2] or args.display, target = target, italicizePage = yesno(args.italicizepage), italicizeSection = yesno(args.italicizesection), categorizeMissing = args.categorizemissing } end function p._formatLink(options) -- The formatLink export function, for use in modules. checkType('_formatLink', 1, options, 'table') local function check(key, expectedType) --for brevity checkTypeForNamedArg( '_formatLink', key, options[key], expectedType or 'string', true ) end check('link') check('display') check('target') check('italicizePage', 'boolean') check('italicizeSection', 'boolean') check('categorizeMissing') -- Normalize link and target and check that at least one is present if options.link == '' then options.link = nil end if options.target == '' then options.target = nil end if not (options.link or options.target) then return missingArgError('Module:Format link') end local parsed = parseLink(options.link) local display = options.display or parsed.display local catMissing = options.categorizeMissing local category = '' -- Find the display text if not display then display = formatDisplay(parsed, options) end -- Handle the target option if present if options.target then local parsedTarget = parseLink(options.target) parsed.link = parsedTarget.link parsed.page = parsedTarget.page end -- Test if page exists if a diagnostic category is specified if catMissing and (mw.ustring.len(catMissing) > 0) then local title = nil if parsed.page then title = mw.title.new(parsed.page) end if title and (not title.isExternal) then local success, exists = pcall(function() return title.exists end) if success and not exists then category = mw.ustring.format('[[Category:%s]]', catMissing) end end end -- Format the result as a link if parsed.link == display then return mw.ustring.format('[[:%s]]%s', parsed.link, category) else return mw.ustring.format('[[:%s|%s]]%s', parsed.link, display, category) end end -------------------------------------------------------------------------------- -- Derived convenience functions -------------------------------------------------------------------------------- function p.formatPages(options, pages) -- Formats an array of pages using formatLink and the given options table, -- and returns it as an array. Nil values are not allowed. local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink{ link = page, categorizeMissing = options.categorizeMissing, italicizePage = options.italicizePage, italicizeSection = options.italicizeSection } end return ret end return p 1253bdd2683ee4badc33856bfd5499b09a7dca1f Module:Hatnote 828 87 191 190 2023-06-06T08:51:26Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Hatnote]]: w Scribunto text/plain -------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the {{hatnote}} and {{format link}} meta-templates and includes -- -- helper functions for other Lua hatnote modules. -- -------------------------------------------------------------------------------- local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg local mArguments -- lazily initialise [[Module:Arguments]] local yesno -- lazily initialise [[Module:Yesno]] local formatLink -- lazily initialise [[Module:Format link]] ._formatLink local p = {} -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end function p.defaultClasses(inline) -- Provides the default hatnote classes as a space-separated string; useful -- for hatnote-manipulation modules like [[Module:Hatnote group]]. return (inline == 1 and 'hatnote-inline' or 'hatnote') .. ' ' .. 'navigation-not-searchable' end function p.disambiguate(page, disambiguator) -- Formats a page title with a disambiguation parenthetical, -- i.e. "Example" → "Example (disambiguation)". checkType('disambiguate', 1, page, 'string') checkType('disambiguate', 2, disambiguator, 'string', true) disambiguator = disambiguator or 'disambiguation' return mw.ustring.format('%s (%s)', page, disambiguator) end function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to false. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end function p.makeWikitextError(msg, helpLink, addTrackingCategory, title) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- [[Module:Yesno]], and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') title = title or mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' ([[' .. helpLink .. '|help]])' else helpText = '' end -- Make the category text. local category if not title.isTalkPage -- Don't categorise talk pages and title.namespace ~= 2 -- Don't categorise userspace and yesno(addTrackingCategory) ~= false -- Allow opting out then category = 'Hatnote templates with errors' category = mw.ustring.format( '[[%s:%s]]', mw.site.namespaces[14].name, category ) else category = '' end return mw.ustring.format( '<strong class="error">Error: %s%s.</strong>%s', msg, helpText, category ) end local curNs = mw.title.getCurrentTitle().namespace p.missingTargetCat = --Default missing target category, exported for use in related modules ((curNs == 0) or (curNs == 14)) and 'Articles with hatnote templates targeting a nonexistent page' or nil function p.quote(title) --Wraps titles in quotation marks. If the title starts/ends with a quotation --mark, kerns that side as with {{-'}} local quotationMarks = { ["'"]=true, ['"']=true, ['“']=true, ["‘"]=true, ['”']=true, ["’"]=true } local quoteLeft, quoteRight = -- Test if start/end are quotation marks quotationMarks[string.sub(title, 1, 1)], quotationMarks[string.sub(title, -1, -1)] if quoteLeft or quoteRight then title = mw.html.create("span"):wikitext(title) end if quoteLeft then title:css("padding-left", "0.15em") end if quoteRight then title:css("padding-right", "0.15em") end return '"' .. tostring(title) .. '"' end -------------------------------------------------------------------------------- -- Hatnote -- -- Produces standard hatnote text. Implements the {{hatnote}} template. -------------------------------------------------------------------------------- function p.hatnote(frame) local args = getArgs(frame) local s = args[1] if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end return p._hatnote(s, { extraclasses = args.extraclasses, selfref = args.selfref }) end function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) options = options or {} local inline = options.inline local hatnote = mw.html.create(inline == 1 and 'span' or 'div') local extraclasses if type(options.extraclasses) == 'string' then extraclasses = options.extraclasses end hatnote :attr('role', 'note') :addClass(p.defaultClasses(inline)) :addClass(extraclasses) :addClass(options.selfref and 'selfref' or nil) :wikitext(s) return mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Module:Hatnote/styles.css' } } .. tostring(hatnote) end return p 3ae1ed7094c5005ca0896395ec9a587287a0bef1 Module:Hatnote/styles.css 828 88 193 192 2023-06-06T08:51:27Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Hatnote/styles.css]]: w sanitized-css text/css /* {{pp|small=y}} */ .hatnote { font-style: italic; } /* Limit structure CSS to divs because of [[Module:Hatnote inline]] */ div.hatnote { /* @noflip */ padding-left: 1.6em; margin-bottom: 0.5em; } .hatnote i { font-style: normal; } /* The templatestyles element inserts a link element before hatnotes. * TODO: Remove link if/when WMF resolves T200206 */ .hatnote + link + .hatnote { margin-top: -0.5em; } 44680ffd6e888866df2cdfa0341af9c7b97da94c Module:Hatnote list 828 89 195 194 2023-06-06T08:51:27Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Hatnote_list]]: w Scribunto text/plain -------------------------------------------------------------------------------- -- Module:Hatnote list -- -- -- -- This module produces and formats lists for use in hatnotes. In particular, -- -- it implements the for-see list, i.e. lists of "For X, see Y" statements, -- -- as used in {{about}}, {{redirect}}, and their variants. Also introduced -- -- are andList & orList helpers for formatting lists with those conjunctions. -- -------------------------------------------------------------------------------- local mArguments --initialize lazily local mFormatLink = require('Module:Format link') local mHatnote = require('Module:Hatnote') local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local p = {} -------------------------------------------------------------------------------- -- List stringification helper functions -- -- These functions are used for stringifying lists, usually page lists inside -- the "Y" portion of "For X, see Y" for-see items. -------------------------------------------------------------------------------- --default options table used across the list stringification functions local stringifyListDefaultOptions = { conjunction = "and", separator = ",", altSeparator = ";", space = " ", formatted = false } --Searches display text only local function searchDisp(haystack, needle) return string.find( string.sub(haystack, (string.find(haystack, '|') or 0) + 1), needle ) end -- Stringifies a list generically; probably shouldn't be used directly local function stringifyList(list, options) -- Type-checks, defaults, and a shortcut checkType("stringifyList", 1, list, "table") if #list == 0 then return nil end checkType("stringifyList", 2, options, "table", true) options = options or {} for k, v in pairs(stringifyListDefaultOptions) do if options[k] == nil then options[k] = v end end local s = options.space -- Format the list if requested if options.formatted then list = mFormatLink.formatPages( {categorizeMissing = mHatnote.missingTargetCat}, list ) end -- Set the separator; if any item contains it, use the alternate separator local separator = options.separator for k, v in pairs(list) do if searchDisp(v, separator) then separator = options.altSeparator break end end -- Set the conjunction, apply Oxford comma, and force a comma if #1 has "§" local conjunction = s .. options.conjunction .. s if #list == 2 and searchDisp(list[1], "§") or #list > 2 then conjunction = separator .. conjunction end -- Return the formatted string return mw.text.listToText(list, separator .. s, conjunction) end --DRY function function p.conjList (conj, list, fmt) return stringifyList(list, {conjunction = conj, formatted = fmt}) end -- Stringifies lists with "and" or "or" function p.andList (...) return p.conjList("and", ...) end function p.orList (...) return p.conjList("or", ...) end -------------------------------------------------------------------------------- -- For see -- -- Makes a "For X, see [[Y]]." list from raw parameters. Intended for the -- {{about}} and {{redirect}} templates and their variants. -------------------------------------------------------------------------------- --default options table used across the forSee family of functions local forSeeDefaultOptions = { andKeyword = 'and', title = mw.title.getCurrentTitle().text, otherText = 'other uses', forSeeForm = 'For %s, see %s.', } --Collapses duplicate punctuation local function punctuationCollapse (text) local replacements = { ["%.%.$"] = ".", ["%?%.$"] = "?", ["%!%.$"] = "!", ["%.%]%]%.$"] = ".]]", ["%?%]%]%.$"] = "?]]", ["%!%]%]%.$"] = "!]]" } for k, v in pairs(replacements) do text = string.gsub(text, k, v) end return text end -- Structures arguments into a table for stringification, & options function p.forSeeArgsToTable (args, from, options) -- Type-checks and defaults checkType("forSeeArgsToTable", 1, args, 'table') checkType("forSeeArgsToTable", 2, from, 'number', true) from = from or 1 checkType("forSeeArgsToTable", 3, options, 'table', true) options = options or {} for k, v in pairs(forSeeDefaultOptions) do if options[k] == nil then options[k] = v end end -- maxArg's gotten manually because getArgs() and table.maxn aren't friends local maxArg = 0 for k, v in pairs(args) do if type(k) == 'number' and k > maxArg then maxArg = k end end -- Structure the data out from the parameter list: -- * forTable is the wrapper table, with forRow rows -- * Rows are tables of a "use" string & a "pages" table of pagename strings -- * Blanks are left empty for defaulting elsewhere, but can terminate list local forTable = {} local i = from local terminated = false -- If there is extra text, and no arguments are given, give nil value -- to not produce default of "For other uses, see foo (disambiguation)" if options.extratext and i > maxArg then return nil end -- Loop to generate rows repeat -- New empty row local forRow = {} -- On blank use, assume list's ended & break at end of this loop forRow.use = args[i] if not args[i] then terminated = true end -- New empty list of pages forRow.pages = {} -- Insert first pages item if present table.insert(forRow.pages, args[i + 1]) -- If the param after next is "and", do inner loop to collect params -- until the "and"'s stop. Blanks are ignored: "1|and||and|3" → {1, 3} while args[i + 2] == options.andKeyword do if args[i + 3] then table.insert(forRow.pages, args[i + 3]) end -- Increment to next "and" i = i + 2 end -- Increment to next use i = i + 2 -- Append the row table.insert(forTable, forRow) until terminated or i > maxArg return forTable end -- Stringifies a table as formatted by forSeeArgsToTable function p.forSeeTableToString (forSeeTable, options) -- Type-checks and defaults checkType("forSeeTableToString", 1, forSeeTable, "table", true) checkType("forSeeTableToString", 2, options, "table", true) options = options or {} for k, v in pairs(forSeeDefaultOptions) do if options[k] == nil then options[k] = v end end -- Stringify each for-see item into a list local strList = {} if forSeeTable then for k, v in pairs(forSeeTable) do local useStr = v.use or options.otherText local pagesStr = p.andList(v.pages, true) or mFormatLink._formatLink{ categorizeMissing = mHatnote.missingTargetCat, link = mHatnote.disambiguate(options.title) } local forSeeStr = string.format(options.forSeeForm, useStr, pagesStr) forSeeStr = punctuationCollapse(forSeeStr) table.insert(strList, forSeeStr) end end if options.extratext then table.insert(strList, punctuationCollapse(options.extratext..'.')) end -- Return the concatenated list return table.concat(strList, ' ') end -- Produces a "For X, see [[Y]]" string from arguments. Expects index gaps -- but not blank/whitespace values. Ignores named args and args < "from". function p._forSee (args, from, options) local forSeeTable = p.forSeeArgsToTable(args, from, options) return p.forSeeTableToString(forSeeTable, options) end -- As _forSee, but uses the frame. function p.forSee (frame, from, options) mArguments = require('Module:Arguments') return p._forSee(mArguments.getArgs(frame), from, options) end return p d0828422b1aa0d0d0092d699d059c9e882260398 Module:Labelled list hatnote 828 90 197 196 2023-06-06T08:51:27Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Labelled_list_hatnote]]: w Scribunto text/plain -------------------------------------------------------------------------------- -- Labelled list -- -- -- -- This module does the core work of creating a hatnote composed of a list -- -- prefixed by a colon-terminated label, i.e. "LABEL: [andList of pages]", -- -- for {{see also}} and similar templates. -- -------------------------------------------------------------------------------- local mHatnote = require('Module:Hatnote') local mHatlist = require('Module:Hatnote list') local mArguments --initialize lazily local yesno --initialize lazily local p = {} -- Defaults global to this module local defaults = { label = 'See also', --Final fallback for label argument labelForm = '%s: %s', prefixes = {'label', 'label ', 'l'}, template = 'Module:Labelled list hatnote' } -- Localizable message strings local msg = { errorSuffix = '#Errors', noInputWarning = 'no page names specified', noOutputWarning = "'''[[%s]] — no output: none of the target pages exist.'''" } -- Helper function that pre-combines display parameters into page arguments. -- Also compresses sparse arrays, as a desirable side-effect. function p.preprocessDisplays (args, prefixes) -- Prefixes specify which parameters, in order, to check for display options -- They each have numbers auto-appended, e.g. 'label1', 'label 1', & 'l1' prefixes = prefixes or defaults.prefixes local indices = {} local sparsePages = {} for k, v in pairs(args) do if type(k) == 'number' then indices[#indices + 1] = k local display for i = 1, #prefixes do display = args[prefixes[i] .. k] if display then break end end sparsePages[k] = display and string.format('%s|%s', string.gsub(v, '|.*$', ''), display) or v end end table.sort(indices) local pages = {} for k, v in ipairs(indices) do pages[#pages + 1] = sparsePages[v] end return pages end --Helper function to get a page target from a processed page string --e.g. "Page|Label" → "Page" or "Target" → "Target" local function getTarget(pagename) local pipe = string.find(pagename, '|') return string.sub(pagename, 0, pipe and pipe - 1 or nil) end -- Produces a labelled pages-list hatnote. -- The main frame (template definition) takes 1 or 2 arguments, for a singular -- and (optionally) plural label respectively: -- * {{#invoke:Labelled list hatnote|labelledList|Singular label|Plural label}} -- The resulting template takes pagename & label parameters normally. function p.labelledList (frame) mArguments = require('Module:Arguments') yesno = require('Module:Yesno') local labels = {frame.args[1] or defaults.label} labels[2] = frame.args[2] or labels[1] labels[3] = frame.args[3] --no defaulting labels[4] = frame.args[4] --no defaulting local template = frame:getParent():getTitle() local args = mArguments.getArgs(frame, {parentOnly = true}) local pages = p.preprocessDisplays(args) local options = { category = yesno(args.category), extraclasses = frame.args.extraclasses, ifexists = yesno(frame.args.ifexists), namespace = frame.args.namespace or args.namespace, selfref = yesno(frame.args.selfref or args.selfref), template = template } return p._labelledList(pages, labels, options) end function p._labelledList (pages, labels, options) if options.ifexists then for k = #pages, 1, -1 do --iterate backwards to allow smooth removals local v = pages[k] local title = mw.title.new(getTarget(v), namespace) if (v == '') or title == nil or not title.exists then table.remove(pages, k) end end end labels = labels or {} label = (#pages == 1 and labels[1] or labels[2]) or defaults.label for k, v in pairs(pages) do if mHatnote.findNamespaceId(v) ~= 0 then label = ( #pages == 1 and (labels[3] or labels[1] or defaults.label) or (labels[4] or labels[2] or defaults.label) ) or defaults.label end end if #pages == 0 then if options.ifexists then mw.addWarning( string.format( msg.noOutputWarning, options.template or defaults.template ) ) return '' else return mHatnote.makeWikitextError( msg.noInputWarning, (options.template or defaults.template) .. msg.errorSuffix, options.category ) end end local text = string.format( options.labelForm or defaults.labelForm, label, mHatlist.andList(pages, true) ) local hnOptions = { extraclasses = options.extraclasses, selfref = options.selfref } return mHatnote._hatnote(text, hnOptions) end return p b7a8ba27cf6195e6427701b94e8d2acad3c40a21 Module:Navbar 828 91 199 198 2023-06-06T08:51:28Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Navbar]]: w Scribunto text/plain local p = {} local cfg = mw.loadData('Module:Navbar/configuration') local function get_title_arg(is_collapsible, template) local title_arg = 1 if is_collapsible then title_arg = 2 end if template then title_arg = 'template' end return title_arg end local function choose_links(template, args) -- The show table indicates the default displayed items. -- view, talk, edit, hist, move, watch -- TODO: Move to configuration. local show = {true, true, true, false, false, false} if template then show[2] = false show[3] = false local index = {t = 2, d = 2, e = 3, h = 4, m = 5, w = 6, talk = 2, edit = 3, hist = 4, move = 5, watch = 6} -- TODO: Consider removing TableTools dependency. for _, v in ipairs(require ('Module:TableTools').compressSparseArray(args)) do local num = index[v] if num then show[num] = true end end end local remove_edit_link = args.noedit if remove_edit_link then show[3] = false end return show end local function add_link(link_description, ul, is_mini, font_style) local l if link_description.url then l = {'[', '', ']'} else l = {'[[', '|', ']]'} end ul:tag('li') :addClass('nv-' .. link_description.full) :wikitext(l[1] .. link_description.link .. l[2]) :tag(is_mini and 'abbr' or 'span') :attr('title', link_description.html_title) :cssText(font_style) :wikitext(is_mini and link_description.mini or link_description.full) :done() :wikitext(l[3]) :done() end local function make_list(title_text, has_brackets, displayed_links, is_mini, font_style) local title = mw.title.new(mw.text.trim(title_text), cfg.title_namespace) if not title then error(cfg.invalid_title .. title_text) end local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or '' -- TODO: Get link_descriptions and show into the configuration module. -- link_descriptions should be easier... local link_descriptions = { { ['mini'] = 'v', ['full'] = 'view', ['html_title'] = 'View this template', ['link'] = title.fullText, ['url'] = false }, { ['mini'] = 't', ['full'] = 'talk', ['html_title'] = 'Discuss this template', ['link'] = talkpage, ['url'] = false }, { ['mini'] = 'e', ['full'] = 'edit', ['html_title'] = 'Edit this template', ['link'] = title:fullUrl('action=edit'), ['url'] = true }, { ['mini'] = 'h', ['full'] = 'hist', ['html_title'] = 'History of this template', ['link'] = title:fullUrl('action=history'), ['url'] = true }, { ['mini'] = 'm', ['full'] = 'move', ['html_title'] = 'Move this template', ['link'] = mw.title.new('Special:Movepage'):fullUrl('target='..title.fullText), ['url'] = true }, { ['mini'] = 'w', ['full'] = 'watch', ['html_title'] = 'Watch this template', ['link'] = title:fullUrl('action=watch'), ['url'] = true } } local ul = mw.html.create('ul') if has_brackets then ul:addClass(cfg.classes.brackets) :cssText(font_style) end for i, _ in ipairs(displayed_links) do if displayed_links[i] then add_link(link_descriptions[i], ul, is_mini, font_style) end end return ul:done() end function p._navbar(args) -- TODO: We probably don't need both fontstyle and fontcolor... local font_style = args.fontstyle local font_color = args.fontcolor local is_collapsible = args.collapsible local is_mini = args.mini local is_plain = args.plain local collapsible_class = nil if is_collapsible then collapsible_class = cfg.classes.collapsible if not is_plain then is_mini = 1 end if font_color then font_style = (font_style or '') .. '; color: ' .. font_color .. ';' end end local navbar_style = args.style local div = mw.html.create():tag('div') div :addClass(cfg.classes.navbar) :addClass(cfg.classes.plainlinks) :addClass(cfg.classes.horizontal_list) :addClass(collapsible_class) -- we made the determination earlier :cssText(navbar_style) if is_mini then div:addClass(cfg.classes.mini) end local box_text = (args.text or cfg.box_text) .. ' ' -- the concatenated space guarantees the box text is separated if not (is_mini or is_plain) then div :tag('span') :addClass(cfg.classes.box_text) :cssText(font_style) :wikitext(box_text) end local template = args.template local displayed_links = choose_links(template, args) local has_brackets = args.brackets local title_arg = get_title_arg(is_collapsible, template) local title_text = args[title_arg] or (':' .. mw.getCurrentFrame():getParent():getTitle()) local list = make_list(title_text, has_brackets, displayed_links, is_mini, font_style) div:node(list) if is_collapsible then local title_text_class if is_mini then title_text_class = cfg.classes.collapsible_title_mini else title_text_class = cfg.classes.collapsible_title_full end div:done() :tag('div') :addClass(title_text_class) :cssText(font_style) :wikitext(args[1]) end local frame = mw.getCurrentFrame() -- hlist -> navbar is best-effort to preserve old Common.css ordering. return frame:extensionTag{ name = 'templatestyles', args = { src = cfg.hlist_templatestyles } } .. frame:extensionTag{ name = 'templatestyles', args = { src = cfg.templatestyles } } .. tostring(div:done()) end function p.navbar(frame) return p._navbar(require('Module:Arguments').getArgs(frame)) end return p 79f907e59eaa8bbf8dd50bb751933ebeaaa7eb17 Module:Navbar/configuration 828 92 201 200 2023-06-06T08:51:29Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Navbar/configuration]]: w Scribunto text/plain return { ['templatestyles'] = 'Module:Navbar/styles.css', ['hlist_templatestyles'] = 'Hlist/styles.css', ['box_text'] = 'This box: ', -- default text box when not plain or mini ['title_namespace'] = 'Template', -- namespace to default to for title ['invalid_title'] = 'Invalid title ', ['classes'] = { -- set a line to nil if you don't want it ['navbar'] = 'navbar', ['plainlinks'] = 'plainlinks', -- plainlinks ['horizontal_list'] = 'hlist', -- horizontal list class ['mini'] = 'navbar-mini', -- class indicating small links in the navbar ['this_box'] = 'navbar-boxtext', ['brackets'] = 'navbar-brackets', -- 'collapsible' is the key for a class to indicate the navbar is -- setting up the collapsible element in addition to the normal -- navbar. ['collapsible'] = 'navbar-collapse', ['collapsible_title_mini'] = 'navbar-ct-mini', ['collapsible_title_full'] = 'navbar-ct-full' } } b007c336b17ec4bcd4d5a9dca9f8cba301662b55 Module:Navbar/styles.css 828 93 203 202 2023-06-06T08:51:29Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Navbar/styles.css]]: w sanitized-css text/css /* {{pp|small=yes}} */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar-collapse { float: left; text-align: left; } .navbar-boxtext { word-spacing: 0; } .navbar ul { display: inline-block; white-space: nowrap; line-height: inherit; } .navbar-brackets::before { margin-right: -0.125em; content: '[ '; } .navbar-brackets::after { margin-left: -0.125em; content: ' ]'; } .navbar li { word-spacing: -0.125em; } .navbar a > span, .navbar a > abbr { text-decoration: inherit; } .navbar-mini abbr { font-variant: small-caps; border-bottom: none; text-decoration: none; cursor: inherit; } .navbar-ct-full { font-size: 114%; margin: 0 7em; } .navbar-ct-mini { font-size: 114%; margin: 0 4em; } 9d4056f949b4f0b159e3d40dfb1a5f01e72f9571 Module:Navbox 828 94 205 204 2023-06-06T08:51:30Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Navbox]]: w Scribunto text/plain require('strict') local p = {} local navbar = require('Module:Navbar')._navbar local cfg = mw.loadData('Module:Navbox/configuration') local getArgs -- lazily initialized local args local format = string.format local function striped(wikitext, border) -- Return wikitext with markers replaced for odd/even striping. -- Child (subgroup) navboxes are flagged with a category that is removed -- by parent navboxes. The result is that the category shows all pages -- where a child navbox is not contained in a parent navbox. local orphanCat = cfg.category.orphan if border == cfg.keyword.border_subgroup and args[cfg.arg.orphan] ~= cfg.keyword.orphan_yes then -- No change; striping occurs in outermost navbox. return wikitext .. orphanCat end local first, second = cfg.class.navbox_odd_part, cfg.class.navbox_even_part if args[cfg.arg.evenodd] then if args[cfg.arg.evenodd] == cfg.keyword.evenodd_swap then first, second = second, first else first = args[cfg.arg.evenodd] second = first end end local changer if first == second then changer = first else local index = 0 changer = function (code) if code == '0' then -- Current occurrence is for a group before a nested table. -- Set it to first as a valid although pointless class. -- The next occurrence will be the first row after a title -- in a subgroup and will also be first. index = 0 return first end index = index + 1 return index % 2 == 1 and first or second end end local regex = orphanCat:gsub('([%[%]])', '%%%1') return (wikitext:gsub(regex, ''):gsub(cfg.marker.regex, changer)) -- () omits gsub count end local function processItem(item, nowrapitems) if item:sub(1, 2) == '{|' then -- Applying nowrap to lines in a table does not make sense. -- Add newlines to compensate for trim of x in |parm=x in a template. return '\n' .. item ..'\n' end if nowrapitems == cfg.keyword.nowrapitems_yes then local lines = {} for line in (item .. '\n'):gmatch('([^\n]*)\n') do local prefix, content = line:match('^([*:;#]+)%s*(.*)') if prefix and not content:match(cfg.pattern.nowrap) then line = format(cfg.nowrap_item, prefix, content) end table.insert(lines, line) end item = table.concat(lines, '\n') end if item:match('^[*:;#]') then return '\n' .. item ..'\n' end return item end local function has_navbar() return args[cfg.arg.navbar] ~= cfg.keyword.navbar_off and args[cfg.arg.navbar] ~= cfg.keyword.navbar_plain and ( args[cfg.arg.name] or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.pattern.sandbox, '') ~= cfg.pattern.navbox ) end local function renderNavBar(titleCell) if has_navbar() then titleCell:wikitext(navbar{ [cfg.navbar.name] = args[cfg.arg.name], [cfg.navbar.mini] = 1, [cfg.navbar.fontstyle] = (args[cfg.arg.basestyle] or '') .. ';' .. (args[cfg.arg.titlestyle] or '') .. ';background:none transparent;border:none;box-shadow:none;padding:0;' }) end end local function renderTitleRow(tbl) if not args[cfg.arg.title] then return end local titleRow = tbl:tag('tr') local titleCell = titleRow:tag('th'):attr('scope', 'col') local titleColspan = 2 if args[cfg.arg.imageleft] then titleColspan = titleColspan + 1 end if args[cfg.arg.image] then titleColspan = titleColspan + 1 end titleCell :cssText(args[cfg.arg.basestyle]) :cssText(args[cfg.arg.titlestyle]) :addClass(cfg.class.navbox_title) :attr('colspan', titleColspan) renderNavBar(titleCell) titleCell :tag('div') -- id for aria-labelledby attribute :attr('id', mw.uri.anchorEncode(args[cfg.arg.title])) :addClass(args[cfg.arg.titleclass]) :css('font-size', '114%') :css('margin', '0 4em') :wikitext(processItem(args[cfg.arg.title])) end local function getAboveBelowColspan() local ret = 2 if args[cfg.arg.imageleft] then ret = ret + 1 end if args[cfg.arg.image] then ret = ret + 1 end return ret end local function renderAboveRow(tbl) if not args[cfg.arg.above] then return end tbl:tag('tr') :tag('td') :addClass(cfg.class.navbox_abovebelow) :addClass(args[cfg.arg.aboveclass]) :cssText(args[cfg.arg.basestyle]) :cssText(args[cfg.arg.abovestyle]) :attr('colspan', getAboveBelowColspan()) :tag('div') -- id for aria-labelledby attribute, if no title :attr('id', (not args[cfg.arg.title]) and mw.uri.anchorEncode(args[cfg.arg.above]) or nil) :wikitext(processItem(args[cfg.arg.above], args[cfg.arg.nowrapitems])) end local function renderBelowRow(tbl) if not args[cfg.arg.below] then return end tbl:tag('tr') :tag('td') :addClass(cfg.class.navbox_abovebelow) :addClass(args[cfg.arg.belowclass]) :cssText(args[cfg.arg.basestyle]) :cssText(args[cfg.arg.belowstyle]) :attr('colspan', getAboveBelowColspan()) :tag('div') :wikitext(processItem(args[cfg.arg.below], args[cfg.arg.nowrapitems])) end local function renderListRow(tbl, index, listnum, listnums_size) local row = tbl:tag('tr') if index == 1 and args[cfg.arg.imageleft] then row :tag('td') :addClass(cfg.class.noviewer) :addClass(cfg.class.navbox_image) :addClass(args[cfg.arg.imageclass]) :css('width', '1px') -- Minimize width :css('padding', '0 2px 0 0') :cssText(args[cfg.arg.imageleftstyle]) :attr('rowspan', listnums_size) :tag('div') :wikitext(processItem(args[cfg.arg.imageleft])) end local group_and_num = format(cfg.arg.group_and_num, listnum) local groupstyle_and_num = format(cfg.arg.groupstyle_and_num, listnum) if args[group_and_num] then local groupCell = row:tag('th') -- id for aria-labelledby attribute, if lone group with no title or above if listnum == 1 and not (args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group2]) then groupCell :attr('id', mw.uri.anchorEncode(args[cfg.arg.group1])) end groupCell :attr('scope', 'row') :addClass(cfg.class.navbox_group) :addClass(args[cfg.arg.groupclass]) :cssText(args[cfg.arg.basestyle]) -- If groupwidth not specified, minimize width :css('width', args[cfg.arg.groupwidth] or '1%') groupCell :cssText(args[cfg.arg.groupstyle]) :cssText(args[groupstyle_and_num]) :wikitext(args[group_and_num]) end local listCell = row:tag('td') if args[group_and_num] then listCell :addClass(cfg.class.navbox_list_with_group) else listCell:attr('colspan', 2) end if not args[cfg.arg.groupwidth] then listCell:css('width', '100%') end local rowstyle -- usually nil so cssText(rowstyle) usually adds nothing if index % 2 == 1 then rowstyle = args[cfg.arg.oddstyle] else rowstyle = args[cfg.arg.evenstyle] end local list_and_num = format(cfg.arg.list_and_num, listnum) local listText = args[list_and_num] local oddEven = cfg.marker.oddeven if listText:sub(1, 12) == '</div><table' then -- Assume list text is for a subgroup navbox so no automatic striping for this row. oddEven = listText:find(cfg.pattern.navbox_title) and cfg.marker.restart or cfg.class.navbox_odd_part end local liststyle_and_num = format(cfg.arg.liststyle_and_num, listnum) local listclass_and_num = format(cfg.arg.listclass_and_num, listnum) listCell :css('padding', '0') :cssText(args[cfg.arg.liststyle]) :cssText(rowstyle) :cssText(args[liststyle_and_num]) :addClass(cfg.class.navbox_list) :addClass(cfg.class.navbox_part .. oddEven) :addClass(args[cfg.arg.listclass]) :addClass(args[listclass_and_num]) :tag('div') :css('padding', (index == 1 and args[cfg.arg.list1padding]) or args[cfg.arg.listpadding] or '0 0.25em' ) :wikitext(processItem(listText, args[cfg.arg.nowrapitems])) if index == 1 and args[cfg.arg.image] then row :tag('td') :addClass(cfg.class.noviewer) :addClass(cfg.class.navbox_image) :addClass(args[cfg.arg.imageclass]) :css('width', '1px') -- Minimize width :css('padding', '0 0 0 2px') :cssText(args[cfg.arg.imagestyle]) :attr('rowspan', listnums_size) :tag('div') :wikitext(processItem(args[cfg.arg.image])) end end local function has_list_class(htmlclass) local patterns = { '^' .. htmlclass .. '$', '%s' .. htmlclass .. '$', '^' .. htmlclass .. '%s', '%s' .. htmlclass .. '%s' } for arg, _ in pairs(args) do if type(arg) == 'string' and mw.ustring.find(arg, cfg.pattern.class) then for _, pattern in ipairs(patterns) do if mw.ustring.find(args[arg] or '', pattern) then return true end end end end return false end -- there are a lot of list classes in the wild, so we add their TemplateStyles local function add_list_styles() local frame = mw.getCurrentFrame() local function add_list_templatestyles(htmlclass, templatestyles) if has_list_class(htmlclass) then return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } else return '' end end local hlist_styles = add_list_templatestyles('hlist', cfg.hlist_templatestyles) local plainlist_styles = add_list_templatestyles('plainlist', cfg.plainlist_templatestyles) -- a second workaround for [[phab:T303378]] -- when that issue is fixed, we can actually use has_navbar not to emit the -- tag here if we want if has_navbar() and hlist_styles == '' then hlist_styles = frame:extensionTag{ name = 'templatestyles', args = { src = cfg.hlist_templatestyles } } end -- hlist -> plainlist is best-effort to preserve old Common.css ordering. -- this ordering is not a guarantee because most navboxes will emit only -- one of these classes [hlist_note] return hlist_styles .. plainlist_styles end local function needsHorizontalLists(border) if border == cfg.keyword.border_subgroup or args[cfg.arg.tracking] == cfg.keyword.tracking_no then return false end return not has_list_class(cfg.pattern.hlist) and not has_list_class(cfg.pattern.plainlist) end local function hasBackgroundColors() for _, key in ipairs({cfg.arg.titlestyle, cfg.arg.groupstyle, cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do if tostring(args[key]):find('background', 1, true) then return true end end return false end local function hasBorders() for _, key in ipairs({cfg.arg.groupstyle, cfg.arg.basestyle, cfg.arg.abovestyle, cfg.arg.belowstyle}) do if tostring(args[key]):find('border', 1, true) then return true end end return false end local function isIllegible() local styleratio = require('Module:Color contrast')._styleratio for key, style in pairs(args) do if tostring(key):match(cfg.pattern.style) then if styleratio{mw.text.unstripNoWiki(style)} < 4.5 then return true end end end return false end local function getTrackingCategories(border) local cats = {} if needsHorizontalLists(border) then table.insert(cats, cfg.category.horizontal_lists) end if hasBackgroundColors() then table.insert(cats, cfg.category.background_colors) end if isIllegible() then table.insert(cats, cfg.category.illegible) end if hasBorders() then table.insert(cats, cfg.category.borders) end return cats end local function renderTrackingCategories(builder, border) local title = mw.title.getCurrentTitle() if title.namespace ~= 10 then return end -- not in template space local subpage = title.subpageText if subpage == cfg.keyword.subpage_doc or subpage == cfg.keyword.subpage_sandbox or subpage == cfg.keyword.subpage_testcases then return end for _, cat in ipairs(getTrackingCategories(border)) do builder:wikitext('[[Category:' .. cat .. ']]') end end local function renderMainTable(border, listnums) local tbl = mw.html.create('table') :addClass(cfg.class.nowraplinks) :addClass(args[cfg.arg.bodyclass]) local state = args[cfg.arg.state] if args[cfg.arg.title] and state ~= cfg.keyword.state_plain and state ~= cfg.keyword.state_off then if state == cfg.keyword.state_collapsed then state = cfg.class.collapsed end tbl :addClass(cfg.class.collapsible) :addClass(state or cfg.class.autocollapse) end tbl:css('border-spacing', 0) if border == cfg.keyword.border_subgroup or border == cfg.keyword.border_none then tbl :addClass(cfg.class.navbox_subgroup) :cssText(args[cfg.arg.bodystyle]) :cssText(args[cfg.arg.style]) else -- regular navbox - bodystyle and style will be applied to the wrapper table tbl :addClass(cfg.class.navbox_inner) :css('background', 'transparent') :css('color', 'inherit') end tbl:cssText(args[cfg.arg.innerstyle]) renderTitleRow(tbl) renderAboveRow(tbl) local listnums_size = #listnums for i, listnum in ipairs(listnums) do renderListRow(tbl, i, listnum, listnums_size) end renderBelowRow(tbl) return tbl end local function add_navbox_styles(hiding_templatestyles) local frame = mw.getCurrentFrame() -- This is a lambda so that it doesn't need the frame as a parameter local function add_user_styles(templatestyles) if templatestyles and templatestyles ~= '' then return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } end return '' end -- get templatestyles. load base from config so that Lua only needs to do -- the work once of parser tag expansion local base_templatestyles = cfg.templatestyles local templatestyles = add_user_styles(args[cfg.arg.templatestyles]) local child_templatestyles = add_user_styles(args[cfg.arg.child_templatestyles]) -- The 'navbox-styles' div exists to wrap the styles to work around T200206 -- more elegantly. Instead of combinatorial rules, this ends up being linear -- number of CSS rules. return mw.html.create('div') :addClass(cfg.class.navbox_styles) :wikitext( add_list_styles() .. -- see [hlist_note] applied to 'before base_templatestyles' base_templatestyles .. templatestyles .. child_templatestyles .. table.concat(hiding_templatestyles) ) :done() end -- work around [[phab:T303378]] -- for each arg: find all the templatestyles strip markers, insert them into a -- table. then remove all templatestyles markers from the arg local function move_hiding_templatestyles(args) local gfind = string.gfind local gsub = string.gsub local templatestyles_markers = {} local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)' for k, arg in pairs(args) do for marker in gfind(arg, strip_marker_pattern) do table.insert(templatestyles_markers, marker) end args[k] = gsub(arg, strip_marker_pattern, '') end return templatestyles_markers end function p._navbox(navboxArgs) args = navboxArgs local hiding_templatestyles = move_hiding_templatestyles(args) local listnums = {} for k, _ in pairs(args) do if type(k) == 'string' then local listnum = k:match(cfg.pattern.listnum) if listnum then table.insert(listnums, tonumber(listnum)) end end end table.sort(listnums) local border = mw.text.trim(args[cfg.arg.border] or args[1] or '') if border == cfg.keyword.border_child then border = cfg.keyword.border_subgroup end -- render the main body of the navbox local tbl = renderMainTable(border, listnums) local res = mw.html.create() -- render the appropriate wrapper for the navbox, based on the border param if border == cfg.keyword.border_none then res:node(add_navbox_styles(hiding_templatestyles)) local nav = res:tag('div') :attr('role', 'navigation') :node(tbl) -- aria-labelledby title, otherwise above, otherwise lone group if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then nav:attr( 'aria-labelledby', mw.uri.anchorEncode( args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1] ) ) else nav:attr('aria-label', cfg.aria_label) end elseif border == cfg.keyword.border_subgroup then -- We assume that this navbox is being rendered in a list cell of a -- parent navbox, and is therefore inside a div with padding:0em 0.25em. -- We start with a </div> to avoid the padding being applied, and at the -- end add a <div> to balance out the parent's </div> res :wikitext('</div>') :node(tbl) :wikitext('<div>') else res:node(add_navbox_styles(hiding_templatestyles)) local nav = res:tag('div') :attr('role', 'navigation') :addClass(cfg.class.navbox) :addClass(args[cfg.arg.navboxclass]) :cssText(args[cfg.arg.bodystyle]) :cssText(args[cfg.arg.style]) :css('padding', '3px') :node(tbl) -- aria-labelledby title, otherwise above, otherwise lone group if args[cfg.arg.title] or args[cfg.arg.above] or (args[cfg.arg.group1] and not args[cfg.arg.group2]) then nav:attr( 'aria-labelledby', mw.uri.anchorEncode(args[cfg.arg.title] or args[cfg.arg.above] or args[cfg.arg.group1]) ) else nav:attr('aria-label', cfg.aria_label) end end if (args[cfg.arg.nocat] or cfg.keyword.nocat_false):lower() == cfg.keyword.nocat_false then renderTrackingCategories(res, border) end return striped(tostring(res), border) end function p.navbox(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end args = getArgs(frame, {wrappers = {cfg.pattern.navbox}}) -- Read the arguments in the order they'll be output in, to make references -- number in the right order. local _ _ = args[cfg.arg.title] _ = args[cfg.arg.above] -- Limit this to 20 as covering 'most' cases (that's a SWAG) and because -- iterator approach won't work here for i = 1, 20 do _ = args[format(cfg.arg.group_and_num, i)] _ = args[format(cfg.arg.list_and_num, i)] end _ = args[cfg.arg.below] return p._navbox(args) end return p 05be9a97c035ab3f0fac69423779e261949d473c Module:Navbox/configuration 828 95 207 206 2023-06-06T08:51:31Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Navbox/configuration]]: w Scribunto text/plain return { aria_label = 'Navbox', nowrap_item = '%s<span class="nowrap">%s</span>', templatestyles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = 'Module:Navbox/styles.css' } }, hlist_templatestyles = 'Hlist/styles.css', plainlist_templatestyles = 'Plainlist/styles.css', -- do not localize marker table marker = { oddeven = '\127_ODDEVEN_\127', restart = '\127_ODDEVEN0_\127', regex = '\127_ODDEVEN(%d?)_\127' }, category = { orphan = '[[Category:Navbox orphans]]', horizontal_lists = 'Navigational boxes without horizontal lists', background_colors = 'Navboxes using background colours', illegible = 'Potentially illegible navboxes', borders = 'Navboxes using borders', }, keyword = { border_subgroup = 'subgroup', border_child = 'child', border_none = 'none', evenodd_swap = 'swap', navbar_off = 'off', navbar_plain = 'plain', nocat_false = 'false', nowrapitems_yes = 'yes', orphan_yes = 'yes', state_collapsed = 'collapsed', state_off = 'off', state_plain = 'plain', subpage_doc = 'doc', subpage_sandbox = 'sandbox', subpage_testcases = 'testcases', tracking_no = 'no' }, class = { autocollapse = 'autocollapse', collapsible = 'mw-collapsible', collapsed = 'mw-collapsed', -- Warning navbox = 'navbox', -- WMF currently hides 'navbox' from mobile, -- so you probably shouldn't change the navbox class. navbox_abovebelow = 'navbox-abovebelow', navbox_group = 'navbox-group', navbox_image = 'navbox-image', navbox_inner = 'navbox-inner', navbox_list = 'navbox-list', navbox_list_with_group = 'navbox-list-with-group', navbox_part = 'navbox-', -- do not l10n navbox_styles = 'navbox-styles', navbox_subgroup = 'navbox-subgroup', navbox_title = 'navbox-title', -- l10n only if you change pattern.navbox_title below navbox_odd_part = 'odd', -- do not l10n navbox_even_part = 'even', -- do not l10n nomobile = 'nomobile', nowraplinks = 'nowraplinks', noviewer = 'noviewer' -- used to remove images from MediaViewer }, pattern = { listnum = '^list(%d+)$', class = 'class', sandbox = '/sandbox$', navbox = 'Template:Navbox', nowrap = '^<span class="nowrap">', style = 'style$', navbox_title = '<th[^>]*"navbox%-title"', hlist = 'hlist', plainlist = 'plainlist', }, arg = { above = 'above', aboveclass = 'aboveclass', abovestyle = 'abovestyle', basestyle = 'basestyle', bodyclass = 'bodyclass', bodystyle = 'bodystyle', border = 'border', below = 'below', belowclass = 'belowclass', belowstyle = 'belowstyle', evenodd = 'evenodd', evenstyle = 'evenstyle', group1 = 'group1', group2 = 'group2', group_and_num = 'group%d', groupstyle_and_num = 'group%dstyle', groupclass = 'groupclass', groupstyle = 'groupstyle', groupwidth = 'groupwidth', innerstyle = 'innerstyle', image = 'image', imageclass = 'imageclass', imageleft = 'imageleft', imageleftstyle = 'imageleftstyle', imagesetyle = 'imagestyle', list_and_num = 'list%d', listclass_and_num = 'list%dclass', liststyle_and_num = 'list%dstyle', list1padding = 'list1padding', listclass = 'listclass', listpadding = 'listpadding', liststyle = 'liststyle', name = 'name', navbar = 'navbar', navboxclass = 'navboxclass', nocat = 'nocat', nowrapitems = 'nowrapitems', oddstyle = 'oddstyle', orphan = 'orphan', state = 'state', style = 'style', templatestyles = 'templatestyles', child_templatestyles = 'child templatestyles', title = 'title', titleclass = 'titleclass', titlestyle = 'titlestyle', tracking = 'tracking' }, -- names of navbar arguments navbar = { name = 1, fontstyle = 'fontstyle', mini = 'mini' } } 4148736fd32a93636c0413e73ed38afaef065ec9 Module:Navbox/styles.css 828 96 209 208 2023-06-06T08:51:31Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Navbox/styles.css]]: w sanitized-css text/css /* {{pp|small=y}} */ .navbox { box-sizing: border-box; border: 1px solid #a2a9b1; width: 100%; clear: both; font-size: 88%; text-align: center; padding: 1px; margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ } .navbox .navbox { margin-top: 0; /* No top margin for nested navboxes */ } .navbox + .navbox, /* TODO: remove first line after transclusions have updated */ .navbox + .navbox-styles + .navbox { margin-top: -1px; /* Single pixel border between adjacent navboxes */ } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; line-height: 1.5em; text-align: center; } .navbox-group { white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background-color: #fdfdfd; } .navbox-list { line-height: 1.5em; border-color: #fdfdfd; /* Must match background color */ } .navbox-list-with-group { text-align: left; border-left-width: 2px; border-left-style: solid; } /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: #ccf; /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: #ddf; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: #e6e6ff; /* Level 3 color */ } .navbox-even { background-color: #f7f7f7; } .navbox-odd { background-color: transparent; } /* TODO: figure out how to remove reliance on td as structure */ .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; } e80b0d7a5770e6e105dab832deb6c37a5245ebc6 Module:Protection banner 828 97 211 210 2023-06-06T08:51:32Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Protection_banner]]: w Scribunto text/plain -- This module implements {{pp-meta}} and its daughter templates such as -- {{pp-dispute}}, {{pp-vandalism}} and {{pp-sock}}. -- Initialise necessary modules. require('strict') local makeFileLink = require('Module:File link')._main local effectiveProtectionLevel = require('Module:Effective protection level')._main local effectiveProtectionExpiry = require('Module:Effective protection expiry')._main local yesno = require('Module:Yesno') -- Lazily initialise modules and objects we don't always need. local getArgs, makeMessageBox, lang -- Set constants. local CONFIG_MODULE = 'Module:Protection banner/config' -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function makeCategoryLink(cat, sort) if cat then return string.format( '[[%s:%s|%s]]', mw.site.namespaces[14].name, cat, sort ) end end -- Validation function for the expiry and the protection date local function validateDate(dateString, dateType) if not lang then lang = mw.language.getContentLanguage() end local success, result = pcall(lang.formatDate, lang, 'U', dateString) if success then result = tonumber(result) if result then return result end end error(string.format( 'invalid %s: %s', dateType, tostring(dateString) ), 4) end local function makeFullUrl(page, query, display) return string.format( '[%s %s]', tostring(mw.uri.fullUrl(page, query)), display ) end -- Given a directed graph formatted as node -> table of direct successors, -- get a table of all nodes reachable from a given node (though always -- including the given node). local function getReachableNodes(graph, start) local toWalk, retval = {[start] = true}, {} while true do -- Can't use pairs() since we're adding and removing things as we're iterating local k = next(toWalk) -- This always gets the "first" key if k == nil then return retval end toWalk[k] = nil retval[k] = true for _,v in ipairs(graph[k]) do if not retval[v] then toWalk[v] = true end end end end -------------------------------------------------------------------------------- -- Protection class -------------------------------------------------------------------------------- local Protection = {} Protection.__index = Protection Protection.supportedActions = { edit = true, move = true, autoreview = true, upload = true } Protection.bannerConfigFields = { 'text', 'explanation', 'tooltip', 'alt', 'link', 'image' } function Protection.new(args, cfg, title) local obj = {} obj._cfg = cfg obj.title = title or mw.title.getCurrentTitle() -- Set action if not args.action then obj.action = 'edit' elseif Protection.supportedActions[args.action] then obj.action = args.action else error(string.format( 'invalid action: %s', tostring(args.action) ), 3) end -- Set level obj.level = args.demolevel or effectiveProtectionLevel(obj.action, obj.title) if not obj.level or (obj.action == 'move' and obj.level == 'autoconfirmed') then -- Users need to be autoconfirmed to move pages anyway, so treat -- semi-move-protected pages as unprotected. obj.level = '*' end -- Set expiry local effectiveExpiry = effectiveProtectionExpiry(obj.action, obj.title) if effectiveExpiry == 'infinity' then obj.expiry = 'indef' elseif effectiveExpiry ~= 'unknown' then obj.expiry = validateDate(effectiveExpiry, 'expiry date') end -- Set reason if args[1] then obj.reason = mw.ustring.lower(args[1]) if obj.reason:find('|') then error('reasons cannot contain the pipe character ("|")', 3) end end -- Set protection date if args.date then obj.protectionDate = validateDate(args.date, 'protection date') end -- Set banner config do obj.bannerConfig = {} local configTables = {} if cfg.banners[obj.action] then configTables[#configTables + 1] = cfg.banners[obj.action][obj.reason] end if cfg.defaultBanners[obj.action] then configTables[#configTables + 1] = cfg.defaultBanners[obj.action][obj.level] configTables[#configTables + 1] = cfg.defaultBanners[obj.action].default end configTables[#configTables + 1] = cfg.masterBanner for i, field in ipairs(Protection.bannerConfigFields) do for j, t in ipairs(configTables) do if t[field] then obj.bannerConfig[field] = t[field] break end end end end return setmetatable(obj, Protection) end function Protection:isUserScript() -- Whether the page is a user JavaScript or CSS page. local title = self.title return title.namespace == 2 and ( title.contentModel == 'javascript' or title.contentModel == 'css' ) end function Protection:isProtected() return self.level ~= '*' end function Protection:shouldShowLock() -- Whether we should output a banner/padlock return self:isProtected() and not self:isUserScript() end -- Whether this page needs a protection category. Protection.shouldHaveProtectionCategory = Protection.shouldShowLock function Protection:isTemporary() return type(self.expiry) == 'number' end function Protection:makeProtectionCategory() if not self:shouldHaveProtectionCategory() then return '' end local cfg = self._cfg local title = self.title -- Get the expiry key fragment. local expiryFragment if self.expiry == 'indef' then expiryFragment = self.expiry elseif type(self.expiry) == 'number' then expiryFragment = 'temp' end -- Get the namespace key fragment. local namespaceFragment = cfg.categoryNamespaceKeys[title.namespace] if not namespaceFragment and title.namespace % 2 == 1 then namespaceFragment = 'talk' end -- Define the order that key fragments are tested in. This is done with an -- array of tables containing the value to be tested, along with its -- position in the cfg.protectionCategories table. local order = { {val = expiryFragment, keypos = 1}, {val = namespaceFragment, keypos = 2}, {val = self.reason, keypos = 3}, {val = self.level, keypos = 4}, {val = self.action, keypos = 5} } --[[ -- The old protection templates used an ad-hoc protection category system, -- with some templates prioritising namespaces in their categories, and -- others prioritising the protection reason. To emulate this in this module -- we use the config table cfg.reasonsWithNamespacePriority to set the -- reasons for which namespaces have priority over protection reason. -- If we are dealing with one of those reasons, move the namespace table to -- the end of the order table, i.e. give it highest priority. If not, the -- reason should have highest priority, so move that to the end of the table -- instead. --]] table.insert(order, table.remove(order, self.reason and cfg.reasonsWithNamespacePriority[self.reason] and 2 or 3)) --[[ -- Define the attempt order. Inactive subtables (subtables with nil "value" -- fields) are moved to the end, where they will later be given the key -- "all". This is to cut down on the number of table lookups in -- cfg.protectionCategories, which grows exponentially with the number of -- non-nil keys. We keep track of the number of active subtables with the -- noActive parameter. --]] local noActive, attemptOrder do local active, inactive = {}, {} for i, t in ipairs(order) do if t.val then active[#active + 1] = t else inactive[#inactive + 1] = t end end noActive = #active attemptOrder = active for i, t in ipairs(inactive) do attemptOrder[#attemptOrder + 1] = t end end --[[ -- Check increasingly generic key combinations until we find a match. If a -- specific category exists for the combination of key fragments we are -- given, that match will be found first. If not, we keep trying different -- key fragment combinations until we match using the key -- "all-all-all-all-all". -- -- To generate the keys, we index the key subtables using a binary matrix -- with indexes i and j. j is only calculated up to the number of active -- subtables. For example, if there were three active subtables, the matrix -- would look like this, with 0 corresponding to the key fragment "all", and -- 1 corresponding to other key fragments. -- -- j 1 2 3 -- i -- 1 1 1 1 -- 2 0 1 1 -- 3 1 0 1 -- 4 0 0 1 -- 5 1 1 0 -- 6 0 1 0 -- 7 1 0 0 -- 8 0 0 0 -- -- Values of j higher than the number of active subtables are set -- to the string "all". -- -- A key for cfg.protectionCategories is constructed for each value of i. -- The position of the value in the key is determined by the keypos field in -- each subtable. --]] local cats = cfg.protectionCategories for i = 1, 2^noActive do local key = {} for j, t in ipairs(attemptOrder) do if j > noActive then key[t.keypos] = 'all' else local quotient = i / 2 ^ (j - 1) quotient = math.ceil(quotient) if quotient % 2 == 1 then key[t.keypos] = t.val else key[t.keypos] = 'all' end end end key = table.concat(key, '|') local attempt = cats[key] if attempt then return makeCategoryLink(attempt, title.text) end end return '' end function Protection:isIncorrect() local expiry = self.expiry return not self:shouldHaveProtectionCategory() or type(expiry) == 'number' and expiry < os.time() end function Protection:isTemplateProtectedNonTemplate() local action, namespace = self.action, self.title.namespace return self.level == 'templateeditor' and ( (action ~= 'edit' and action ~= 'move') or (namespace ~= 10 and namespace ~= 828) ) end function Protection:makeCategoryLinks() local msg = self._cfg.msg local ret = {self:makeProtectionCategory()} if self:isIncorrect() then ret[#ret + 1] = makeCategoryLink( msg['tracking-category-incorrect'], self.title.text ) end if self:isTemplateProtectedNonTemplate() then ret[#ret + 1] = makeCategoryLink( msg['tracking-category-template'], self.title.text ) end return table.concat(ret) end -------------------------------------------------------------------------------- -- Blurb class -------------------------------------------------------------------------------- local Blurb = {} Blurb.__index = Blurb Blurb.bannerTextFields = { text = true, explanation = true, tooltip = true, alt = true, link = true } function Blurb.new(protectionObj, args, cfg) return setmetatable({ _cfg = cfg, _protectionObj = protectionObj, _args = args }, Blurb) end -- Private methods -- function Blurb:_formatDate(num) -- Formats a Unix timestamp into dd Month, YYYY format. lang = lang or mw.language.getContentLanguage() local success, date = pcall( lang.formatDate, lang, self._cfg.msg['expiry-date-format'] or 'j F Y', '@' .. tostring(num) ) if success then return date end end function Blurb:_getExpandedMessage(msgKey) return self:_substituteParameters(self._cfg.msg[msgKey]) end function Blurb:_substituteParameters(msg) if not self._params then local parameterFuncs = {} parameterFuncs.CURRENTVERSION = self._makeCurrentVersionParameter parameterFuncs.EDITREQUEST = self._makeEditRequestParameter parameterFuncs.EXPIRY = self._makeExpiryParameter parameterFuncs.EXPLANATIONBLURB = self._makeExplanationBlurbParameter parameterFuncs.IMAGELINK = self._makeImageLinkParameter parameterFuncs.INTROBLURB = self._makeIntroBlurbParameter parameterFuncs.INTROFRAGMENT = self._makeIntroFragmentParameter parameterFuncs.PAGETYPE = self._makePagetypeParameter parameterFuncs.PROTECTIONBLURB = self._makeProtectionBlurbParameter parameterFuncs.PROTECTIONDATE = self._makeProtectionDateParameter parameterFuncs.PROTECTIONLEVEL = self._makeProtectionLevelParameter parameterFuncs.PROTECTIONLOG = self._makeProtectionLogParameter parameterFuncs.TALKPAGE = self._makeTalkPageParameter parameterFuncs.TOOLTIPBLURB = self._makeTooltipBlurbParameter parameterFuncs.TOOLTIPFRAGMENT = self._makeTooltipFragmentParameter parameterFuncs.VANDAL = self._makeVandalTemplateParameter self._params = setmetatable({}, { __index = function (t, k) local param if parameterFuncs[k] then param = parameterFuncs[k](self) end param = param or '' t[k] = param return param end }) end msg = msg:gsub('${(%u+)}', self._params) return msg end function Blurb:_makeCurrentVersionParameter() -- A link to the page history or the move log, depending on the kind of -- protection. local pagename = self._protectionObj.title.prefixedText if self._protectionObj.action == 'move' then -- We need the move log link. return makeFullUrl( 'Special:Log', {type = 'move', page = pagename}, self:_getExpandedMessage('current-version-move-display') ) else -- We need the history link. return makeFullUrl( pagename, {action = 'history'}, self:_getExpandedMessage('current-version-edit-display') ) end end function Blurb:_makeEditRequestParameter() local mEditRequest = require('Module:Submit an edit request') local action = self._protectionObj.action local level = self._protectionObj.level -- Get the edit request type. local requestType if action == 'edit' then if level == 'autoconfirmed' then requestType = 'semi' elseif level == 'extendedconfirmed' then requestType = 'extended' elseif level == 'templateeditor' then requestType = 'template' end end requestType = requestType or 'full' -- Get the display value. local display = self:_getExpandedMessage('edit-request-display') return mEditRequest._link{type = requestType, display = display} end function Blurb:_makeExpiryParameter() local expiry = self._protectionObj.expiry if type(expiry) == 'number' then return self:_formatDate(expiry) else return expiry end end function Blurb:_makeExplanationBlurbParameter() -- Cover special cases first. if self._protectionObj.title.namespace == 8 then -- MediaWiki namespace return self:_getExpandedMessage('explanation-blurb-nounprotect') end -- Get explanation blurb table keys local action = self._protectionObj.action local level = self._protectionObj.level local talkKey = self._protectionObj.title.isTalkPage and 'talk' or 'subject' -- Find the message in the explanation blurb table and substitute any -- parameters. local explanations = self._cfg.explanationBlurbs local msg if explanations[action][level] and explanations[action][level][talkKey] then msg = explanations[action][level][talkKey] elseif explanations[action][level] and explanations[action][level].default then msg = explanations[action][level].default elseif explanations[action].default and explanations[action].default[talkKey] then msg = explanations[action].default[talkKey] elseif explanations[action].default and explanations[action].default.default then msg = explanations[action].default.default else error(string.format( 'could not find explanation blurb for action "%s", level "%s" and talk key "%s"', action, level, talkKey ), 8) end return self:_substituteParameters(msg) end function Blurb:_makeImageLinkParameter() local imageLinks = self._cfg.imageLinks local action = self._protectionObj.action local level = self._protectionObj.level local msg if imageLinks[action][level] then msg = imageLinks[action][level] elseif imageLinks[action].default then msg = imageLinks[action].default else msg = imageLinks.edit.default end return self:_substituteParameters(msg) end function Blurb:_makeIntroBlurbParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('intro-blurb-expiry') else return self:_getExpandedMessage('intro-blurb-noexpiry') end end function Blurb:_makeIntroFragmentParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('intro-fragment-expiry') else return self:_getExpandedMessage('intro-fragment-noexpiry') end end function Blurb:_makePagetypeParameter() local pagetypes = self._cfg.pagetypes return pagetypes[self._protectionObj.title.namespace] or pagetypes.default or error('no default pagetype defined', 8) end function Blurb:_makeProtectionBlurbParameter() local protectionBlurbs = self._cfg.protectionBlurbs local action = self._protectionObj.action local level = self._protectionObj.level local msg if protectionBlurbs[action][level] then msg = protectionBlurbs[action][level] elseif protectionBlurbs[action].default then msg = protectionBlurbs[action].default elseif protectionBlurbs.edit.default then msg = protectionBlurbs.edit.default else error('no protection blurb defined for protectionBlurbs.edit.default', 8) end return self:_substituteParameters(msg) end function Blurb:_makeProtectionDateParameter() local protectionDate = self._protectionObj.protectionDate if type(protectionDate) == 'number' then return self:_formatDate(protectionDate) else return protectionDate end end function Blurb:_makeProtectionLevelParameter() local protectionLevels = self._cfg.protectionLevels local action = self._protectionObj.action local level = self._protectionObj.level local msg if protectionLevels[action][level] then msg = protectionLevels[action][level] elseif protectionLevels[action].default then msg = protectionLevels[action].default elseif protectionLevels.edit.default then msg = protectionLevels.edit.default else error('no protection level defined for protectionLevels.edit.default', 8) end return self:_substituteParameters(msg) end function Blurb:_makeProtectionLogParameter() local pagename = self._protectionObj.title.prefixedText if self._protectionObj.action == 'autoreview' then -- We need the pending changes log. return makeFullUrl( 'Special:Log', {type = 'stable', page = pagename}, self:_getExpandedMessage('pc-log-display') ) else -- We need the protection log. return makeFullUrl( 'Special:Log', {type = 'protect', page = pagename}, self:_getExpandedMessage('protection-log-display') ) end end function Blurb:_makeTalkPageParameter() return string.format( '[[%s:%s#%s|%s]]', mw.site.namespaces[self._protectionObj.title.namespace].talk.name, self._protectionObj.title.text, self._args.section or 'top', self:_getExpandedMessage('talk-page-link-display') ) end function Blurb:_makeTooltipBlurbParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('tooltip-blurb-expiry') else return self:_getExpandedMessage('tooltip-blurb-noexpiry') end end function Blurb:_makeTooltipFragmentParameter() if self._protectionObj:isTemporary() then return self:_getExpandedMessage('tooltip-fragment-expiry') else return self:_getExpandedMessage('tooltip-fragment-noexpiry') end end function Blurb:_makeVandalTemplateParameter() return mw.getCurrentFrame():expandTemplate{ title="vandal-m", args={self._args.user or self._protectionObj.title.baseText} } end -- Public methods -- function Blurb:makeBannerText(key) -- Validate input. if not key or not Blurb.bannerTextFields[key] then error(string.format( '"%s" is not a valid banner config field', tostring(key) ), 2) end -- Generate the text. local msg = self._protectionObj.bannerConfig[key] if type(msg) == 'string' then return self:_substituteParameters(msg) elseif type(msg) == 'function' then msg = msg(self._protectionObj, self._args) if type(msg) ~= 'string' then error(string.format( 'bad output from banner config function with key "%s"' .. ' (expected string, got %s)', tostring(key), type(msg) ), 4) end return self:_substituteParameters(msg) end end -------------------------------------------------------------------------------- -- BannerTemplate class -------------------------------------------------------------------------------- local BannerTemplate = {} BannerTemplate.__index = BannerTemplate function BannerTemplate.new(protectionObj, cfg) local obj = {} obj._cfg = cfg -- Set the image filename. local imageFilename = protectionObj.bannerConfig.image if imageFilename then obj._imageFilename = imageFilename else -- If an image filename isn't specified explicitly in the banner config, -- generate it from the protection status and the namespace. local action = protectionObj.action local level = protectionObj.level local namespace = protectionObj.title.namespace local reason = protectionObj.reason -- Deal with special cases first. if ( namespace == 10 or namespace == 828 or reason and obj._cfg.indefImageReasons[reason] ) and action == 'edit' and level == 'sysop' and not protectionObj:isTemporary() then -- Fully protected modules and templates get the special red "indef" -- padlock. obj._imageFilename = obj._cfg.msg['image-filename-indef'] else -- Deal with regular protection types. local images = obj._cfg.images if images[action] then if images[action][level] then obj._imageFilename = images[action][level] elseif images[action].default then obj._imageFilename = images[action].default end end end end return setmetatable(obj, BannerTemplate) end function BannerTemplate:renderImage() local filename = self._imageFilename or self._cfg.msg['image-filename-default'] or 'Transparent.gif' return makeFileLink{ file = filename, size = (self.imageWidth or 20) .. 'px', alt = self._imageAlt, link = self._imageLink, caption = self.imageCaption } end -------------------------------------------------------------------------------- -- Banner class -------------------------------------------------------------------------------- local Banner = setmetatable({}, BannerTemplate) Banner.__index = Banner function Banner.new(protectionObj, blurbObj, cfg) local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb. obj.imageWidth = 40 obj.imageCaption = blurbObj:makeBannerText('alt') -- Large banners use the alt text for the tooltip. obj._reasonText = blurbObj:makeBannerText('text') obj._explanationText = blurbObj:makeBannerText('explanation') obj._page = protectionObj.title.prefixedText -- Only makes a difference in testing. return setmetatable(obj, Banner) end function Banner:__tostring() -- Renders the banner. makeMessageBox = makeMessageBox or require('Module:Message box').main local reasonText = self._reasonText or error('no reason text set', 2) local explanationText = self._explanationText local mbargs = { page = self._page, type = 'protection', image = self:renderImage(), text = string.format( "'''%s'''%s", reasonText, explanationText and '<br />' .. explanationText or '' ) } return makeMessageBox('mbox', mbargs) end -------------------------------------------------------------------------------- -- Padlock class -------------------------------------------------------------------------------- local Padlock = setmetatable({}, BannerTemplate) Padlock.__index = Padlock function Padlock.new(protectionObj, blurbObj, cfg) local obj = BannerTemplate.new(protectionObj, cfg) -- This doesn't need the blurb. obj.imageWidth = 20 obj.imageCaption = blurbObj:makeBannerText('tooltip') obj._imageAlt = blurbObj:makeBannerText('alt') obj._imageLink = blurbObj:makeBannerText('link') obj._indicatorName = cfg.padlockIndicatorNames[protectionObj.action] or cfg.padlockIndicatorNames.default or 'pp-default' return setmetatable(obj, Padlock) end function Padlock:__tostring() local frame = mw.getCurrentFrame() -- The nowiki tag helps prevent whitespace at the top of articles. return frame:extensionTag{name = 'nowiki'} .. frame:extensionTag{ name = 'indicator', args = {name = self._indicatorName}, content = self:renderImage() } end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} function p._exportClasses() -- This is used for testing purposes. return { Protection = Protection, Blurb = Blurb, BannerTemplate = BannerTemplate, Banner = Banner, Padlock = Padlock, } end function p._main(args, cfg, title) args = args or {} cfg = cfg or require(CONFIG_MODULE) local protectionObj = Protection.new(args, cfg, title) local ret = {} -- If a page's edit protection is equally or more restrictive than its -- protection from some other action, then don't bother displaying anything -- for the other action (except categories). if not yesno(args.catonly) and (protectionObj.action == 'edit' or args.demolevel or not getReachableNodes( cfg.hierarchy, protectionObj.level )[effectiveProtectionLevel('edit', protectionObj.title)]) then -- Initialise the blurb object local blurbObj = Blurb.new(protectionObj, args, cfg) -- Render the banner if protectionObj:shouldShowLock() then ret[#ret + 1] = tostring( (yesno(args.small) and Padlock or Banner) .new(protectionObj, blurbObj, cfg) ) end end -- Render the categories if yesno(args.category) ~= false then ret[#ret + 1] = protectionObj:makeCategoryLinks() end return table.concat(ret) end function p.main(frame, cfg) cfg = cfg or require(CONFIG_MODULE) -- Find default args, if any. local parent = frame.getParent and frame:getParent() local defaultArgs = parent and cfg.wrappers[parent:getTitle():gsub('/sandbox$', '')] -- Find user args, and use the parent frame if we are being called from a -- wrapper template. getArgs = getArgs or require('Module:Arguments').getArgs local userArgs = getArgs(frame, { parentOnly = defaultArgs, frameOnly = not defaultArgs }) -- Build the args table. User-specified args overwrite default args. local args = {} for k, v in pairs(defaultArgs or {}) do args[k] = v end for k, v in pairs(userArgs) do args[k] = v end return p._main(args, cfg) end return p 894f0884d4c2da1ce19d385b96f59af654b0946a Module:Protection banner/config 828 98 213 212 2023-06-06T08:51:33Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Protection_banner/config]]: w Scribunto text/plain -- This module provides configuration data for [[Module:Protection banner]]. return { -------------------------------------------------------------------------------- -- -- BANNER DATA -- -------------------------------------------------------------------------------- --[[ -- Banner data consists of six fields: -- * text - the main protection text that appears at the top of protection -- banners. -- * explanation - the text that appears below the main protection text, used -- to explain the details of the protection. -- * tooltip - the tooltip text you see when you move the mouse over a small -- padlock icon. -- * link - the page that the small padlock icon links to. -- * alt - the alt text for the small padlock icon. This is also used as tooltip -- text for the large protection banners. -- * image - the padlock image used in both protection banners and small padlock -- icons. -- -- The module checks in three separate tables to find a value for each field. -- First it checks the banners table, which has values specific to the reason -- for the page being protected. Then the module checks the defaultBanners -- table, which has values specific to each protection level. Finally, the -- module checks the masterBanner table, which holds data for protection -- templates to use if no data has been found in the previous two tables. -- -- The values in the banner data can take parameters. These are specified -- using ${TEXTLIKETHIS} (a dollar sign preceding a parameter name -- enclosed in curly braces). -- -- Available parameters: -- -- ${CURRENTVERSION} - a link to the page history or the move log, with the -- display message "current-version-edit-display" or -- "current-version-move-display". -- -- ${EDITREQUEST} - a link to create an edit request for the current page. -- -- ${EXPLANATIONBLURB} - an explanation blurb, e.g. "Please discuss any changes -- on the talk page; you may submit a request to ask an administrator to make -- an edit if it is minor or supported by consensus." -- -- ${IMAGELINK} - a link to set the image to, depending on the protection -- action and protection level. -- -- ${INTROBLURB} - the PROTECTIONBLURB parameter, plus the expiry if an expiry -- is set. E.g. "Editing of this page by new or unregistered users is currently -- disabled until dd Month YYYY." -- -- ${INTROFRAGMENT} - the same as ${INTROBLURB}, but without final punctuation -- so that it can be used in run-on sentences. -- -- ${PAGETYPE} - the type of the page, e.g. "article" or "template". -- Defined in the cfg.pagetypes table. -- -- ${PROTECTIONBLURB} - a blurb explaining the protection level of the page, e.g. -- "Editing of this page by new or unregistered users is currently disabled" -- -- ${PROTECTIONDATE} - the protection date, if it has been supplied to the -- template. -- -- ${PROTECTIONLEVEL} - the protection level, e.g. "fully protected" or -- "semi-protected". -- -- ${PROTECTIONLOG} - a link to the protection log or the pending changes log, -- depending on the protection action. -- -- ${TALKPAGE} - a link to the talk page. If a section is specified, links -- straight to that talk page section. -- -- ${TOOLTIPBLURB} - uses the PAGETYPE, PROTECTIONTYPE and EXPIRY parameters to -- create a blurb like "This template is semi-protected", or "This article is -- move-protected until DD Month YYYY". -- -- ${VANDAL} - links for the specified username (or the root page name) -- using Module:Vandal-m. -- -- Functions -- -- For advanced users, it is possible to use Lua functions instead of strings -- in the banner config tables. Using functions gives flexibility that is not -- possible just by using parameters. Functions take two arguments, the -- protection object and the template arguments, and they must output a string. -- -- For example: -- -- text = function (protectionObj, args) -- if protectionObj.level == 'autoconfirmed' then -- return 'foo' -- else -- return 'bar' -- end -- end -- -- Some protection object properties and methods that may be useful: -- protectionObj.action - the protection action -- protectionObj.level - the protection level -- protectionObj.reason - the protection reason -- protectionObj.expiry - the expiry. Nil if unset, the string "indef" if set -- to indefinite, and the protection time in unix time if temporary. -- protectionObj.protectionDate - the protection date in unix time, or nil if -- unspecified. -- protectionObj.bannerConfig - the banner config found by the module. Beware -- of editing the config field used by the function, as it could create an -- infinite loop. -- protectionObj:isProtected - returns a boolean showing whether the page is -- protected. -- protectionObj:isTemporary - returns a boolean showing whether the expiry is -- temporary. -- protectionObj:isIncorrect - returns a boolean showing whether the protection -- template is incorrect. --]] -- The master banner data, used if no values have been found in banners or -- defaultBanners. masterBanner = { text = '${INTROBLURB}', explanation = '${EXPLANATIONBLURB}', tooltip = '${TOOLTIPBLURB}', link = '${IMAGELINK}', alt = 'Page ${PROTECTIONLEVEL}' }, -- The default banner data. This holds banner data for different protection -- levels. -- *required* - this table needs edit, move, autoreview and upload subtables. defaultBanners = { edit = {}, move = {}, autoreview = { default = { alt = 'Page protected with pending changes', tooltip = 'All edits by unregistered and new users are subject to review prior to becoming visible to unregistered users', image = 'Pending-protection-shackle.svg' } }, upload = {} }, -- The banner data. This holds banner data for different protection reasons. -- In fact, the reasons specified in this table control which reasons are -- valid inputs to the first positional parameter. -- -- There is also a non-standard "description" field that can be used for items -- in this table. This is a description of the protection reason for use in the -- module documentation. -- -- *required* - this table needs edit, move, autoreview and upload subtables. banners = { edit = { blp = { description = 'For pages protected to promote compliance with the' .. ' [[Wikipedia:Biographies of living persons' .. '|biographies of living persons]] policy', text = '${INTROFRAGMENT} to promote compliance with' .. ' [[Wikipedia:Biographies of living persons' .. "|Wikipedia's&nbsp;policy on&nbsp;the&nbsp;biographies" .. ' of&nbsp;living&nbsp;people]].', tooltip = '${TOOLTIPFRAGMENT} to promote compliance with the policy on' .. ' biographies of living persons', }, dmca = { description = 'For pages protected by the Wikimedia Foundation' .. ' due to [[Digital Millennium Copyright Act]] takedown requests', explanation = function (protectionObj, args) local ret = 'Pursuant to a rights owner notice under the Digital' .. ' Millennium Copyright Act (DMCA) regarding some content' .. ' in this article, the Wikimedia Foundation acted under' .. ' applicable law and took down and restricted the content' .. ' in question.' if args.notice then ret = ret .. ' A copy of the received notice can be found here: ' .. args.notice .. '.' end ret = ret .. ' For more information, including websites discussing' .. ' how to file a counter-notice, please see' .. " [[Wikipedia:Office actions]] and the article's ${TALKPAGE}." .. "'''Do not remove this template from the article until the" .. " restrictions are withdrawn'''." return ret end, image = 'Office-protection-shackle.svg', }, dispute = { description = 'For pages protected due to editing disputes', text = function (protectionObj, args) -- Find the value of "disputes". local display = 'disputes' local disputes if args.section then disputes = string.format( '[[%s:%s#%s|%s]]', mw.site.namespaces[protectionObj.title.namespace].talk.name, protectionObj.title.text, args.section, display ) else disputes = display end -- Make the blurb, depending on the expiry. local msg if type(protectionObj.expiry) == 'number' then msg = '${INTROFRAGMENT} or until editing %s have been resolved.' else msg = '${INTROFRAGMENT} until editing %s have been resolved.' end return string.format(msg, disputes) end, explanation = "This protection is '''not''' an endorsement of the" .. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}', tooltip = '${TOOLTIPFRAGMENT} due to editing disputes', }, ecp = { description = 'For articles in topic areas authorized by' .. ' [[Wikipedia:Arbitration Committee|ArbCom]] or' .. ' meets the criteria for community use', tooltip = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}', alt = 'Extended-protected ${PAGETYPE}', }, mainpage = { description = 'For pages protected for being displayed on the [[Main Page]]', text = 'This file is currently' .. ' [[Wikipedia:This page is protected|protected]] from' .. ' editing because it is currently or will soon be displayed' .. ' on the [[Main Page]].', explanation = 'Images on the Main Page are protected due to their high' .. ' visibility. Please discuss any necessary changes on the ${TALKPAGE}.' .. '<br /><span style="font-size:90%;">' .. "'''Administrators:''' Once this image is definitely off the Main Page," .. ' please unprotect this file, or reduce to semi-protection,' .. ' as appropriate.</span>', }, office = { description = 'For pages protected by the Wikimedia Foundation', text = function (protectionObj, args) local ret = 'This ${PAGETYPE} is currently under the' .. ' scrutiny of the' .. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]' .. ' and is protected.' if protectionObj.protectionDate then ret = ret .. ' It has been protected since ${PROTECTIONDATE}.' end return ret end, explanation = "If you can edit this page, please discuss all changes and" .. " additions on the ${TALKPAGE} first. '''Do not remove protection from this" .. " page unless you are authorized by the Wikimedia Foundation to do" .. " so.'''", image = 'Office-protection-shackle.svg', }, reset = { description = 'For pages protected by the Wikimedia Foundation and' .. ' "reset" to a bare-bones version', text = 'This ${PAGETYPE} is currently under the' .. ' scrutiny of the' .. ' [[Wikipedia:Office actions|Wikimedia Foundation Office]]' .. ' and is protected.', explanation = function (protectionObj, args) local ret = '' if protectionObj.protectionDate then ret = ret .. 'On ${PROTECTIONDATE} this ${PAGETYPE} was' else ret = ret .. 'This ${PAGETYPE} has been' end ret = ret .. ' reduced to a' .. ' simplified, "bare bones" version so that it may be completely' .. ' rewritten to ensure it meets the policies of' .. ' [[WP:NPOV|Neutral Point of View]] and [[WP:V|Verifiability]].' .. ' Standard Wikipedia policies will apply to its rewriting—which' .. ' will eventually be open to all editors—and will be strictly' .. ' enforced. The ${PAGETYPE} has been ${PROTECTIONLEVEL} while' .. ' it is being rebuilt.\n\n' .. 'Any insertion of material directly from' .. ' pre-protection revisions of the ${PAGETYPE} will be removed, as' .. ' will any material added to the ${PAGETYPE} that is not properly' .. ' sourced. The associated talk page(s) were also cleared on the' .. " same date.\n\n" .. "If you can edit this page, please discuss all changes and" .. " additions on the ${TALKPAGE} first. '''Do not override" .. " this action, and do not remove protection from this page," .. " unless you are authorized by the Wikimedia Foundation" .. " to do so. No editor may remove this notice.'''" return ret end, image = 'Office-protection-shackle.svg', }, sock = { description = 'For pages protected due to' .. ' [[Wikipedia:Sock puppetry|sock puppetry]]', text = '${INTROFRAGMENT} to prevent [[Wikipedia:Sock puppetry|sock puppets]] of' .. ' [[Wikipedia:Blocking policy|blocked]] or' .. ' [[Wikipedia:Banning policy|banned users]]' .. ' from editing it.', tooltip = '${TOOLTIPFRAGMENT} to prevent sock puppets of blocked or banned users from' .. ' editing it', }, template = { description = 'For [[Wikipedia:High-risk templates|high-risk]]' .. ' templates and Lua modules', text = 'This is a permanently [[Help:Protection|protected]] ${PAGETYPE},' .. ' as it is [[Wikipedia:High-risk templates|high-risk]].', explanation = 'Please discuss any changes on the ${TALKPAGE}; you may' .. ' ${EDITREQUEST} to ask an' .. ' [[Wikipedia:Administrators|administrator]] or' .. ' [[Wikipedia:Template editor|template editor]] to make an edit if' .. ' it is [[Help:Minor edit#When to mark an edit as a minor edit' .. '|uncontroversial]] or supported by' .. ' [[Wikipedia:Consensus|consensus]]. You can also' .. ' [[Wikipedia:Requests for page protection|request]] that the page be' .. ' unprotected.', tooltip = 'This high-risk ${PAGETYPE} is permanently ${PROTECTIONLEVEL}' .. ' to prevent vandalism', alt = 'Permanently protected ${PAGETYPE}', }, usertalk = { description = 'For pages protected against disruptive edits by a' .. ' particular user', text = '${INTROFRAGMENT} to prevent ${VANDAL} from using it to make disruptive edits,' .. ' such as abusing the' .. ' &#123;&#123;[[Template:unblock|unblock]]&#125;&#125; template.', explanation = 'If you cannot edit this user talk page and you need to' .. ' make a change or leave a message, you can' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for edits to a protected page' .. '|request an edit]],' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]],' .. ' [[Special:Userlogin|log in]],' .. ' or [[Special:UserLogin/signup|create an account]].', }, vandalism = { description = 'For pages protected against' .. ' [[Wikipedia:Vandalism|vandalism]]', text = '${INTROFRAGMENT} due to [[Wikipedia:Vandalism|vandalism]].', explanation = function (protectionObj, args) local ret = '' if protectionObj.level == 'sysop' then ret = ret .. "This protection is '''not''' an endorsement of the" .. ' ${CURRENTVERSION}. ' end return ret .. '${EXPLANATIONBLURB}' end, tooltip = '${TOOLTIPFRAGMENT} due to vandalism', } }, move = { dispute = { description = 'For pages protected against page moves due to' .. ' disputes over the page title', explanation = "This protection is '''not''' an endorsement of the" .. ' ${CURRENTVERSION}. ${EXPLANATIONBLURB}', image = 'Move-protection-shackle.svg' }, vandalism = { description = 'For pages protected against' .. ' [[Wikipedia:Vandalism#Page-move vandalism' .. ' |page-move vandalism]]' } }, autoreview = {}, upload = {} }, -------------------------------------------------------------------------------- -- -- GENERAL DATA TABLES -- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- Protection blurbs -------------------------------------------------------------------------------- -- This table produces the protection blurbs available with the -- ${PROTECTIONBLURB} parameter. It is sorted by protection action and -- protection level, and is checked by the module in the following order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level -- 3. "edit" protection action, default protection level -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. protectionBlurbs = { edit = { default = 'This ${PAGETYPE} is currently [[Help:Protection|' .. 'protected]] from editing', autoconfirmed = 'Editing of this ${PAGETYPE} by [[Wikipedia:User access' .. ' levels#New users|new]] or [[Wikipedia:User access levels#Unregistered' .. ' users|unregistered]] users is currently [[Help:Protection|disabled]]', extendedconfirmed = 'This ${PAGETYPE} is currently under extended confirmed protection', }, move = { default = 'This ${PAGETYPE} is currently [[Help:Protection|protected]]' .. ' from [[Help:Moving a page|page moves]]' }, autoreview = { default = 'All edits made to this ${PAGETYPE} by' .. ' [[Wikipedia:User access levels#New users|new]] or' .. ' [[Wikipedia:User access levels#Unregistered users|unregistered]]' .. ' users are currently' .. ' [[Wikipedia:Pending changes|subject to review]]' }, upload = { default = 'Uploading new versions of this ${PAGETYPE} is currently disabled' } }, -------------------------------------------------------------------------------- -- Explanation blurbs -------------------------------------------------------------------------------- -- This table produces the explanation blurbs available with the -- ${EXPLANATIONBLURB} parameter. It is sorted by protection action, -- protection level, and whether the page is a talk page or not. If the page is -- a talk page it will have a talk key of "talk"; otherwise it will have a talk -- key of "subject". The table is checked in the following order: -- 1. page's protection action, page's protection level, page's talk key -- 2. page's protection action, page's protection level, default talk key -- 3. page's protection action, default protection level, page's talk key -- 4. page's protection action, default protection level, default talk key -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. explanationBlurbs = { edit = { autoconfirmed = { subject = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details. If you' .. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can' .. ' ${EDITREQUEST}, discuss changes on the ${TALKPAGE},' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]], [[Special:Userlogin|log in]], or' .. ' [[Special:UserLogin/signup|create an account]].', default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details. If you' .. ' cannot edit this ${PAGETYPE} and you wish to make a change, you can' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]], [[Special:Userlogin|log in]], or' .. ' [[Special:UserLogin/signup|create an account]].', }, extendedconfirmed = { default = 'Extended confirmed protection prevents edits from all unregistered editors' .. ' and registered users with fewer than 30 days tenure and 500 edits.' .. ' The [[Wikipedia:Protection policy#extended|policy on community use]]' .. ' specifies that extended confirmed protection can be applied to combat' .. ' disruption, if semi-protection has proven to be ineffective.' .. ' Extended confirmed protection may also be applied to enforce' .. ' [[Wikipedia:Arbitration Committee|arbitration sanctions]].' .. ' Please discuss any changes on the ${TALKPAGE}; you may' .. ' ${EDITREQUEST} to ask for uncontroversial changes supported by' .. ' [[Wikipedia:Consensus|consensus]].' }, default = { subject = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' Please discuss any changes on the ${TALKPAGE}; you' .. ' may ${EDITREQUEST} to ask an' .. ' [[Wikipedia:Administrators|administrator]] to make an edit if it' .. ' is [[Help:Minor edit#When to mark an edit as a minor edit' .. '|uncontroversial]] or supported by [[Wikipedia:Consensus' .. '|consensus]]. You may also [[Wikipedia:Requests for' .. ' page protection#Current requests for reduction in protection level' .. '|request]] that this page be unprotected.', default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' You may [[Wikipedia:Requests for page' .. ' protection#Current requests for edits to a protected page|request an' .. ' edit]] to this page, or [[Wikipedia:Requests for' .. ' page protection#Current requests for reduction in protection level' .. '|ask]] for it to be unprotected.' } }, move = { default = { subject = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' The page may still be edited but cannot be moved' .. ' until unprotected. Please discuss any suggested moves on the' .. ' ${TALKPAGE} or at [[Wikipedia:Requested moves]]. You can also' .. ' [[Wikipedia:Requests for page protection|request]] that the page be' .. ' unprotected.', default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' The page may still be edited but cannot be moved' .. ' until unprotected. Please discuss any suggested moves at' .. ' [[Wikipedia:Requested moves]]. You can also' .. ' [[Wikipedia:Requests for page protection|request]] that the page be' .. ' unprotected.' } }, autoreview = { default = { default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' Edits to this ${PAGETYPE} by new and unregistered users' .. ' will not be visible to readers until they are accepted by' .. ' a reviewer. To avoid the need for your edits to be' .. ' reviewed, you may' .. ' [[Wikipedia:Requests for page protection' .. '#Current requests for reduction in protection level' .. '|request unprotection]], [[Special:Userlogin|log in]], or' .. ' [[Special:UserLogin/signup|create an account]].' }, }, upload = { default = { default = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' The page may still be edited but new versions of the file' .. ' cannot be uploaded until it is unprotected. You can' .. ' request that a new version be uploaded by using a' .. ' [[Wikipedia:Edit requests|protected edit request]], or you' .. ' can [[Wikipedia:Requests for page protection|request]]' .. ' that the file be unprotected.' } } }, -------------------------------------------------------------------------------- -- Protection levels -------------------------------------------------------------------------------- -- This table provides the data for the ${PROTECTIONLEVEL} parameter, which -- produces a short label for different protection levels. It is sorted by -- protection action and protection level, and is checked in the following -- order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level -- 3. "edit" protection action, default protection level -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. protectionLevels = { edit = { default = 'protected', templateeditor = 'template-protected', extendedconfirmed = 'extended-protected', autoconfirmed = 'semi-protected', }, move = { default = 'move-protected' }, autoreview = { }, upload = { default = 'upload-protected' } }, -------------------------------------------------------------------------------- -- Images -------------------------------------------------------------------------------- -- This table lists different padlock images for each protection action and -- protection level. It is used if an image is not specified in any of the -- banner data tables, and if the page does not satisfy the conditions for using -- the ['image-filename-indef'] image. It is checked in the following order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level images = { edit = { default = 'Full-protection-shackle.svg', templateeditor = 'Template-protection-shackle.svg', extendedconfirmed = 'Extended-protection-shackle.svg', autoconfirmed = 'Semi-protection-shackle.svg' }, move = { default = 'Move-protection-shackle.svg', }, autoreview = { default = 'Pending-protection-shackle.svg' }, upload = { default = 'Upload-protection-shackle.svg' } }, -- Pages with a reason specified in this table will show the special "indef" -- padlock, defined in the 'image-filename-indef' message, if no expiry is set. indefImageReasons = { template = true }, -------------------------------------------------------------------------------- -- Image links -------------------------------------------------------------------------------- -- This table provides the data for the ${IMAGELINK} parameter, which gets -- the image link for small padlock icons based on the page's protection action -- and protection level. It is checked in the following order: -- 1. page's protection action, page's protection level -- 2. page's protection action, default protection level -- 3. "edit" protection action, default protection level -- -- It is possible to use banner parameters inside this table. -- *required* - this table needs edit, move, autoreview and upload subtables. imageLinks = { edit = { default = 'Wikipedia:Protection policy#full', templateeditor = 'Wikipedia:Protection policy#template', extendedconfirmed = 'Wikipedia:Protection policy#extended', autoconfirmed = 'Wikipedia:Protection policy#semi' }, move = { default = 'Wikipedia:Protection policy#move' }, autoreview = { default = 'Wikipedia:Protection policy#pending' }, upload = { default = 'Wikipedia:Protection policy#upload' } }, -------------------------------------------------------------------------------- -- Padlock indicator names -------------------------------------------------------------------------------- -- This table provides the "name" attribute for the <indicator> extension tag -- with which small padlock icons are generated. All indicator tags on a page -- are displayed in alphabetical order based on this attribute, and with -- indicator tags with duplicate names, the last tag on the page wins. -- The attribute is chosen based on the protection action; table keys must be a -- protection action name or the string "default". padlockIndicatorNames = { autoreview = 'pp-autoreview', default = 'pp-default' }, -------------------------------------------------------------------------------- -- Protection categories -------------------------------------------------------------------------------- --[[ -- The protection categories are stored in the protectionCategories table. -- Keys to this table are made up of the following strings: -- -- 1. the expiry date -- 2. the namespace -- 3. the protection reason (e.g. "dispute" or "vandalism") -- 4. the protection level (e.g. "sysop" or "autoconfirmed") -- 5. the action (e.g. "edit" or "move") -- -- When the module looks up a category in the table, first it will will check to -- see a key exists that corresponds to all five parameters. For example, a -- user page semi-protected from vandalism for two weeks would have the key -- "temp-user-vandalism-autoconfirmed-edit". If no match is found, the module -- changes the first part of the key to "all" and checks the table again. It -- keeps checking increasingly generic key combinations until it finds the -- field, or until it reaches the key "all-all-all-all-all". -- -- The module uses a binary matrix to determine the order in which to search. -- This is best demonstrated by a table. In this table, the "0" values -- represent "all", and the "1" values represent the original data (e.g. -- "indef" or "file" or "vandalism"). -- -- expiry namespace reason level action -- order -- 1 1 1 1 1 1 -- 2 0 1 1 1 1 -- 3 1 0 1 1 1 -- 4 0 0 1 1 1 -- 5 1 1 0 1 1 -- 6 0 1 0 1 1 -- 7 1 0 0 1 1 -- 8 0 0 0 1 1 -- 9 1 1 1 0 1 -- 10 0 1 1 0 1 -- 11 1 0 1 0 1 -- 12 0 0 1 0 1 -- 13 1 1 0 0 1 -- 14 0 1 0 0 1 -- 15 1 0 0 0 1 -- 16 0 0 0 0 1 -- 17 1 1 1 1 0 -- 18 0 1 1 1 0 -- 19 1 0 1 1 0 -- 20 0 0 1 1 0 -- 21 1 1 0 1 0 -- 22 0 1 0 1 0 -- 23 1 0 0 1 0 -- 24 0 0 0 1 0 -- 25 1 1 1 0 0 -- 26 0 1 1 0 0 -- 27 1 0 1 0 0 -- 28 0 0 1 0 0 -- 29 1 1 0 0 0 -- 30 0 1 0 0 0 -- 31 1 0 0 0 0 -- 32 0 0 0 0 0 -- -- In this scheme the action has the highest priority, as it is the last -- to change, and the expiry has the least priority, as it changes the most. -- The priorities of the expiry, the protection level and the action are -- fixed, but the priorities of the reason and the namespace can be swapped -- through the use of the cfg.bannerDataNamespaceHasPriority table. --]] -- If the reason specified to the template is listed in this table, -- namespace data will take priority over reason data in the protectionCategories -- table. reasonsWithNamespacePriority = { vandalism = true, }, -- The string to use as a namespace key for the protectionCategories table for each -- namespace number. categoryNamespaceKeys = { [ 2] = 'user', [ 3] = 'user', [ 4] = 'project', [ 6] = 'file', [ 8] = 'mediawiki', [ 10] = 'template', [ 12] = 'project', [ 14] = 'category', [100] = 'portal', [828] = 'module', }, protectionCategories = { ['all|all|all|all|all'] = 'Wikipedia fully protected pages', ['all|all|office|all|all'] = 'Wikipedia Office-protected pages', ['all|all|reset|all|all'] = 'Wikipedia Office-protected pages', ['all|all|dmca|all|all'] = 'Wikipedia Office-protected pages', ['all|all|mainpage|all|all'] = 'Wikipedia fully protected main page files', ['all|all|all|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages', ['all|all|ecp|extendedconfirmed|all'] = 'Wikipedia extended-confirmed-protected pages', ['all|template|all|all|edit'] = 'Wikipedia fully protected templates', ['all|all|all|autoconfirmed|edit'] = 'Wikipedia semi-protected pages', ['indef|all|all|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected pages', ['all|all|blp|autoconfirmed|edit'] = 'Wikipedia indefinitely semi-protected biographies of living people', ['temp|all|blp|autoconfirmed|edit'] = 'Wikipedia temporarily semi-protected biographies of living people', ['all|all|dispute|autoconfirmed|edit'] = 'Wikipedia pages semi-protected due to dispute', ['all|all|sock|autoconfirmed|edit'] = 'Wikipedia pages semi-protected from banned users', ['all|all|vandalism|autoconfirmed|edit'] = 'Wikipedia pages semi-protected against vandalism', ['all|category|all|autoconfirmed|edit'] = 'Wikipedia semi-protected categories', ['all|file|all|autoconfirmed|edit'] = 'Wikipedia semi-protected files', ['all|portal|all|autoconfirmed|edit'] = 'Wikipedia semi-protected portals', ['all|project|all|autoconfirmed|edit'] = 'Wikipedia semi-protected project pages', ['all|talk|all|autoconfirmed|edit'] = 'Wikipedia semi-protected talk pages', ['all|template|all|autoconfirmed|edit'] = 'Wikipedia semi-protected templates', ['all|user|all|autoconfirmed|edit'] = 'Wikipedia semi-protected user and user talk pages', ['all|all|all|templateeditor|edit'] = 'Wikipedia template-protected pages other than templates and modules', ['all|template|all|templateeditor|edit'] = 'Wikipedia template-protected templates', ['all|template|all|templateeditor|move'] = 'Wikipedia template-protected templates', -- move-protected templates ['all|all|blp|sysop|edit'] = 'Wikipedia indefinitely protected biographies of living people', ['temp|all|blp|sysop|edit'] = 'Wikipedia temporarily protected biographies of living people', ['all|all|dispute|sysop|edit'] = 'Wikipedia pages protected due to dispute', ['all|all|sock|sysop|edit'] = 'Wikipedia pages protected from banned users', ['all|all|vandalism|sysop|edit'] = 'Wikipedia pages protected against vandalism', ['all|category|all|sysop|edit'] = 'Wikipedia fully protected categories', ['all|file|all|sysop|edit'] = 'Wikipedia fully protected files', ['all|project|all|sysop|edit'] = 'Wikipedia fully protected project pages', ['all|talk|all|sysop|edit'] = 'Wikipedia fully protected talk pages', ['all|template|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected templates', ['all|template|all|sysop|edit'] = 'Wikipedia fully protected templates', ['all|user|all|sysop|edit'] = 'Wikipedia fully protected user and user talk pages', ['all|module|all|all|edit'] = 'Wikipedia fully protected modules', ['all|module|all|templateeditor|edit'] = 'Wikipedia template-protected modules', ['all|module|all|extendedconfirmed|edit'] = 'Wikipedia extended-confirmed-protected modules', ['all|module|all|autoconfirmed|edit'] = 'Wikipedia semi-protected modules', ['all|all|all|sysop|move'] = 'Wikipedia move-protected pages', ['indef|all|all|sysop|move'] = 'Wikipedia indefinitely move-protected pages', ['all|all|dispute|sysop|move'] = 'Wikipedia pages move-protected due to dispute', ['all|all|vandalism|sysop|move'] = 'Wikipedia pages move-protected due to vandalism', ['all|portal|all|sysop|move'] = 'Wikipedia move-protected portals', ['all|project|all|sysop|move'] = 'Wikipedia move-protected project pages', ['all|talk|all|sysop|move'] = 'Wikipedia move-protected talk pages', ['all|template|all|sysop|move'] = 'Wikipedia move-protected templates', ['all|user|all|sysop|move'] = 'Wikipedia move-protected user and user talk pages', ['all|all|all|autoconfirmed|autoreview'] = 'Wikipedia pending changes protected pages', ['all|file|all|all|upload'] = 'Wikipedia upload-protected files', }, -------------------------------------------------------------------------------- -- Expiry category config -------------------------------------------------------------------------------- -- This table configures the expiry category behaviour for each protection -- action. -- * If set to true, setting that action will always categorise the page if -- an expiry parameter is not set. -- * If set to false, setting that action will never categorise the page. -- * If set to nil, the module will categorise the page if: -- 1) an expiry parameter is not set, and -- 2) a reason is provided, and -- 3) the specified reason is not blacklisted in the reasonsWithoutExpiryCheck -- table. expiryCheckActions = { edit = nil, move = false, autoreview = true, upload = false }, reasonsWithoutExpiryCheck = { blp = true, template = true, }, -------------------------------------------------------------------------------- -- Pagetypes -------------------------------------------------------------------------------- -- This table produces the page types available with the ${PAGETYPE} parameter. -- Keys are namespace numbers, or the string "default" for the default value. pagetypes = { [0] = 'article', [6] = 'file', [10] = 'template', [14] = 'category', [828] = 'module', default = 'page' }, -------------------------------------------------------------------------------- -- Strings marking indefinite protection -------------------------------------------------------------------------------- -- This table contains values passed to the expiry parameter that mean the page -- is protected indefinitely. indefStrings = { ['indef'] = true, ['indefinite'] = true, ['indefinitely'] = true, ['infinite'] = true, }, -------------------------------------------------------------------------------- -- Group hierarchy -------------------------------------------------------------------------------- -- This table maps each group to all groups that have a superset of the original -- group's page editing permissions. hierarchy = { sysop = {}, reviewer = {'sysop'}, filemover = {'sysop'}, templateeditor = {'sysop'}, extendedconfirmed = {'sysop'}, autoconfirmed = {'reviewer', 'filemover', 'templateeditor', 'extendedconfirmed'}, user = {'autoconfirmed'}, ['*'] = {'user'} }, -------------------------------------------------------------------------------- -- Wrapper templates and their default arguments -------------------------------------------------------------------------------- -- This table contains wrapper templates used with the module, and their -- default arguments. Templates specified in this table should contain the -- following invocation, and no other template content: -- -- {{#invoke:Protection banner|main}} -- -- If other content is desired, it can be added between -- <noinclude>...</noinclude> tags. -- -- When a user calls one of these wrapper templates, they will use the -- default arguments automatically. However, users can override any of the -- arguments. wrappers = { ['Template:Pp'] = {}, ['Template:Pp-extended'] = {'ecp'}, ['Template:Pp-blp'] = {'blp'}, -- we don't need Template:Pp-create ['Template:Pp-dispute'] = {'dispute'}, ['Template:Pp-main-page'] = {'mainpage'}, ['Template:Pp-move'] = {action = 'move', catonly = 'yes'}, ['Template:Pp-move-dispute'] = {'dispute', action = 'move', catonly = 'yes'}, -- we don't need Template:Pp-move-indef ['Template:Pp-move-vandalism'] = {'vandalism', action = 'move', catonly = 'yes'}, ['Template:Pp-office'] = {'office'}, ['Template:Pp-office-dmca'] = {'dmca'}, ['Template:Pp-pc'] = {action = 'autoreview', small = true}, ['Template:Pp-pc1'] = {action = 'autoreview', small = true}, ['Template:Pp-reset'] = {'reset'}, ['Template:Pp-semi-indef'] = {small = true}, ['Template:Pp-sock'] = {'sock'}, ['Template:Pp-template'] = {'template', small = true}, ['Template:Pp-upload'] = {action = 'upload'}, ['Template:Pp-usertalk'] = {'usertalk'}, ['Template:Pp-vandalism'] = {'vandalism'}, }, -------------------------------------------------------------------------------- -- -- MESSAGES -- -------------------------------------------------------------------------------- msg = { -------------------------------------------------------------------------------- -- Intro blurb and intro fragment -------------------------------------------------------------------------------- -- These messages specify what is produced by the ${INTROBLURB} and -- ${INTROFRAGMENT} parameters. If the protection is temporary they use the -- intro-blurb-expiry or intro-fragment-expiry, and if not they use -- intro-blurb-noexpiry or intro-fragment-noexpiry. -- It is possible to use banner parameters in these messages. ['intro-blurb-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY}.', ['intro-blurb-noexpiry'] = '${PROTECTIONBLURB}.', ['intro-fragment-expiry'] = '${PROTECTIONBLURB} until ${EXPIRY},', ['intro-fragment-noexpiry'] = '${PROTECTIONBLURB}', -------------------------------------------------------------------------------- -- Tooltip blurb -------------------------------------------------------------------------------- -- These messages specify what is produced by the ${TOOLTIPBLURB} parameter. -- If the protection is temporary the tooltip-blurb-expiry message is used, and -- if not the tooltip-blurb-noexpiry message is used. -- It is possible to use banner parameters in these messages. ['tooltip-blurb-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY}.', ['tooltip-blurb-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}.', ['tooltip-fragment-expiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL} until ${EXPIRY},', ['tooltip-fragment-noexpiry'] = 'This ${PAGETYPE} is ${PROTECTIONLEVEL}', -------------------------------------------------------------------------------- -- Special explanation blurb -------------------------------------------------------------------------------- -- An explanation blurb for pages that cannot be unprotected, e.g. for pages -- in the MediaWiki namespace. -- It is possible to use banner parameters in this message. ['explanation-blurb-nounprotect'] = 'See the [[Wikipedia:Protection policy|' .. 'protection policy]] and ${PROTECTIONLOG} for more details.' .. ' Please discuss any changes on the ${TALKPAGE}; you' .. ' may ${EDITREQUEST} to ask an' .. ' [[Wikipedia:Administrators|administrator]] to make an edit if it' .. ' is [[Help:Minor edit#When to mark an edit as a minor edit' .. '|uncontroversial]] or supported by [[Wikipedia:Consensus' .. '|consensus]].', -------------------------------------------------------------------------------- -- Protection log display values -------------------------------------------------------------------------------- -- These messages determine the display values for the protection log link -- or the pending changes log link produced by the ${PROTECTIONLOG} parameter. -- It is possible to use banner parameters in these messages. ['protection-log-display'] = 'protection log', ['pc-log-display'] = 'pending changes log', -------------------------------------------------------------------------------- -- Current version display values -------------------------------------------------------------------------------- -- These messages determine the display values for the page history link -- or the move log link produced by the ${CURRENTVERSION} parameter. -- It is possible to use banner parameters in these messages. ['current-version-move-display'] = 'current title', ['current-version-edit-display'] = 'current version', -------------------------------------------------------------------------------- -- Talk page -------------------------------------------------------------------------------- -- This message determines the display value of the talk page link produced -- with the ${TALKPAGE} parameter. -- It is possible to use banner parameters in this message. ['talk-page-link-display'] = 'talk page', -------------------------------------------------------------------------------- -- Edit requests -------------------------------------------------------------------------------- -- This message determines the display value of the edit request link produced -- with the ${EDITREQUEST} parameter. -- It is possible to use banner parameters in this message. ['edit-request-display'] = 'submit an edit request', -------------------------------------------------------------------------------- -- Expiry date format -------------------------------------------------------------------------------- -- This is the format for the blurb expiry date. It should be valid input for -- the first parameter of the #time parser function. ['expiry-date-format'] = 'F j, Y "at" H:i e', -------------------------------------------------------------------------------- -- Tracking categories -------------------------------------------------------------------------------- -- These messages determine which tracking categories the module outputs. ['tracking-category-incorrect'] = 'Wikipedia pages with incorrect protection templates', ['tracking-category-template'] = 'Wikipedia template-protected pages other than templates and modules', -------------------------------------------------------------------------------- -- Images -------------------------------------------------------------------------------- -- These are images that are not defined by their protection action and protection level. ['image-filename-indef'] = 'Full-protection-shackle.svg', ['image-filename-default'] = 'Transparent.gif', -------------------------------------------------------------------------------- -- End messages -------------------------------------------------------------------------------- } -------------------------------------------------------------------------------- -- End configuration -------------------------------------------------------------------------------- } a20552ae38cb5253a4fa29aa126abc74215a589f Module:Sidebar 828 99 215 214 2023-06-06T08:51:33Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Sidebar]]: w Scribunto text/plain require('strict') local cfg = mw.loadData('Module:Sidebar/configuration') local p = {} local getArgs = require('Module:Arguments').getArgs --[[ Categorizes calling templates and modules with a 'style' parameter of any sort for tracking to convert to TemplateStyles. TODO after a long cleanup: Catch sidebars in other namespaces than Template and Module. TODO would probably want to remove /log and /archive as CS1 does ]] local function categorizeTemplatesWithInlineStyles(args) local title = mw.title.getCurrentTitle() if title.namespace ~= 10 and title.namespace ~= 828 then return '' end for _, pattern in ipairs (cfg.i18n.pattern.uncategorized_conversion_titles) do if title.text:match(pattern) then return '' end end for key, _ in pairs(args) do if mw.ustring.find(key, cfg.i18n.pattern.style_conversion) or key == 'width' then return cfg.i18n.category.conversion end end end --[[ For compatibility with the original {{sidebar with collapsible lists}} implementation, which passed some parameters through {{#if}} to trim their whitespace. This also triggered the automatic newline behavior. ]] -- See ([[meta:Help:Newlines and spaces#Automatic newline]]) local function trimAndAddAutomaticNewline(s) s = mw.ustring.gsub(s, "^%s*(.-)%s*$", "%1") if mw.ustring.find(s, '^[#*:;]') or mw.ustring.find(s, '^{|') then return '\n' .. s else return s end end --[[ Finds whether a sidebar has a subgroup sidebar. ]] local function hasSubgroup(s) if mw.ustring.find(s, cfg.i18n.pattern.subgroup) then return true else return false end end local function has_navbar(navbar_mode, sidebar_name) return navbar_mode ~= cfg.i18n.navbar_none and navbar_mode ~= cfg.i18n.navbar_off and ( sidebar_name or mw.getCurrentFrame():getParent():getTitle():gsub(cfg.i18n.pattern.sandbox, '') ~= cfg.i18n.title_not_to_add_navbar ) end local function has_list_class(args, htmlclass) local patterns = { '^' .. htmlclass .. '$', '%s' .. htmlclass .. '$', '^' .. htmlclass .. '%s', '%s' .. htmlclass .. '%s' } for arg, value in pairs(args) do if type(arg) == 'string' and mw.ustring.find(arg, 'class') then for _, pattern in ipairs(patterns) do if mw.ustring.find(args[arg] or '', pattern) then return true end end end end return false end -- there are a lot of list classes in the wild, so we add their TemplateStyles local function add_list_styles(args) local frame = mw.getCurrentFrame() local function add_list_templatestyles(htmlclass, templatestyles) if has_list_class(args, htmlclass) then return frame:extensionTag{ name = 'templatestyles', args = { src = templatestyles } } else return '' end end local plainlist_styles = add_list_templatestyles('plainlist', cfg.i18n.plainlist_templatestyles) local hlist_styles = add_list_templatestyles('hlist', cfg.i18n.hlist_templatestyles) -- a second workaround for [[phab:T303378]] -- when that issue is fixed, we can actually use has_navbar not to emit the -- tag here if we want if has_navbar(args.navbar, args.name) and hlist_styles == '' then hlist_styles = frame:extensionTag{ name = 'templatestyles', args = { src = cfg.i18n.hlist_templatestyles} } end -- hlist -> plainlist is best-effort to preserve old Common.css ordering. [hlist_note] return hlist_styles .. plainlist_styles end -- work around [[phab:T303378]] -- for each arg: find all the templatestyles strip markers, insert them into a -- table. then remove all templatestyles markers from the arg local function move_hiding_templatestyles(args) local gfind = string.gfind local gsub = string.gsub local templatestyles_markers = {} local strip_marker_pattern = '(\127[^\127]*UNIQ%-%-templatestyles%-%x+%-QINU[^\127]*\127)' for k, arg in pairs(args) do for marker in gfind(arg, strip_marker_pattern) do table.insert(templatestyles_markers, marker) end args[k] = gsub(arg, strip_marker_pattern, '') end return templatestyles_markers end --[[ Main sidebar function. Takes the frame, args, and an optional collapsibleClass. The collapsibleClass is and should be used only for sidebars with collapsible lists, as in p.collapsible. ]] function p.sidebar(frame, args, collapsibleClass) if not args then args = getArgs(frame) end local hiding_templatestyles = table.concat(move_hiding_templatestyles(args)) local root = mw.html.create() local child = args.child and mw.text.trim(args.child) == cfg.i18n.child_yes root = root:tag('table') if not child then root :addClass(cfg.i18n.class.sidebar) -- force collapsibleclass to be sidebar-collapse otherwise output nothing :addClass(collapsibleClass == cfg.i18n.class.collapse and cfg.i18n.class.collapse or nil) :addClass('nomobile') :addClass(args.float == cfg.i18n.float_none and cfg.i18n.class.float_none or nil) :addClass(args.float == cfg.i18n.float_left and cfg.i18n.class.float_left or nil) :addClass(args.wraplinks ~= cfg.i18n.wrap_true and cfg.i18n.class.wraplinks or nil) :addClass(args.bodyclass or args.class) :css('width', args.width or nil) :cssText(args.bodystyle or args.style) if args.outertitle then root :tag('caption') :addClass(cfg.i18n.class.outer_title) :addClass(args.outertitleclass) :cssText(args.outertitlestyle) :wikitext(args.outertitle) end if args.topimage then local imageCell = root:tag('tr'):tag('td') imageCell :addClass(cfg.i18n.class.top_image) :addClass(args.topimageclass) :cssText(args.topimagestyle) :wikitext(args.topimage) if args.topcaption then imageCell :tag('div') :addClass(cfg.i18n.class.top_caption) :cssText(args.topcaptionstyle) :wikitext(args.topcaption) end end if args.pretitle then root :tag('tr') :tag('td') :addClass(args.topimage and cfg.i18n.class.pretitle_with_top_image or cfg.i18n.class.pretitle) :addClass(args.pretitleclass) :cssText(args.basestyle) :cssText(args.pretitlestyle) :wikitext(args.pretitle) end else root :addClass(cfg.i18n.class.subgroup) :addClass(args.bodyclass or args.class) :cssText(args.bodystyle or args.style) end if args.title then if child then root :wikitext(args.title) else root :tag('tr') :tag('th') :addClass(args.pretitle and cfg.i18n.class.title_with_pretitle or cfg.i18n.class.title) :addClass(args.titleclass) :cssText(args.basestyle) :cssText(args.titlestyle) :wikitext(args.title) end end if args.image then local imageCell = root:tag('tr'):tag('td') imageCell :addClass(cfg.i18n.class.image) :addClass(args.imageclass) :cssText(args.imagestyle) :wikitext(args.image) if args.caption then imageCell :tag('div') :addClass(cfg.i18n.class.caption) :cssText(args.captionstyle) :wikitext(args.caption) end end if args.above then root :tag('tr') :tag('td') :addClass(cfg.i18n.class.above) :addClass(args.aboveclass) :cssText(args.abovestyle) :newline() -- newline required for bullet-points to work :wikitext(args.above) end local rowNums = {} for k, v in pairs(args) do k = '' .. k local num = k:match('^heading(%d+)$') or k:match('^content(%d+)$') if num then table.insert(rowNums, tonumber(num)) end end table.sort(rowNums) -- remove duplicates from the list (e.g. 3 will be duplicated if both heading3 -- and content3 are specified) for i = #rowNums, 1, -1 do if rowNums[i] == rowNums[i - 1] then table.remove(rowNums, i) end end for i, num in ipairs(rowNums) do local heading = args['heading' .. num] if heading then root :tag('tr') :tag('th') :addClass(cfg.i18n.class.heading) :addClass(args.headingclass) :addClass(args['heading' .. num .. 'class']) :cssText(args.basestyle) :cssText(args.headingstyle) :cssText(args['heading' .. num .. 'style']) :newline() :wikitext(heading) end local content = args['content' .. num] if content then root :tag('tr') :tag('td') :addClass(hasSubgroup(content) and cfg.i18n.class.content_with_subgroup or cfg.i18n.class.content) :addClass(args.contentclass) :addClass(args['content' .. num .. 'class']) :cssText(args.contentstyle) :cssText(args['content' .. num .. 'style']) :newline() :wikitext(content) :done() -- Without a linebreak after the </td>, a nested list like -- "* {{hlist| ...}}" doesn't parse correctly. :newline() end end if args.below then root :tag('tr') :tag('td') :addClass(cfg.i18n.class.below) :addClass(args.belowclass) :cssText(args.belowstyle) :newline() :wikitext(args.below) end if not child and has_navbar(args.navbar, args.name) then root :tag('tr') :tag('td') :addClass(cfg.i18n.class.navbar) :cssText(args.navbarstyle) :wikitext(require('Module:Navbar')._navbar{ args.name, mini = 1, fontstyle = args.navbarfontstyle }) end local base_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = cfg.i18n.templatestyles } } local templatestyles = '' if args['templatestyles'] and args['templatestyles'] ~= '' then templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['templatestyles'] } } end local child_templatestyles = '' if args['child templatestyles'] and args['child templatestyles'] ~= '' then child_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['child templatestyles'] } } end local grandchild_templatestyles = '' if args['grandchild templatestyles'] and args['grandchild templatestyles'] ~= '' then grandchild_templatestyles = frame:extensionTag{ name = 'templatestyles', args = { src = args['grandchild templatestyles'] } } end return table.concat({ add_list_styles(args), -- see [hlist_note] above about ordering base_templatestyles, templatestyles, child_templatestyles, grandchild_templatestyles, hiding_templatestyles, tostring(root), (child and cfg.i18n.category.child or ''), categorizeTemplatesWithInlineStyles(args) }) end local function list_title(args, is_centered_list_titles, num) local title_text = trimAndAddAutomaticNewline(args['list' .. num .. 'title'] or cfg.i18n.default_list_title) local title if is_centered_list_titles then -- collapsible can be finicky, so provide some CSS/HTML to support title = mw.html.create('div') :addClass(cfg.i18n.class.list_title_centered) :wikitext(title_text) else title = mw.html.create() :wikitext(title_text) end local title_container = mw.html.create('div') :addClass(cfg.i18n.class.list_title) -- don't /need/ a listnumtitleclass because you can do -- .templateclass .listnumclass .sidebar-list-title :addClass(args.listtitleclass) :cssText(args.basestyle) :cssText(args.listtitlestyle) :cssText(args['list' .. num .. 'titlestyle']) :node(title) :done() return title_container end --[[ Main entry point for sidebar with collapsible lists. Does the work of creating the collapsible lists themselves and including them into the args. ]] function p.collapsible(frame) local args = getArgs(frame) if not args.name and frame:getParent():getTitle():gsub(cfg.i18n.pattern.collapse_sandbox, '') == cfg.i18n.collapse_title_not_to_add_navbar then args.navbar = cfg.i18n.navbar_none end local contentArgs = {} local is_centered_list_titles = false if args['centered list titles'] and args['centered list titles'] ~= '' then is_centered_list_titles = true end for k, v in pairs(args) do local num = string.match(k, '^list(%d+)$') if num then local expand = args.expanded and (args.expanded == 'all' or args.expanded == args['list' .. num .. 'name']) local row = mw.html.create('div') row :addClass(cfg.i18n.class.list) :addClass('mw-collapsible') :addClass((not expand) and 'mw-collapsed' or nil) :addClass(args['list' .. num .. 'class']) :cssText(args.listframestyle) :cssText(args['list' .. num .. 'framestyle']) :node(list_title(args, is_centered_list_titles, num)) :tag('div') :addClass(cfg.i18n.class.list_content) :addClass('mw-collapsible-content') -- don't /need/ a listnumstyleclass because you can do -- .templatename .listnumclass .sidebar-list :addClass(args.listclass) :cssText(args.liststyle) :cssText(args['list' .. num .. 'style']) :wikitext(trimAndAddAutomaticNewline(args['list' .. num])) contentArgs['content' .. num] = tostring(row) end end for k, v in pairs(contentArgs) do args[k] = v end return p.sidebar(frame, args, cfg.i18n.class.collapse) end return p 71fe765846593e025ca2f94371315e9dbb5bb4d2 Module:Sidebar/configuration 828 100 217 216 2023-06-06T08:51:34Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Sidebar/configuration]]: w Scribunto text/plain return { i18n = { child_yes = 'yes', float_none = 'none', float_left = 'left', wrap_true = 'true', navbar_none = 'none', navbar_off = 'off', default_list_title = 'List', title_not_to_add_navbar = 'Template:Sidebar', collapse_title_not_to_add_navbar = 'Template:Sidebar with collapsible lists', templatestyles = 'Module:Sidebar/styles.css', hlist_templatestyles = 'Hlist/styles.css', plainlist_templatestyles = 'Plainlist/styles.css', category = { child = '[[Category:Pages using sidebar with the child parameter]]', conversion = '[[Category:Sidebars with styles needing conversion]]' }, pattern = { collapse_sandbox = '/sandbox$', sandbox = '/sandbox$', subgroup = 'sidebar%-subgroup', style_conversion = 'style$', uncategorized_conversion_titles = { '/[Ss]andbox', '/[Tt]estcases', '/[Dd]oc$' } }, class = { sidebar = 'sidebar', subgroup = 'sidebar-subgroup', collapse = 'sidebar-collapse', float_none = 'sidebar-none', float_left = 'sidebar-left', wraplinks = 'nowraplinks', outer_title = 'sidebar-outer-title', top_image = 'sidebar-top-image', top_caption = 'sidebar-top-caption', pretitle = 'sidebar-pretitle', pretitle_with_top_image = 'sidebar-pretitle-with-top-image', title = 'sidebar-title', title_with_pretitle = 'sidebar-title-with-pretitle', image = 'sidebar-image', caption = 'sidebar-caption', above = 'sidebar-above', heading = 'sidebar-heading', content = 'sidebar-content', content_with_subgroup = 'sidebar-content-with-subgroup', below = 'sidebar-below', navbar = 'sidebar-navbar', list = 'sidebar-list', list_title = 'sidebar-list-title', list_title_centered = 'sidebar-list-title-c', list_content = 'sidebar-list-content' } } } dc2a980ac2162a898f7c21e6d6ba7e994dfeb315 Module:Sidebar/styles.css 828 101 219 218 2023-06-06T08:51:34Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Sidebar/styles.css]]: w sanitized-css text/css /* {{pp-template}} */ /* TODO: Invert width design to be "mobile first" */ .sidebar { /* TODO: Ask if we should have max-width 22em instead */ width: 22em; /* @noflip */ float: right; /* @noflip */ clear: right; /* @noflip */ margin: 0.5em 0 1em 1em; background: #f8f9fa; border: 1px solid #aaa; padding: 0.2em; text-align: center; line-height: 1.4em; font-size: 88%; border-collapse: collapse; /* Timeless has display: none on .nomobile at mobile resolutions, so we * unhide it with display: table and let precedence and proximity win. */ display: table; } /* Unfortunately, so does Minerva desktop, except Minerva drops an * !important on the declaration. So we have to be mean for Minerva users. * Mobile removes the element entirely with `wgMFRemovableClasses` in * https://github.com/wikimedia/operations-mediawiki-config/blob/master/ wmf-config/InitialiseSettings.php#L16992 * which is why displaying it categorically with display: table works. * We don't really want to expose the generic user in the wild on mobile to have * to deal with sidebars. (Maybe the ones with collapsible lists, so that * might be an improvement. That is blocked on [[:phab:T111565]].) */ body.skin-minerva .sidebar { display: table !important; /* also, minerva is way too aggressive about other stylings on tables. * TODO remove when this template gets moved to a div. plans on talk page. * We always float right on Minerva because that's a lot of extra CSS * otherwise. */ float: right !important; margin: 0.5em 0 1em 1em !important; } .sidebar-subgroup { width: 100%; margin: 0; border-spacing: 0; } .sidebar-left { /* @noflip */ float: left; /* @noflip */ clear: left; /* @noflip */ margin: 0.5em 1em 1em 0; } .sidebar-none { float: none; clear: both; /* @noflip */ margin: 0.5em 1em 1em 0; } .sidebar-outer-title { padding: 0 0.4em 0.2em; font-size: 125%; line-height: 1.2em; font-weight: bold; } .sidebar-top-image { padding: 0.4em; } .sidebar-top-caption, .sidebar-pretitle-with-top-image, .sidebar-caption { padding: 0.2em 0.4em 0; line-height: 1.2em; } .sidebar-pretitle { padding: 0.4em 0.4em 0; line-height: 1.2em; } .sidebar-title, .sidebar-title-with-pretitle { padding: 0.2em 0.8em; font-size: 145%; line-height: 1.2em; } .sidebar-title-with-pretitle { padding: 0.1em 0.4em; } .sidebar-image { padding: 0.2em 0.4em 0.4em; } .sidebar-heading { padding: 0.1em 0.4em; } .sidebar-content { padding: 0 0.5em 0.4em; } .sidebar-content-with-subgroup { padding: 0.1em 0.4em 0.2em; } .sidebar-above, .sidebar-below { padding: 0.3em 0.8em; font-weight: bold; } .sidebar-collapse .sidebar-above, .sidebar-collapse .sidebar-below { border-top: 1px solid #aaa; border-bottom: 1px solid #aaa; } .sidebar-navbar { text-align: right; font-size: 115%; padding: 0 0.4em 0.4em; } .sidebar-list-title { padding: 0 0.4em; text-align: left; font-weight: bold; line-height: 1.6em; font-size: 105%; } /* centered text with mw-collapsible headers is finicky */ .sidebar-list-title-c { padding: 0 0.4em; text-align: center; margin: 0 3.3em; } @media (max-width: 720px) { /* users have wide latitude to set arbitrary width and margin :( "Super-specific" selector to prevent overriding this appearance by lower level sidebars too */ body.mediawiki .sidebar { width: 100% !important; clear: both; float: none !important; /* Remove when we div based; Minerva is dumb */ margin-left: 0 !important; margin-right: 0 !important; } /* TODO: We might consider making all links wrap at small resolutions and then * only introduce nowrap at higher resolutions. Do when we invert the media * query. */ } 7d621b35a37807a103b59075851fe36201204ceb Template:As of 10 102 221 220 2023-06-06T08:51:35Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:As_of]]: w wikitext text/x-wiki <!--{{As of}} begin--><includeonly><!-- ## param 1 is the year ## optional param 2 is the month ## optional param 3 is the day of the month ## optional named parameter alt=[text] is alternative display text (may include wiki markup) ## optional named parameter df=US produces American date format in displayed text ## optional named parameter lc=on gives lower-case-first output ## optional named parameter url=[URL] gives statement reference ## displayed text ([A/a]s of [Start date] by default) -->{{#if: {{{alt|}}} | {{{alt}}} | {{#if:{{{bare|}}}||{{#if:{{yesno|{{{since|}}}}}|{{#if: {{yesno|{{{lc|}}}}} | s | S }}ince | {{#if: {{yesno|{{{lc|}}}}} | a | A }}s of}}}} {{#if:{{{pre|}}}|{{{pre}}}&#32;}}{{#if: {{{3|}}} | {{#ifeq:{{lc:{{{df|}}}}}|us|{{MONTHNAME|{{{2}}}}}&nbsp;{{#expr:{{{3}}}}},&#32;|{{#expr:{{{3}}}}}&nbsp;{{MONTHNAME|{{{2}}}}}&nbsp;}}{{{1}}}|{{#if: {{{2|}}} |{{MONTHNAME|{{{2}}}}}&nbsp;}}{{{1}}}}}}}{{#if:{{{post|}}}|<nowiki />{{{post}}}}}<!-- #### That nowiki is required or, various characters (:, ;, #, and *} will be parsed as wikisyntax for list items. ## ref/update inline banner (hidden by default) --><sup class="plainlinks noexcerpt noprint asof-tag {{#if:{{{url|}}}|ref|update}}" style="display:none;">[{{#if:{{{url|}}}|{{{url}}} &#91;ref&#93;|{{fullurl:{{PAGENAME}}|action=edit}} &#91;update&#93;}}]</sup><!-- ## categorisation disabled outside main namespace -->{{DMCA|Articles containing potentially dated statements|from|<!-- ## temporal category for template (word method) -->{{#if: {{#ifexpr: {{{1}}} = 1 }} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 2004 | {{{1}}} | {{#ifexpr: {{#time:Y|{{{1}}}}} > 1989 | {{#time:Y|{{{1}}}}} | before 1990 }}}} | <!-- ## temporal category for template (parameter method) -->{{#ifexpr: {{{1}}} > 2004 | {{#if:{{{2|}}} | {{MONTHNAME|{{{2}}}}} }} {{{1}}} | {{#ifexpr:{{{1}}} > 1989 | {{{1}}} | before 1990 }}}}}}|<!-- ## global category for template -->All articles containing potentially dated statements}}</includeonly><!--{{As of}} end--><noinclude><!-- ## dynamic example (as of today, self ref) -->{{As of|{{CURRENTYEAR}}|{{CURRENTMONTH}}|{{CURRENTDAY}}}}<sup class="plainlinks">[https://en.wikipedia.org/wiki/Template:As_of &#91;ref&#93;]</sup> {{documentation}} <!-- Add categories and inter-wikis to the /doc subpage, not here! --> </noinclude>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using as of template with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:As of]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | 2 | 3 | alt | bare | df | lc | post | pre | since | url }} dd0794e75a86855d0ccc649adeaa8be5d3c3c704 Template:Yesno-no 10 103 223 222 2023-06-06T08:51:35Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Yesno-no]]: w wikitext text/x-wiki {{safesubst:<noinclude />yesno|{{{1}}}|yes={{{yes|yes}}}|no={{{no|no}}}|blank={{{blank|no}}}|¬={{{¬|no}}}|def={{{def|no}}}}}<noinclude> {{Documentation|Template:Yesno/doc}} <!--Categories go in the doc page referenced above; interwikis go in Wikidata.--> </noinclude> 1ad7b7800da1b867ead8f6ff8cef76e6201b3b56 Template:For 10 104 225 224 2023-06-06T08:51:36Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:For]]: w wikitext text/x-wiki <includeonly>{{#invoke:For|For}}</includeonly><noinclude> {{Documentation}} </noinclude> 3f70c0fa7cd736071e7c6e7dcd90ff3704df26bb Module:Color contrast 828 105 227 226 2023-06-06T08:51:36Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Color_contrast]]: w Scribunto text/plain -- -- This module implements -- {{Color contrast ratio}} -- {{Greater color contrast ratio}} -- {{ColorToLum}} -- {{RGBColorToLum}} -- local p = {} local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' ) local function sRGB (v) if (v <= 0.03928) then v = v / 12.92 else v = math.pow((v+0.055)/1.055, 2.4) end return v end local function rgbdec2lum(R, G, B) if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255) else return '' end end local function hsl2lum(h, s, l) if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then local c = (1 - math.abs(2*l - 1))*s local x = c*(1 - math.abs( math.fmod(h/60, 2) - 1) ) local m = l - c/2 local r, g, b = m, m, m if( 0 <= h and h < 60 ) then r = r + c g = g + x elseif( 60 <= h and h < 120 ) then r = r + x g = g + c elseif( 120 <= h and h < 180 ) then g = g + c b = b + x elseif( 180 <= h and h < 240 ) then g = g + x b = b + c elseif( 240 <= h and h < 300 ) then r = r + x b = b + c elseif( 300 <= h and h < 360 ) then r = r + c b = b + x end return rgbdec2lum(255*r, 255*g, 255*b) else return '' end end local function color2lum(c) if (c == nil) then return '' end -- html '#' entity c = c:gsub("&#35;", "#") -- whitespace c = c:match( '^%s*(.-)[%s;]*$' ) -- unstrip nowiki strip markers c = mw.text.unstripNoWiki(c) -- lowercase c = c:lower() -- first try to look it up local L = HTMLcolor[c] if (L ~= nil) then return L end -- convert from hsl if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$') return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100) end -- convert from rgb if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$') return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B)) end -- convert from rgb percent if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$') return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100) end -- remove leading # (if there is one) and whitespace c = mw.ustring.match(c, '^[%s#]*([a-f0-9]*)[%s]*$') -- split into rgb local cs = mw.text.split(c or '', '') if( #cs == 6 ) then local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[2]) local G = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[4]) local B = 16*tonumber('0x' .. cs[5]) + tonumber('0x' .. cs[6]) return rgbdec2lum(R, G, B) elseif ( #cs == 3 ) then local R = 16*tonumber('0x' .. cs[1]) + tonumber('0x' .. cs[1]) local G = 16*tonumber('0x' .. cs[2]) + tonumber('0x' .. cs[2]) local B = 16*tonumber('0x' .. cs[3]) + tonumber('0x' .. cs[3]) return rgbdec2lum(R, G, B) end -- failure, return blank return '' end -- This exports the function for use in other modules. -- The colour is passed as a string. function p._lum(color) return color2lum(color) end function p._greatercontrast(args) local bias = tonumber(args['bias'] or '0') or 0 local css = (args['css'] and args['css'] ~= '') and true or false local v1 = color2lum(args[1] or '') local c2 = args[2] or '#FFFFFF' local v2 = color2lum(c2) local c3 = args[3] or '#000000' local v3 = color2lum(c3) local ratio1 = -1; local ratio2 = -1; if (type(v1) == 'number' and type(v2) == 'number') then ratio1 = (v2 + 0.05)/(v1 + 0.05) ratio1 = (ratio1 < 1) and 1/ratio1 or ratio1 end if (type(v1) == 'number' and type(v3) == 'number') then ratio2 = (v3 + 0.05)/(v1 + 0.05) ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2 end if css then local c1 = args[1] or '' if mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or mw.ustring.match(c1, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then c1 = '#' .. c1 end if mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or mw.ustring.match(c2, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then c2 = '#' .. c2 end if mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') or mw.ustring.match(v3, '^[A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9][A-Fa-f0-9]$') then c3 = '#' .. c3 end return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';' end return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '' end function p._ratio(args) local v1 = color2lum(args[1]) local v2 = color2lum(args[2]) if (type(v1) == 'number' and type(v2) == 'number') then -- v1 should be the brighter of the two. if v2 > v1 then v1, v2 = v2, v1 end return (v1 + 0.05)/(v2 + 0.05) else return args['error'] or '?' end end function p._styleratio(args) local style = (args[1] or ''):lower() local bg, fg = 'white', 'black' local lum_bg, lum_fg = 1, 0 if args[2] then local lum = color2lum(args[2]) if lum ~= '' then bg, lum_bg = args[2], lum end end if args[3] then local lum = color2lum(args[3]) if lum ~= '' then fg, lum_fg = args[3], lum end end local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '&#35;', '#'), ';') for k = 1,#slist do local s = slist[k] local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' ) k = k or '' v = v or '' if (k:match('^[%s]*(background)[%s]*$') or k:match('^[%s]*(background%-color)[%s]*$')) then local lum = color2lum(v) if( lum ~= '' ) then bg, lum_bg = v, lum end elseif (k:match('^[%s]*(color)[%s]*$')) then local lum = color2lum(v) if( lum ~= '' ) then bg, lum_fg = v, lum end end end if lum_bg > lum_fg then return (lum_bg + 0.05)/(lum_fg + 0.05) else return (lum_fg + 0.05)/(lum_bg + 0.05) end end --[[ Use {{#invoke:Color contrast|somecolor}} directly or {{#invoke:Color contrast}} from a wrapper template. Parameters: -- |1= — required; A color to check. --]] function p.lum(frame) local color = frame.args[1] or frame:getParent().args[1] return p._lum(color) end function p.ratio(frame) local args = frame.args[1] and frame.args or frame:getParent().args return p._ratio(args) end function p.styleratio(frame) local args = frame.args[1] and frame.args or frame:getParent().args return p._styleratio(args) end function p.greatercontrast(frame) local args = frame.args[1] and frame.args or frame:getParent().args return p._greatercontrast(args) end return p 1e399769117591366a63f62996c9a407077cc711 Module:Color contrast/colors 828 106 229 228 2023-06-06T08:51:37Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Color_contrast/colors]]: w Scribunto text/plain return { aliceblue = 0.92880068253475, antiquewhite = 0.84646951707754, aqua = 0.7874, aquamarine = 0.8078549208338, azure = 0.97265264954166, beige = 0.8988459998705, bisque = 0.80732327372979, black = 0, blanchedalmond = 0.85084439608156, blue = 0.0722, blueviolet = 0.12622014321946, brown = 0.098224287876511, burlywood = 0.51559844533893, cadetblue = 0.29424681085422, chartreuse = 0.76032025902623, chocolate = 0.23898526114557, coral = 0.37017930872924, cornflowerblue = 0.30318641994179, cornsilk = 0.93562110372965, crimson = 0.16042199953026, cyan = 0.7874, darkblue = 0.018640801980939, darkcyan = 0.20329317839046, darkgoldenrod = 0.27264703559993, darkgray = 0.39675523072563, darkgreen = 0.091143429047575, darkgrey = 0.39675523072563, darkkhaki = 0.45747326349994, darkmagenta = 0.07353047651207, darkolivegreen = 0.12651920884889, darkorange = 0.40016167026524, darkorchid = 0.13413142174857, darkred = 0.054889674531132, darksalmon = 0.40541471563381, darkseagreen = 0.43789249325969, darkslateblue = 0.065792846227988, darkslategray = 0.067608151928044, darkslategrey = 0.067608151928044, darkturquoise = 0.4874606277449, darkviolet = 0.10999048339343, deeppink = 0.23866895828276, deepskyblue = 0.44481603395575, dimgray = 0.14126329114027, dimgrey = 0.14126329114027, dodgerblue = 0.27442536991456, firebrick = 0.10724525535015, floralwhite = 0.95922484825004, forestgreen = 0.18920812076002, fuchsia = 0.2848, gainsboro = 0.71569350050648, ghostwhite = 0.94311261886323, gold = 0.69860877428159, goldenrod = 0.41919977809569, gray = 0.2158605001139, green = 0.15438342968146, greenyellow = 0.80609472611453, grey = 0.2158605001139, honeydew = 0.96336535554782, hotpink = 0.34658438169715, indianred = 0.21406134963884, indigo = 0.03107561486337, ivory = 0.99071270600615, khaki = 0.77012343394121, lavender = 0.80318750514521, lavenderblush = 0.90172748631046, lawngreen = 0.73905893124963, lemonchiffon = 0.94038992245622, lightblue = 0.63709141280807, lightcoral = 0.35522120733135, lightcyan = 0.94587293494829, lightgoldenrodyellow = 0.93348351018297, lightgray = 0.65140563741982, lightgreen = 0.69091979956865, lightgrey = 0.65140563741982, lightpink = 0.58566152734898, lightsalmon = 0.4780675225206, lightseagreen = 0.35050145117042, lightskyblue = 0.56195637618331, lightslategray = 0.23830165007287, lightslategrey = 0.23830165007287, lightsteelblue = 0.53983888284666, lightyellow = 0.98161818392882, lime = 0.7152, limegreen = 0.44571042246098, linen = 0.88357340984379, magenta = 0.2848, maroon = 0.045891942324215, mediumaquamarine = 0.49389703310801, mediumblue = 0.044077780212328, mediumorchid = 0.21639251153773, mediumpurple = 0.22905858091648, mediumseagreen = 0.34393112338131, mediumslateblue = 0.20284629471622, mediumspringgreen = 0.70704308194184, mediumturquoise = 0.5133827926448, mediumvioletred = 0.14371899849357, midnightblue = 0.02071786635086, mintcream = 0.97834604947588, mistyrose = 0.82183047859185, moccasin = 0.80083000991567, navajowhite = 0.76519682342785, navy = 0.015585128108224, oldlace = 0.91900633405549, olive = 0.20027537200568, olivedrab = 0.22593150951929, orange = 0.4817026703631, orangered = 0.25516243753416, orchid = 0.31348806761439, palegoldenrod = 0.78792647887614, palegreen = 0.77936759006353, paleturquoise = 0.76436077921714, palevioletred = 0.28754994117889, papayawhip = 0.87797100199835, peachpuff = 0.74905589878251, peru = 0.30113074877936, pink = 0.63271070702466, plum = 0.45734221587969, powderblue = 0.68254586500605, purple = 0.061477070432439, rebeccapurple = 0.07492341159447, red = 0.2126, rosybrown = 0.32319457649407, royalblue = 0.16663210743188, saddlebrown = 0.097922285020521, salmon = 0.36977241527596, sandybrown = 0.46628543696283, seagreen = 0.19734199706275, seashell = 0.92737862206922, sienna = 0.13697631337098, silver = 0.52711512570581, skyblue = 0.55291668518184, slateblue = 0.14784278062136, slategray = 0.20896704076536, slategrey = 0.20896704076536, snow = 0.96533341834849, springgreen = 0.73052306068529, steelblue = 0.20562642207625, tan = 0.48237604163921, teal = 0.16996855778968, thistle = 0.56818401093733, tomato = 0.30638612719415, turquoise = 0.5895536427578, violet = 0.40315452986676, wheat = 0.74909702820482, white = 1, whitesmoke = 0.91309865179342, yellow = 0.9278, yellowgreen = 0.50762957208707, } 6ae47fdb24de4eed5ec26d203faf5341a388987b Module:For 828 107 231 230 2023-06-06T08:51:38Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:For]]: w Scribunto text/plain local mArguments --initialize lazily local mHatlist = require('Module:Hatnote list') local mHatnote = require('Module:Hatnote') local yesNo = require('Module:Yesno') local p = {} --Implements {{For}} from the frame --uses capitalized "For" to avoid collision with Lua reserved word "for" function p.For (frame) mArguments = require('Module:Arguments') return p._For(mArguments.getArgs(frame)) end --Implements {{For}} but takes a manual arguments table function p._For (args) local use = args[1] if (not use) then return mHatnote.makeWikitextError( 'no context parameter provided. Use {{other uses}} for "other uses" hatnotes.', 'Template:For#Errors', args.category ) end local pages = {} function two (a, b) return a, b, 1 end --lets us run ipairs from 2 for k, v in two(ipairs(args)) do table.insert(pages, v) end local title = mw.title.getCurrentTitle() local skipCat = title.isTalkPage or title.namespace == 2 --don't categorise talk pages and userspace local oddCat = skipCat and '' or '[[Category:Hatnote templates using unusual parameters]]' local category = yesNo(args.category) return mHatnote._hatnote( mHatlist.forSeeTableToString({{use = use, pages = pages}}), {selfref = args.selfref} ) .. ( (use == 'other uses') and ((category == true) or (category == nil)) and oddCat or '' ) end return p 2faf1bd8c657f3425af829cbde9733a936d8d4f4 Template:Para 10 108 233 232 2023-06-06T08:51:38Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Para]]: w wikitext text/x-wiki <code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">&#124;{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}&#61;}}{{{2|}}}</code><noinclude> {{Documentation}} <!--Categories and interwikis go near the bottom of the /doc subpage.--> </noinclude> 06006deea2ed5d552aab61b4332321ab749ae7e8 Template:Navbar 10 109 235 234 2023-06-06T08:51:39Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Navbar]]: w wikitext text/x-wiki <includeonly>{{#invoke:Navbar|navbar}}</includeonly><noinclude> {{documentation}} </noinclude> 868e3566b7e8a9a5a7f3dac75cac429c47de10d3 Template:Hatnote 10 110 237 236 2023-06-06T08:51:39Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Hatnote]]: w wikitext text/x-wiki <includeonly>{{#invoke:Hatnote|hatnote}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 4a1d1028d07c9056022807a96051e1c82cf2a1c7 Template:Documentation 10 15 239 30 2023-06-06T08:51:40Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Documentation]]: w wikitext text/x-wiki <noinclude> <languages/> </noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude> {{documentation|content= {{Lua|Module:Documentation}} <translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate> <translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate> <translate> ==Usage== <!--T:2--> ===Customizing display=== <!--T:3--> <!--T:4--> Overrides exist to customize the output in special cases: </translate> * <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate> <translate> ==Rationale== <!--T:6--> </translate> <translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate> <translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate> <translate> ==See also== <!--T:9--> </translate> * <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate> * {{tim|Documentation}} * <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate> }} [[Category:Formatting templates{{#translation:}}|Template documentation]] [[Category:Template documentation{{#translation:}}| ]] </noinclude><includeonly>{{#if:{{{content|}}}| [[Category:Template documentation pages{{#translation:}}]] }}</includeonly> e9a25c87d40f5882dd425c83ed4d3be628082f3c Module:Documentation 828 25 241 50 2023-06-06T08:51:40Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Documentation]]: w Scribunto text/plain -- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs local messageBox = require('Module:Message box') -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local i18n = mw.loadData('Module:Documentation/i18n') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but are made available in the p -- table for testing purposes. ---------------------------------------------------------------------------- local function message(cfgKey, valArray, expectType) --[[ -- Gets a message from the cfg table and formats it if appropriate. -- The function raises an error if the value from the cfg table is not -- of the type expectType. The default type for expectType is 'string'. -- If the table valArray is present, strings such as $1, $2 etc. in the -- message are substituted with values from the table keys [1], [2] etc. -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." --]] local msg = cfg[cfgKey] expectType = expectType or 'string' if type(msg) ~= expectType then error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4) end local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal) return ret end p.message = message local function makeWikilink(page, display) if display then return mw.ustring.format('[[%s|%s]]', page, display) else return mw.ustring.format('[[%s]]', page) end end p.makeWikilink = makeWikilink local function makeCategoryLink(cat, sort) local catns = mw.site.namespaces[14].name return makeWikilink(catns .. ':' .. cat, sort) end p.makeCategoryLink = makeCategoryLink local function makeUrlLink(url, display) return mw.ustring.format('[%s %s]', url, display) end p.makeUrlLink = makeUrlLink local function makeToolbar(...) local ret = {} local lim = select('#', ...) if lim < 1 then return nil end for i = 1, lim do ret[#ret + 1] = select(i, ...) end return '<small style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>' end p.makeToolbar = makeToolbar ---------------------------------------------------------------------------- -- Argument processing ---------------------------------------------------------------------------- local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame, { valueFunc = function (key, value) if type(value) == 'string' then value = value:match('^%s*(.-)%s*$') -- Remove whitespace. if key == 'heading' or value ~= '' then return value else return nil end else return value end end }) return p[funcName](args) end end ---------------------------------------------------------------------------- -- Load TemplateStyles ---------------------------------------------------------------------------- p.main = function(frame) local parent = frame.getParent(frame) local output = p._main(parent.args) return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output end ---------------------------------------------------------------------------- -- Main function ---------------------------------------------------------------------------- function p._main(args) --[[ -- This function defines logic flow for the module. -- @args - table of arguments passed by the user -- -- Messages: -- 'main-div-id' --> 'template-documentation' -- 'main-div-classes' --> 'template-documentation iezoomfix' --]] local env = p.getEnvironment(args) local root = mw.html.create() root :wikitext(p._getModuleWikitext(args, env)) :wikitext(p.protectionTemplate(env)) :wikitext(p.sandboxNotice(args, env)) -- This div tag is from {{documentation/start box}}, but moving it here -- so that we don't have to worry about unclosed tags. :tag('div') :attr('id', message('main-div-id')) :addClass(message('main-div-class')) :wikitext(p._startBox(args, env)) :wikitext(p._content(args, env)) :done() :wikitext(p._endBox(args, env)) :wikitext(p.addTrackingCategories(env)) return tostring(root) end ---------------------------------------------------------------------------- -- Environment settings ---------------------------------------------------------------------------- function p.getEnvironment(args) --[[ -- Returns a table with information about the environment, including title objects and other namespace- or -- path-related data. -- @args - table of arguments passed by the user -- -- Title objects include: -- env.title - the page we are making documentation for (usually the current title) -- env.templateTitle - the template (or module, file, etc.) -- env.docTitle - the /doc subpage. -- env.sandboxTitle - the /sandbox subpage. -- env.testcasesTitle - the /testcases subpage. -- env.printTitle - the print version of the template, located at the /Print subpage. -- -- Data includes: -- env.protectionLevels - the protection levels table of the title object. -- env.subjectSpace - the number of the title's subject namespace. -- env.docSpace - the number of the namespace the title puts its documentation in. -- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace. -- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template. -- -- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value -- returned will be nil. --]] local env, envFuncs = {}, {} -- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value -- returned by that function is memoized in the env table so that we don't call any of the functions -- more than once. (Nils won't be memoized.) setmetatable(env, { __index = function (t, key) local envFunc = envFuncs[key] if envFunc then local success, val = pcall(envFunc) if success then env[key] = val -- Memoise the value. return val end end return nil end }) function envFuncs.title() -- The title object for the current page, or a test page passed with args.page. local title local titleArg = args.page if titleArg then title = mw.title.new(titleArg) else title = mw.title.getCurrentTitle() end return title end function envFuncs.templateTitle() --[[ -- The template (or module, etc.) title object. -- Messages: -- 'sandbox-subpage' --> 'sandbox' -- 'testcases-subpage' --> 'testcases' --]] local subjectSpace = env.subjectSpace local title = env.title local subpage = title.subpageText if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then return mw.title.makeTitle(subjectSpace, title.baseText) else return mw.title.makeTitle(subjectSpace, title.text) end end function envFuncs.docTitle() --[[ -- Title object of the /doc subpage. -- Messages: -- 'doc-subpage' --> 'doc' --]] local title = env.title local docname = args[1] -- User-specified doc page. local docpage if docname then docpage = docname else docpage = env.docpageBase .. '/' .. message('doc-subpage') end return mw.title.new(docpage) end function envFuncs.sandboxTitle() --[[ -- Title object for the /sandbox subpage. -- Messages: -- 'sandbox-subpage' --> 'sandbox' --]] return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage')) end function envFuncs.testcasesTitle() --[[ -- Title object for the /testcases subpage. -- Messages: -- 'testcases-subpage' --> 'testcases' --]] return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) end function envFuncs.printTitle() --[[ -- Title object for the /Print subpage. -- Messages: -- 'print-subpage' --> 'Print' --]] return env.templateTitle:subPageTitle(message('print-subpage')) end function envFuncs.protectionLevels() -- The protection levels table of the title object. return env.title.protectionLevels end function envFuncs.subjectSpace() -- The subject namespace number. return mw.site.namespaces[env.title.namespace].subject.id end function envFuncs.docSpace() -- The documentation namespace number. For most namespaces this is the same as the -- subject namespace. However, pages in the Article, File, MediaWiki or Category -- namespaces must have their /doc, /sandbox and /testcases pages in talk space. local subjectSpace = env.subjectSpace if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then return subjectSpace + 1 else return subjectSpace end end function envFuncs.docpageBase() -- The base page of the /doc, /sandbox, and /testcases subpages. -- For some namespaces this is the talk page, rather than the template page. local templateTitle = env.templateTitle local docSpace = env.docSpace local docSpaceText = mw.site.namespaces[docSpace].name -- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon. return docSpaceText .. ':' .. templateTitle.text end function envFuncs.compareUrl() -- Diff link between the sandbox and the main template using [[Special:ComparePages]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.fullUrl( 'Special:ComparePages', {page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} ) return tostring(compareUrl) else return nil end end return env end ---------------------------------------------------------------------------- -- Auxiliary templates ---------------------------------------------------------------------------- p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext') function p._getModuleWikitext(args, env) local currentTitle = mw.title.getCurrentTitle() if currentTitle.contentModel ~= 'Scribunto' then return end pcall(require, currentTitle.prefixedText) -- if it fails, we don't care local moduleWikitext = package.loaded["Module:Module wikitext"] if moduleWikitext then return moduleWikitext.main() end end function p.sandboxNotice(args, env) --[=[ -- Generates a sandbox notice for display above sandbox pages. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' -- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page' -- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page' -- 'sandbox-notice-pagetype-other' --> 'sandbox page' -- 'sandbox-notice-compare-link-display' --> 'diff' -- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.' -- 'sandbox-notice-testcases-link-display' --> 'test cases' -- 'sandbox-category' --> 'Template sandboxes' --]=] local title = env.title local sandboxTitle = env.sandboxTitle local templateTitle = env.templateTitle local subjectSpace = env.subjectSpace if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then return nil end -- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text". local omargs = {} omargs.image = message('sandbox-notice-image') -- Get the text. We start with the opening blurb, which is something like -- "This is the template sandbox for [[Template:Foo]] (diff)." local text = '' local frame = mw.getCurrentFrame() local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed. local pagetype if subjectSpace == 10 then pagetype = message('sandbox-notice-pagetype-template') elseif subjectSpace == 828 then pagetype = message('sandbox-notice-pagetype-module') else pagetype = message('sandbox-notice-pagetype-other') end local templateLink = makeWikilink(templateTitle.prefixedText) local compareUrl = env.compareUrl if isPreviewing or not compareUrl then text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) else local compareDisplay = message('sandbox-notice-compare-link-display') local compareLink = makeUrlLink(compareUrl, compareDisplay) text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) end -- Get the test cases page blurb if the page exists. This is something like -- "See also the companion subpage for [[Template:Foo/testcases|test cases]]." local testcasesTitle = env.testcasesTitle if testcasesTitle and testcasesTitle.exists then if testcasesTitle.contentModel == "Scribunto" then local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink}) else local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink}) end end -- Add the sandbox to the sandbox category. text = text .. makeCategoryLink(message('sandbox-category')) omargs.text = text omargs.class = message('sandbox-class') local ret = '<div style="clear: both;"></div>' ret = ret .. messageBox.main('ombox', omargs) return ret end function p.protectionTemplate(env) -- Generates the padlock icon in the top right. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'protection-template' --> 'pp-template' -- 'protection-template-args' --> {docusage = 'yes'} local title = env.title local protectionLevels local protectionTemplate = message('protection-template') local namespace = title.namespace if not (protectionTemplate and (namespace == 10 or namespace == 828)) then -- Don't display the protection template if we are not in the template or module namespaces. return nil end protectionLevels = env.protectionLevels if not protectionLevels then return nil end local editLevels = protectionLevels.edit local moveLevels = protectionLevels.move if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then -- The page is full-move protected, or full, template, or semi-protected. local frame = mw.getCurrentFrame() return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')} else return nil end end ---------------------------------------------------------------------------- -- Start box ---------------------------------------------------------------------------- p.startBox = makeInvokeFunc('_startBox') function p._startBox(args, env) --[[ -- This function generates the start box. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make -- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox -- which generate the box HTML. --]] env = env or p.getEnvironment(args) local links local content = args.content if not content then -- No need to include the links if the documentation is on the template page itself. local linksData = p.makeStartBoxLinksData(args, env) if linksData then links = p.renderStartBoxLinks(linksData) end end -- Generate the start box html. local data = p.makeStartBoxData(args, env, links) if data then return p.renderStartBox(data) else -- User specified no heading. return nil end end function p.makeStartBoxLinksData(args, env) --[[ -- Does initial processing of data to make the [view] [edit] [history] [purge] links. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'view-link-display' --> 'view' -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'purge-link-display' --> 'purge' -- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'docpage-preload' --> 'Template:Documentation/preload' -- 'create-link-display' --> 'create' --]] local subjectSpace = env.subjectSpace local title = env.title local docTitle = env.docTitle if not title or not docTitle then return nil end if docTitle.isRedirect then docTitle = docTitle.redirectTarget end local data = {} data.title = title data.docTitle = docTitle -- View, display, edit, and purge links if /doc exists. data.viewLinkDisplay = i18n['view-link-display'] data.editLinkDisplay = i18n['edit-link-display'] data.historyLinkDisplay = i18n['history-link-display'] data.purgeLinkDisplay = i18n['purge-link-display'] -- Create link if /doc doesn't exist. local preload = args.preload if not preload then if subjectSpace == 6 then -- File namespace preload = message('file-docpage-preload') elseif subjectSpace == 828 then -- Module namespace preload = message('module-preload') else preload = message('docpage-preload') end end data.preload = preload data.createLinkDisplay = i18n['create-link-display'] return data end function p.renderStartBoxLinks(data) --[[ -- Generates the [view][edit][history][purge] or [create] links from the data table. -- @data - a table of data generated by p.makeStartBoxLinksData --]] local function escapeBrackets(s) -- Escapes square brackets with HTML entities. s = s:gsub('%[', '&#91;') -- Replace square brackets with HTML entities. s = s:gsub('%]', '&#93;') return s end local ret local docTitle = data.docTitle local title = data.title if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) ret = '[%s] [%s] [%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) else local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) ret = '[%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, createLink) end return ret end function p.makeStartBoxData(args, env, links) --[=[ -- Does initial processing of data to pass to the start-box render function, p.renderStartBox. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' -- 'template-namespace-heading' --> 'Template documentation' -- 'module-namespace-heading' --> 'Module documentation' -- 'file-namespace-heading' --> 'Summary' -- 'other-namespaces-heading' --> 'Documentation' -- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks' -- 'start-box-link-id' --> 'doc_editlinks' -- 'testcases-create-link-display' --> 'create' --]=] local subjectSpace = env.subjectSpace if not subjectSpace then -- Default to an "other namespaces" namespace, so that we get at least some output -- if an error occurs. subjectSpace = 2 end local data = {} -- Heading local heading = args.heading -- Blank values are not removed. if heading == '' then -- Don't display the start box if the heading arg is defined but blank. return nil end if heading then data.heading = heading elseif subjectSpace == 10 then -- Template namespace data.heading = i18n['template-namespace-heading'] elseif subjectSpace == 828 then -- Module namespace data.heading = i18n['module-namespace-heading'] elseif subjectSpace == 6 then -- File namespace data.heading = i18n['file-namespace-heading'] else data.heading = i18n['other-namespaces-heading'] end -- Data for the [view][edit][history][purge] or [create] links. if links then data.linksClass = message('start-box-linkclasses') data.linksId = message('start-box-link-id') data.links = links end return data end function p.renderStartBox(data) -- Renders the start box html. -- @data - a table of data generated by p.makeStartBoxData. local sbox = mw.html.create('div') sbox :addClass(message('header-div-class')) :tag('div') :addClass(message('heading-div-class')) :wikitext(data.heading) local links = data.links if links then sbox :tag('div') :addClass(data.linksClass) :attr('id', data.linksId) :wikitext(links) end return tostring(sbox) end ---------------------------------------------------------------------------- -- Documentation content ---------------------------------------------------------------------------- p.content = makeInvokeFunc('_content') function p._content(args, env) -- Displays the documentation contents -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment env = env or p.getEnvironment(args) local docTitle = env.docTitle local content = args.content if not content and docTitle and docTitle.exists then content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle} end -- The line breaks below are necessary so that "=== Headings ===" at the start and end -- of docs are interpreted correctly. local cbox = mw.html.create('div') cbox :addClass(message('content-div-class')) :wikitext('\n' .. (content or '') .. '\n') return tostring(cbox) end p.contentTitle = makeInvokeFunc('_contentTitle') function p._contentTitle(args, env) env = env or p.getEnvironment(args) local docTitle = env.docTitle if not args.content and docTitle and docTitle.exists then return docTitle.prefixedText else return '' end end ---------------------------------------------------------------------------- -- End box ---------------------------------------------------------------------------- p.endBox = makeInvokeFunc('_endBox') function p._endBox(args, env) --[=[ -- This function generates the end box (also known as the link box). -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment --]=] -- Get environment data. env = env or p.getEnvironment(args) local subjectSpace = env.subjectSpace local docTitle = env.docTitle if not subjectSpace or not docTitle then return nil end -- Check whether we should output the end box at all. Add the end -- box by default if the documentation exists or if we are in the -- user, module or template namespaces. local linkBox = args['link box'] if linkBox == 'off' or not ( docTitle.exists or subjectSpace == 2 or subjectSpace == 828 or subjectSpace == 10 ) then return nil end -- Assemble the footer text field. local text = '' if linkBox then text = text .. linkBox else text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then -- We are in the user, template or module namespaces. -- Add sandbox and testcases links. -- "Editors can experiment in this template's sandbox and testcases pages." text = text .. (p.makeExperimentBlurb(args, env) or '') text = text .. '<br />' if not args.content and not args[1] then -- "Please add categories to the /doc subpage." -- Don't show this message with inline docs or with an explicitly specified doc page, -- as then it is unclear where to add the categories. text = text .. (p.makeCategoriesBlurb(args, env) or '') end text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates. if printBlurb then text = text .. '<br />' .. printBlurb end end end local ebox = mw.html.create('div') ebox :addClass(message('footer-div-class')) :wikitext(text) return tostring(ebox) end function p.makeDocPageBlurb(args, env) --[=[ -- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'transcluded-from-blurb' --> -- 'The above [[w:Wikipedia:Template documentation|documentation]] -- is [[w:Wikipedia:Transclusion|transcluded]] from $1.' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'create-link-display' --> 'create' -- 'create-module-doc-blurb' --> -- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].' --]=] local docTitle = env.docTitle if not docTitle or args.content then return nil end local ret if docTitle.exists then -- /doc exists; link to it. local docLink = makeWikilink(docTitle.prefixedText) local editUrl = docTitle:fullUrl{action = 'edit'} local editDisplay = i18n['edit-link-display'] local editLink = makeUrlLink(editUrl, editDisplay) local historyUrl = docTitle:fullUrl{action = 'history'} local historyDisplay = i18n['history-link-display'] local historyLink = makeUrlLink(historyUrl, historyDisplay) ret = message('transcluded-from-blurb', {docLink}) .. ' ' .. makeToolbar(editLink, historyLink) .. '<br />' elseif env.subjectSpace == 828 then -- /doc does not exist; ask to create it. local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} local createDisplay = i18n['create-link-display'] local createLink = makeUrlLink(createUrl, createDisplay) ret = message('create-module-doc-blurb', {createLink}) .. '<br />' end return ret end function p.makeExperimentBlurb(args, env) --[[ -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'sandbox' -- 'sandbox-edit-link-display' --> 'edit' -- 'compare-link-display' --> 'diff' -- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'sandbox-create-link-display' --> 'create' -- 'mirror-edit-summary' --> 'Create sandbox version of $1' -- 'mirror-link-display' --> 'mirror' -- 'mirror-link-preload' --> 'Template:Documentation/mirror' -- 'sandbox-link-display' --> 'sandbox' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display'--> 'edit' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'testcases-create-link-display' --> 'create' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display' --> 'edit' -- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases' -- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases' -- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.' -- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle local testcasesTitle = env.testcasesTitle local templatePage = templateTitle.prefixedText if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then return nil end -- Make links. local sandboxLinks, testcasesLinks if sandboxTitle.exists then local sandboxPage = sandboxTitle.prefixedText local sandboxDisplay = message('sandbox-link-display') local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'} local sandboxEditDisplay = message('sandbox-edit-link-display') local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay) local compareUrl = env.compareUrl local compareLink if compareUrl then local compareDisplay = message('compare-link-display') compareLink = makeUrlLink(compareUrl, compareDisplay) end sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink) else local sandboxPreload if subjectSpace == 828 then sandboxPreload = message('module-sandbox-preload') else sandboxPreload = message('template-sandbox-preload') end local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload} local sandboxCreateDisplay = message('sandbox-create-link-display') local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) local mirrorPreload = message('mirror-link-preload') local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} local mirrorDisplay = message('mirror-link-display') local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink) end if testcasesTitle.exists then local testcasesPage = testcasesTitle.prefixedText local testcasesDisplay = message('testcases-link-display') local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'} local testcasesEditDisplay = message('testcases-edit-link-display') local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) else local testcasesPreload if subjectSpace == 828 then testcasesPreload = message('module-testcases-preload') else testcasesPreload = message('template-testcases-preload') end local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload} local testcasesCreateDisplay = message('testcases-create-link-display') local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink) end local messageName if subjectSpace == 828 then messageName = 'experiment-blurb-module' else messageName = 'experiment-blurb-template' end return message(messageName, {sandboxLinks, testcasesLinks}) end function p.makeCategoriesBlurb(args, env) --[[ -- Generates the text "Please add categories to the /doc subpage." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'doc-link-display' --> '/doc' -- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.' --]] local docTitle = env.docTitle if not docTitle then return nil end local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display')) return message('add-categories-blurb', {docPathLink}) end function p.makeSubpagesBlurb(args, env) --[[ -- Generates the "Subpages of this template" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'template' -- 'module-pagetype' --> 'module' -- 'default-pagetype' --> 'page' -- 'subpages-link-display' --> 'Subpages of this $1' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle if not subjectSpace or not templateTitle then return nil end local pagetype if subjectSpace == 10 then pagetype = message('template-pagetype') elseif subjectSpace == 828 then pagetype = message('module-pagetype') else pagetype = message('default-pagetype') end local subpagesLink = makeWikilink( 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', message('subpages-link-display', {pagetype}) ) return message('subpages-blurb', {subpagesLink}) end function p.makePrintBlurb(args, env) --[=[ -- Generates the blurb displayed when there is a print version of the template available. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'print-link-display' --> '/Print' -- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]' -- .. ' of this template exists at $1.' -- .. ' If you make a change to this template, please update the print version as well.' -- 'display-print-category' --> true -- 'print-category' --> 'Templates with print versions' --]=] local printTitle = env.printTitle if not printTitle then return nil end local ret if printTitle.exists then local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display')) ret = message('print-blurb', {printLink}) local displayPrintCategory = message('display-print-category', nil, 'boolean') if displayPrintCategory then ret = ret .. makeCategoryLink(message('print-category')) end end return ret end ---------------------------------------------------------------------------- -- Tracking categories ---------------------------------------------------------------------------- function p.addTrackingCategories(env) --[[ -- Check if {{documentation}} is transcluded on a /doc or /testcases page. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'display-strange-usage-category' --> true -- 'doc-subpage' --> 'doc' -- 'testcases-subpage' --> 'testcases' -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' -- -- /testcases pages in the module namespace are not categorised, as they may have -- {{documentation}} transcluded automatically. --]] local title = env.title local subjectSpace = env.subjectSpace if not title or not subjectSpace then return nil end local subpage = title.subpageText local ret = '' if message('display-strange-usage-category', nil, 'boolean') and ( subpage == message('doc-subpage') or subjectSpace ~= 828 and subpage == message('testcases-subpage') ) then ret = ret .. makeCategoryLink(message('strange-usage-category')) end return ret end return p 0e23eec0d3c20c23afcd28849e240b9083dbcf88 Module:Documentation/config 828 26 243 52 2023-06-06T08:51:40Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Documentation/config]]: w Scribunto text/plain ---------------------------------------------------------------------------------------------------- -- -- Configuration for Module:Documentation -- -- Here you can set the values of the parameters and messages used in Module:Documentation to -- localise it to your wiki and your language. Unless specified otherwise, values given here -- should be string values. ---------------------------------------------------------------------------------------------------- local _format = require('Module:TNT').format local function format(id) return _format('I18n/Documentation', id) end local cfg = {} -- Do not edit this line. cfg['templatestyles-scr'] = 'Module:Documentation/styles.css' ---------------------------------------------------------------------------------------------------- -- Protection template configuration ---------------------------------------------------------------------------------------------------- -- cfg['protection-template'] -- The name of the template that displays the protection icon (a padlock on enwiki). cfg['protection-template'] = 'pp-template' -- cfg['protection-reason-edit'] -- The protection reason for edit-protected templates to pass to -- [[Module:Protection banner]]. cfg['protection-reason-edit'] = 'template' --[[ -- cfg['protection-template-args'] -- Any arguments to send to the protection template. This should be a Lua table. -- For example, if the protection template is "pp-template", and the wikitext template invocation -- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}". --]] cfg['protection-template-args'] = {docusage = 'yes'} --[[ ---------------------------------------------------------------------------------------------------- -- Sandbox notice configuration -- -- On sandbox pages the module can display a template notifying users that the current page is a -- sandbox, and the location of test cases pages, etc. The module decides whether the page is a -- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the -- messages that the notices contains. ---------------------------------------------------------------------------------------------------- --]] -- cfg['sandbox-notice-image'] -- The image displayed in the sandbox notice. cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]' --[[ -- cfg['sandbox-notice-pagetype-template'] -- cfg['sandbox-notice-pagetype-module'] -- cfg['sandbox-notice-pagetype-other'] -- The page type of the sandbox page. The message that is displayed depends on the current subject -- namespace. This message is used in either cfg['sandbox-notice-blurb'] or -- cfg['sandbox-notice-diff-blurb']. --]] cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template') cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module') cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other') --[[ -- cfg['sandbox-notice-blurb'] -- cfg['sandbox-notice-diff-blurb'] -- cfg['sandbox-notice-diff-display'] -- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence -- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page -- type, which is either cfg['sandbox-notice-pagetype-template'], -- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what -- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between -- the sandbox and the main template. The display value of the diff link is set by -- cfg['sandbox-notice-compare-link-display']. --]] cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb') cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb') cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display') --[[ -- cfg['sandbox-notice-testcases-blurb'] -- cfg['sandbox-notice-testcases-link-display'] -- cfg['sandbox-notice-testcases-run-blurb'] -- cfg['sandbox-notice-testcases-run-link-display'] -- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit. $1 is a link to the test cases page. -- cfg['sandbox-notice-testcases-link-display'] is the display value for that link. -- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test -- cases page, and $2 is a link to the page to run it. -- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test -- cases. --]] cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb') cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display') cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb') cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display') -- cfg['sandbox-category'] -- A category to add to all template sandboxes. cfg['sandbox-category'] = 'Template sandboxes' ---------------------------------------------------------------------------------------------------- -- Start box configuration ---------------------------------------------------------------------------------------------------- -- cfg['documentation-icon-wikitext'] -- The wikitext for the icon shown at the top of the template. cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' ---------------------------------------------------------------------------------------------------- -- Link box (end box) configuration ---------------------------------------------------------------------------------------------------- -- cfg['transcluded-from-blurb'] -- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page. cfg['transcluded-from-blurb'] = format('transcluded-from-blurb') --[[ -- cfg['create-module-doc-blurb'] -- Notice displayed in the module namespace when the documentation subpage does not exist. -- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the -- display cfg['create-link-display']. --]] cfg['create-module-doc-blurb'] = format('create-module-doc-blurb') ---------------------------------------------------------------------------------------------------- -- Experiment blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['experiment-blurb-template'] -- cfg['experiment-blurb-module'] -- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages. -- It is only shown in the template and module namespaces. With the default English settings, it -- might look like this: -- -- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages. -- -- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links. -- -- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending -- on what namespace we are in. -- -- Parameters: -- -- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display']) -- -- If the sandbox doesn't exist, it is in the format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display']) -- -- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload'] -- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display'] -- loads a default edit summary of cfg['mirror-edit-summary']. -- -- $2 is a link to the test cases page. If the test cases page exists, it is in the following format: -- -- cfg['testcases-link-display'] (cfg['testcases-edit-link-display']) -- -- If the test cases page doesn't exist, it is in the format: -- -- cfg['testcases-link-display'] (cfg['testcases-create-link-display']) -- -- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the -- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current -- namespace. --]] cfg['experiment-blurb-template'] = format('experiment-blurb-template') cfg['experiment-blurb-module'] = format('experiment-blurb-module') ---------------------------------------------------------------------------------------------------- -- Sandbox link configuration ---------------------------------------------------------------------------------------------------- -- cfg['sandbox-subpage'] -- The name of the template subpage typically used for sandboxes. cfg['sandbox-subpage'] = 'sandbox' -- cfg['template-sandbox-preload'] -- Preload file for template sandbox pages. cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox' -- cfg['module-sandbox-preload'] -- Preload file for Lua module sandbox pages. cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox' -- cfg['sandbox-link-display'] -- The text to display for "sandbox" links. cfg['sandbox-link-display'] = format('sandbox-link-display') -- cfg['sandbox-edit-link-display'] -- The text to display for sandbox "edit" links. cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display') -- cfg['sandbox-create-link-display'] -- The text to display for sandbox "create" links. cfg['sandbox-create-link-display'] = format('sandbox-create-link-display') -- cfg['compare-link-display'] -- The text to display for "compare" links. cfg['compare-link-display'] = format('compare-link-display') -- cfg['mirror-edit-summary'] -- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the -- template page. cfg['mirror-edit-summary'] = 'Create sandbox version of $1' -- cfg['mirror-link-display'] -- The text to display for "mirror" links. cfg['mirror-link-display'] = format('mirror-link-display') -- cfg['mirror-link-preload'] -- The page to preload when a user clicks the "mirror" link. cfg['mirror-link-preload'] = 'Template:Documentation/mirror' ---------------------------------------------------------------------------------------------------- -- Test cases link configuration ---------------------------------------------------------------------------------------------------- -- cfg['testcases-subpage'] -- The name of the template subpage typically used for test cases. cfg['testcases-subpage'] = 'testcases' -- cfg['template-testcases-preload'] -- Preload file for template test cases pages. cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases' -- cfg['module-testcases-preload'] -- Preload file for Lua module test cases pages. cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases' -- cfg['testcases-link-display'] -- The text to display for "testcases" links. cfg['testcases-link-display'] = format('testcases-link-display') -- cfg['testcases-edit-link-display'] -- The text to display for test cases "edit" links. cfg['testcases-edit-link-display'] = format('testcases-edit-link-display') -- cfg['testcases-create-link-display'] -- The text to display for test cases "create" links. cfg['testcases-create-link-display'] = format('testcases-create-link-display') ---------------------------------------------------------------------------------------------------- -- Add categories blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['add-categories-blurb'] -- Text to direct users to add categories to the /doc subpage. Not used if the "content" or -- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a -- link to the /doc subpage with a display value of cfg['doc-link-display']. --]] cfg['add-categories-blurb'] = format('add-categories-blurb') -- cfg['doc-link-display'] -- The text to display when linking to the /doc subpage. cfg['doc-link-display'] = '/doc' ---------------------------------------------------------------------------------------------------- -- Subpages link configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['subpages-blurb'] -- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a -- display value of cfg['subpages-link-display']. In the English version this blurb is simply -- the link followed by a period, and the link display provides the actual text. --]] cfg['subpages-blurb'] = format('subpages-blurb') --[[ -- cfg['subpages-link-display'] -- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'], -- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in -- the template namespace, the module namespace, or another namespace. --]] cfg['subpages-link-display'] = format('subpages-link-display') -- cfg['template-pagetype'] -- The pagetype to display for template pages. cfg['template-pagetype'] = format('template-pagetype') -- cfg['module-pagetype'] -- The pagetype to display for Lua module pages. cfg['module-pagetype'] = format('module-pagetype') -- cfg['default-pagetype'] -- The pagetype to display for pages other than templates or Lua modules. cfg['default-pagetype'] = format('default-pagetype') ---------------------------------------------------------------------------------------------------- -- Doc link configuration ---------------------------------------------------------------------------------------------------- -- cfg['doc-subpage'] -- The name of the subpage typically used for documentation pages. cfg['doc-subpage'] = 'doc' -- cfg['file-docpage-preload'] -- Preload file for documentation page in the file namespace. cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace' -- cfg['docpage-preload'] -- Preload file for template documentation pages in all namespaces. cfg['docpage-preload'] = 'Template:Documentation/preload' -- cfg['module-preload'] -- Preload file for Lua module documentation pages. cfg['module-preload'] = 'Template:Documentation/preload-module-doc' ---------------------------------------------------------------------------------------------------- -- Print version configuration ---------------------------------------------------------------------------------------------------- -- cfg['print-subpage'] -- The name of the template subpage used for print versions. cfg['print-subpage'] = 'Print' -- cfg['print-link-display'] -- The text to display when linking to the /Print subpage. cfg['print-link-display'] = '/Print' -- cfg['print-blurb'] -- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display']. cfg['print-blurb'] = format('print-blurb') -- cfg['display-print-category'] -- Set to true to enable output of cfg['print-category'] if a /Print subpage exists. -- This should be a boolean value (either true or false). cfg['display-print-category'] = true -- cfg['print-category'] -- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists. cfg['print-category'] = 'Templates with print versions' ---------------------------------------------------------------------------------------------------- -- HTML and CSS configuration ---------------------------------------------------------------------------------------------------- -- cfg['main-div-id'] -- The "id" attribute of the main HTML "div" tag. cfg['main-div-id'] = 'template-documentation' -- cfg['main-div-classes'] -- The CSS classes added to the main HTML "div" tag. cfg['main-div-class'] = 'ts-doc-doc' cfg['header-div-class'] = 'ts-doc-header' cfg['heading-div-class'] = 'ts-doc-heading' cfg['content-div-class'] = 'ts-doc-content' cfg['footer-div-class'] = 'ts-doc-footer plainlinks' cfg['sandbox-class'] = 'ts-doc-sandbox' -- cfg['start-box-linkclasses'] -- The CSS classes used for the [view][edit][history] or [create] links in the start box. cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks' -- cfg['start-box-link-id'] -- The HTML "id" attribute for the links in the start box. cfg['start-box-link-id'] = 'doc_editlinks' ---------------------------------------------------------------------------------------------------- -- Tracking category configuration ---------------------------------------------------------------------------------------------------- -- cfg['display-strange-usage-category'] -- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage -- or a /testcases subpage. This should be a boolean value (either true or false). cfg['display-strange-usage-category'] = false -- cfg['strange-usage-category'] -- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a -- /doc subpage or a /testcases subpage. cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage' --[[ ---------------------------------------------------------------------------------------------------- -- End configuration -- -- Don't edit anything below this line. ---------------------------------------------------------------------------------------------------- --]] return cfg 224f3664a83268936f1b9935eafc0055a97071ac Module:Documentation/styles.css 828 34 245 68 2023-06-06T08:51:40Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Documentation/styles.css]]: w sanitized-css text/css .ts-doc-sandbox .mbox-image { padding:.75em 0 .75em .75em; } .ts-doc-doc { clear: both; background-color: #eaf3ff; border: 1px solid #a3caff; margin-top: 1em; border-top-left-radius: 2px; border-top-right-radius: 2px; } .ts-doc-header { background-color: #c2dcff; padding: .642857em 1em .5em; border-top-left-radius: 2px; border-top-right-radius: 2px; } .ts-doc-header .ts-tlinks-tlinks { line-height: 24px; margin-left: 0; } .ts-doc-header .ts-tlinks-tlinks a.external { color: #0645ad; } .ts-doc-header .ts-tlinks-tlinks a.external:visited { color: #0b0080; } .ts-doc-header .ts-tlinks-tlinks a.external:active { color: #faa700; } .ts-doc-content { padding: .214286em 1em; } .ts-doc-content:after { content: ''; clear: both; display: block; } .ts-doc-heading { display: inline-block; padding-left: 30px; background: center left/24px 24px no-repeat; /* @noflip */ background-image: url(//upload.wikimedia.org/wikipedia/commons/f/fb/OOjs_UI_icon_puzzle-ltr.svg); height: 24px; line-height: 24px; font-size: 13px; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; } .ts-doc-content > *:first-child, .ts-doc-footer > *:first-child { margin-top: .5em; } .ts-doc-content > *:last-child, .ts-doc-footer > *:last-child { margin-bottom: .5em; } .ts-doc-footer { background-color: #eaf3ff; border: 1px solid #a3caff; padding: .214286em 1em; margin-top: .214286em; font-style: italic; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; } @media all and (min-width: 720px) { .ts-doc-header .ts-tlinks-tlinks { float: right; } } 71b09af67524324bf70d203a0a724bc74ec6c82e Template:Oldid 10 111 247 246 2023-06-06T08:51:41Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Oldid]]: w wikitext text/x-wiki <span class="plainlinks">[{{fullurl:{{{page|{{{1|Main Page}}}}}}|oldid={{{oldid|{{{2|}}}}}}}} {{{label|{{{title|{{{3|{{#if:{{{oldid|{{{2|}}}}}}|Old revision|Current version}} of {{#if:{{{page|{{{1|}}}}}}|'''{{{page|{{{1}}}}}}'''|a page}}}}}}}}}}}]</span><noinclude> {{documentation}} </noinclude> 4a42ae0cc77ec0385d4b6508c5d3f366db39ecdb Template:Endplainlist 10 112 249 248 2023-06-06T08:51:42Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Endplainlist]]: w wikitext text/x-wiki <includeonly></div></includeonly><noinclude> {{documentation|Template:Plainlist/doc}} </noinclude> d545c41582328dd4f197e2b1848c8ad7392b92e0 Template:Tag 10 40 251 80 2023-06-06T08:51:42Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tag]]: w wikitext text/x-wiki {{#if:{{{plain|}}}| |<code class="mw-highlight" style="{{#if:{{{wrap|}}}||white-space:nowrap}}"> }}{{#switch:{{{2|pair}}} |c|close = <!--nothing--> |s|single |o|open |p|pair = {{#tag:span|&lrm;&lt;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#if:{{{params|}}}|&#32;{{{params}}}}} }}{{#switch:{{{2|pair}}} |c|close = {{{content|}}} |s|single = &#32;{{#tag:span|&#47;&gt;|class="p"}} |o|open = {{#tag:span|&gt;|class="p"}}{{{content|}}} |p|pair = {{#tag:span|&gt;|class="p"}}{{{content|...}}} }}{{#switch:{{{2|pair}}} |s|single |o|open = <!--nothing--> |c|close |p|pair = {{#tag:span|&lrm;&lt;&#47;|class="p"}}{{#tag:span|{{{1|tag}}}|class="nt"}}{{#tag:span|&gt;|class="p"}} }}{{#if:{{{plain|}}}| |</code> }}<noinclude> {{Documentation}} </noinclude> 88657ad7afd7844d9681f7f08ba60c75c25800a1 Template:Sandbox other 10 24 253 48 2023-06-06T08:51:43Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Sandbox_other]]: w wikitext text/x-wiki <onlyinclude>{{#switch:{{SUBPAGENAME}}|sandbox|doc={{{1|}}}|#default={{{2|}}}}}</onlyinclude> {{documentation}} 44919af6b57ac865d8ec53eabfcb2cb9de35f157 Template:Documentation subpage 10 18 255 36 2023-06-06T08:51:43Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Documentation_subpage]]: w wikitext text/x-wiki <noinclude> <languages/> </noinclude>{{#switch:<translate></translate> | = <includeonly><!-- -->{{#if:{{IsDocSubpage|override={{{override|doc}}}|false=}} | <!--(this template has been transcluded on a /doc or /{{{override}}} page)--> </includeonly><!-- -->{{#ifeq:{{{doc-notice|show}}} |show | {{Mbox | type = notice | style = margin-bottom:1.0em; | image = [[File:OOjs UI icon book-ltr.svg|40px|alt=|link=]] | text = '''<translate><!--T:4--> This is a [[w:Wikipedia:Template documentation|documentation]] [[<tvar name=2>Special:MyLanguage/Help:Subpages</tvar>|subpage]] for <tvar name=1>{{{1|[[:{{SUBJECTSPACE}}:{{BASEPAGENAME}}]]}}}</tvar>.</translate>'''<br /><!-- -->{{#if:{{{text2|}}}{{{text1|}}} |<translate><!--T:5--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{{text2|{{{text1}}}}}}</tvar>.</translate> |<translate><!--T:10--> It contains usage information, [[<tvar name=7>Special:MyLanguage/Help:Categories</tvar>|categories]] and other content that is not part of the original <tvar name=1>{{SUBJECTSPACE}}</tvar> page.</translate> }} }} }}<!-- -->{{DEFAULTSORT:{{{defaultsort|{{PAGENAME}}}}}}}<!-- -->{{#if:{{{inhibit|}}} |<!--(don't categorize)--> | <includeonly><!-- -->{{#ifexist:{{NAMESPACE}}:{{BASEPAGENAME}} | [[Category:{{#switch:{{SUBJECTSPACE}} | Template | Project = Template | Module = Module | User = User | #default = MediaWiki }} documentation pages{{#translation:}}]] | [[Category:Documentation subpages without corresponding pages{{#translation:}}]] }}<!-- --></includeonly> }}<!-- (completing initial #ifeq: at start of template:) --><includeonly> | <!--(this template has not been transcluded on a /doc or /{{{override}}} page)--> }}<!-- --></includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Documentation subpage|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{Documentation|content= <translate> == Usage == <!--T:6--> <!--T:7--> Use this template on Template Documentation subpage (/doc). == See also == <!--T:8--> </translate> *{{tl|Documentation}} *{{tl|tl}} }} </noinclude> 0d6a10a903dbd572fffeb01aff5983d9b3abc65c Template:Template link with link off 10 113 257 256 2023-06-06T08:51:43Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link_with_link_off]]: w wikitext text/x-wiki <includeonly>{{#Invoke:Template link general|main|nowrap=yes|nolink=yes}}</includeonly><noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlf}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> b099fea5d1f36b0b4b9cb253ad3a9f4e095f6851 Template:Tlf 10 114 259 258 2023-06-06T08:51:44Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tlf]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link with link off]] {{Redirect category shell| {{R from move}} }} 52759e1d3f7c9aa4a03d0b7d4f84f4c6adf53edf Template:Selfref 10 115 261 260 2023-06-06T08:51:44Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Selfref]]: w wikitext text/x-wiki #REDIRECT [[Template:Self-reference]] {{Redirect category shell| {{R from template shortcut}} {{R from alternative spelling}} {{R from move}} }} 030c372ed4f83fa2e03a4c0ccdd4ad3cef8ec9e6 Template:FULLBASEPAGENAME 10 116 263 262 2023-06-06T08:51:45Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:FULLBASEPAGENAME]]: w wikitext text/x-wiki {{#if: {{Ns has subpages | {{#if:{{{1|}}}|{{NAMESPACE:{{{1}}}}}|{{NAMESPACE}}}} }} | {{#if: {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}} | {{#titleparts:{{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}}|-1}} | {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} }} | {{#if:{{{1|}}}|{{{1}}}|{{FULLPAGENAME}}}} }}<noinclude> {{documentation}} </noinclude> a21f32ffc20eab6d41631b3fb8af4c63e153a6c3 Template:High-use 10 117 265 264 2023-06-06T08:51:45Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:High-use]]: w wikitext text/x-wiki {{#invoke:High-use|main|1={{{1|}}}|2={{{2|}}}|info={{{info|}}}|demo={{{demo|}}}|form={{{form|}}}|expiry={{{expiry|}}}|system={{{system|}}}}}<noinclude> {{Documentation}} <!-- Add categories to the /doc subpage; interwiki links go to Wikidata, thank you! --> </noinclude> a3322d1bd47ac03df14fa2090855cff4fede9bc7 Template:TemplateData header 10 21 267 42 2023-06-06T08:51:46Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:TemplateData_header]]: w wikitext text/x-wiki <noinclude> <languages/> <onlyinclude>{{#switch:<translate></translate> |= <div class="templatedata-header"><!-- -->{{#if:{{yesno|{{{editlinks|}}}}}<!-- -->|{{#ifexpr:<!-- -->{{#if:{{{docpage|}}}<!-- -->|{{#ifeq:{{FULLPAGENAME}}|{{transclude|{{{docpage}}}}}|0|1}}<!-- -->|not{{IsDocSubpage|false=0}}<!-- -->}}<!-- -->|{{Navbar|{{{docpage|{{BASEPAGENAME}}/doc}}}|plain=1|brackets=1|style=float:{{dir|{{PAGELANGUAGE}}|left|right}};}}<!-- -->}}<!-- -->}} {{#if:{{{noheader|}}}||<translate><!--T:1--> This is the [[<tvar name=1>Special:MyLanguage/Help:TemplateData</tvar>|TemplateData]] documentation for this template used by [[<tvar name=2>Special:MyLanguage/VisualEditor</tvar>|VisualEditor]] and other tools.</translate>}} '''{{{1|{{BASEPAGENAME}}}}}''' </div><includeonly>{{#ifeq:{{SUBPAGENAME}}|sandbox|<!-- -->|{{#if:{{IsDocSubpage|false=}}<!-- -->|[[Category:TemplateData documentation{{#translation:}}]]<!-- -->|[[Category:Templates using TemplateData{{#translation:}}]]<!-- -->}}<!-- -->}}</includeonly> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:TemplateData header|noshift=1|uselang={{#if:{{pagelang}}|{{pagelang}}|{{int:lang}}}}}} }}</onlyinclude> {{Documentation|content= Inserts a brief header for the template data section. Adds the /doc subpage to [[:Category:TemplateData documentation{{#translation:}}]] and the template page to [[:Category:Templates using TemplateData{{#translation:}}]]. == Usage == {{#tag:syntaxhighlight| ==TemplateData== or ==Parameters== or ==Usage== {{((}}TemplateData header{{))}} {{^(}}templatedata{{)^}}{ ... }{{^(}}/templatedata{{)^}} |lang=html }} Use <code><nowiki>{{TemplateData header|Template name}}</nowiki></code> to display a name for the template other than the default, which is [[Help:Magic_words#Variables|<nowiki>{{BASEPAGENAME}}</nowiki>]]. <dl><dd> {{TemplateData header|Template name}} </dd></dl> Use <code><nowiki>{{TemplateData header|noheader=1}}</nowiki></code> to omit the first sentence of the header text. <dl><dd> {{TemplateData header|noheader=1}} </dd></dl> ==Parameters== {{TemplateData header/doc}} }} </noinclude> adcf50c8d3c870a44b190116c53a975926dc17d8 Template:Template parameter usage 10 118 269 268 2023-06-06T08:51:46Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_parameter_usage]]: w wikitext text/x-wiki {{#switch:{{{label|}}} |=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|C|c}}lick here] to see a monthly parameter usage report for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|this template}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}. |None|none=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report]{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}} |for|For=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{#ifeq:{{yesno-no|{{{lc}}}}}|no|P|p}}arameter usage report] for {{#if:{{{1|}}}|[[Template:{{ROOTPAGENAME:{{{1|}}}}}]]|[[Template:{{ROOTPAGENAME}}]]}}{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}}. |#default=[https://bambots.brucemyers.com/TemplateParam.php?wiki=enwiki&template={{Urlencode:{{#if:{{{1|}}}|{{ROOTPAGENAME:{{{1|}}}}}|{{ROOTPAGENAME}}}}}} {{{label|}}}]{{#ifeq:{{yesno-no|{{{based}}}}}|yes|&#32;based on {{#if:{{{1|}}}|its|this}} TemplateData}} }}<noinclude> {{documentation}} </noinclude> b9cdd1b2e409313904f041c38562a3d6221cc017 Module:High-use 828 119 271 270 2023-06-06T08:51:46Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:High-use]]: w Scribunto text/plain local p = {} -- _fetch looks at the "demo" argument. local _fetch = require('Module:Transclusion_count').fetch local yesno = require('Module:Yesno') function p.num(frame, count) if count == nil then if yesno(frame.args['fetch']) == false then if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end else count = _fetch(frame) end end -- Build output string local return_value = "" if count == nil then if frame.args[1] == "risk" then return_value = "a very large number of" else return_value = "many" end else -- Use 2 significant figures for smaller numbers and 3 for larger ones local sigfig = 2 if count >= 100000 then sigfig = 3 end -- Prepare to round to appropriate number of sigfigs local f = math.floor(math.log10(count)) - sigfig + 1 -- Round and insert "approximately" or "+" when appropriate if (frame.args[2] == "yes") or (mw.ustring.sub(frame.args[1],-1) == "+") then -- Round down return_value = string.format("%s+", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) ) * (10^(f))) ) else -- Round to nearest return_value = string.format("approximately&#x20;%s", mw.getContentLanguage():formatNum(math.floor( (count / 10^(f)) + 0.5) * (10^(f))) ) end -- Insert percentage of pages if that is likely to be >= 1% and when |no-percent= not set to yes if count and count > 250000 and not yesno (frame:getParent().args['no-percent']) then local percent = math.floor( ( (count/frame:callParserFunction('NUMBEROFPAGES', 'R') ) * 100) + 0.5) if percent >= 1 then return_value = string.format("%s&#x20;pages, or roughly %s%% of all", return_value, percent) end end end return return_value end -- Actions if there is a large (greater than or equal to 100,000) transclusion count function p.risk(frame) local return_value = "" if frame.args[1] == "risk" then return_value = "risk" else local count = _fetch(frame) if count and count >= 100000 then return_value = "risk" end end return return_value end function p.text(frame, count) -- Only show the information about how this template gets updated if someone -- is actually editing the page and maybe trying to update the count. local bot_text = (frame:preprocess("{{REVISIONID}}") == "") and "\n\n----\n'''Preview message''': Transclusion count updated automatically ([[Template:High-use/doc#Technical details|see documentation]])." or '' if count == nil then if yesno(frame.args['fetch']) == false then if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end else count = _fetch(frame) end end local title = mw.title.getCurrentTitle() if title.subpageText == "doc" or title.subpageText == "sandbox" then title = title.basePageTitle end local systemMessages = frame.args['system'] if frame.args['system'] == '' then systemMessages = nil end -- This retrieves the project URL automatically to simplify localiation. local templateCount = ('on [https://linkcount.toolforge.org/index.php?project=%s&page=%s %s pages]'):format( mw.title.getCurrentTitle():fullUrl():gsub('//(.-)/.*', '%1'), mw.uri.encode(title.fullText), p.num(frame, count)) local used_on_text = "'''This " .. (mw.title.getCurrentTitle().namespace == 828 and "Lua module" or "template") .. ' is used '; if systemMessages then used_on_text = used_on_text .. systemMessages .. ((count and count > 2000) and ("''', and " .. templateCount) or ("'''")) else used_on_text = used_on_text .. templateCount .. "'''" end local sandbox_text = ("%s's [[%s/sandbox|/sandbox]] or [[%s/testcases|/testcases]] subpages, or in your own [[%s]]. "):format( (mw.title.getCurrentTitle().namespace == 828 and "module" or "template"), title.fullText, title.fullText, mw.title.getCurrentTitle().namespace == 828 and "Module:Sandbox|module sandbox" or "Wikipedia:User pages#SUB|user subpage" ) local infoArg = frame.args["info"] ~= "" and frame.args["info"] if (systemMessages or frame.args[1] == "risk" or (count and count >= 100000) ) then local info = systemMessages and '.<br/>Changes to it can cause immediate changes to the Wikipedia user interface.' or '.' if infoArg then info = info .. "<br />" .. infoArg end sandbox_text = info .. '<br /> To avoid major disruption' .. (count and count >= 100000 and ' and server load' or '') .. ', any changes should be tested in the ' .. sandbox_text .. 'The tested changes can be added to this page in a single edit. ' else sandbox_text = (infoArg and ('.<br />' .. infoArg .. ' C') or ' and c') .. 'hanges may be widely noticed. Test changes in the ' .. sandbox_text end local discussion_text = systemMessages and 'Please discuss changes ' or 'Consider discussing changes ' if frame.args["2"] and frame.args["2"] ~= "" and frame.args["2"] ~= "yes" then discussion_text = string.format("%sat [[%s]]", discussion_text, frame.args["2"]) else discussion_text = string.format("%son the [[%s|talk page]]", discussion_text, title.talkPageTitle.fullText ) end return used_on_text .. sandbox_text .. discussion_text .. " before implementing them." .. bot_text end function p.main(frame) local count = nil if yesno(frame.args['fetch']) == false then if (frame.args[1] or '') ~= '' then count = tonumber(frame.args[1]) end else count = _fetch(frame) end local image = "[[File:Ambox warning yellow.svg|40px|alt=Warning|link=]]" local type_param = "style" local epilogue = '' if frame.args['system'] and frame.args['system'] ~= '' then image = "[[File:Ambox important.svg|40px|alt=Warning|link=]]" type_param = "content" local nocat = frame:getParent().args['nocat'] or frame.args['nocat'] local categorise = (nocat == '' or not yesno(nocat)) if categorise then epilogue = frame:preprocess('{{Sandbox other||{{#switch:{{#invoke:Effective protection level|{{#switch:{{NAMESPACE}}|File=upload|#default=edit}}|{{FULLPAGENAME}}}}|sysop|templateeditor|interfaceadmin=|#default=[[Category:Pages used in system messages needing protection]]}}}}') end elseif (frame.args[1] == "risk" or (count and count >= 100000)) then image = "[[File:Ambox warning orange.svg|40px|alt=Warning|link=]]" type_param = "content" end if frame.args["form"] == "editnotice" then return frame:expandTemplate{ title = 'editnotice', args = { ["image"] = image, ["text"] = p.text(frame, count), ["expiry"] = (frame.args["expiry"] or "") } } .. epilogue else return require('Module:Message box').main('ombox', { type = type_param, image = image, text = p.text(frame, count), expiry = (frame.args["expiry"] or "") }) .. epilogue end end return p 134551888e066954a89c109d2faa8af71a4454a4 Module:Transclusion count 828 120 273 272 2023-06-06T08:51:47Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Transclusion_count]]: w Scribunto text/plain local p = {} function p.fetch(frame) local template = nil local return_value = nil -- Use demo parameter if it exists, otherswise use current template name local namespace = mw.title.getCurrentTitle().namespace if frame.args["demo"] and frame.args["demo"] ~= "" then template = mw.ustring.gsub(frame.args["demo"],"^[Tt]emplate:","") elseif namespace == 10 then -- Template namespace template = mw.title.getCurrentTitle().text elseif namespace == 828 then -- Module namespace template = (mw.site.namespaces[828].name .. ":" .. mw.title.getCurrentTitle().text) end -- If in template or module namespace, look up count in /data if template ~= nil then namespace = mw.title.new(template, "Template").namespace if namespace == 10 or namespace == 828 then template = mw.ustring.gsub(template, "/doc$", "") -- strip /doc from end template = mw.ustring.gsub(template, "/sandbox$", "") -- strip /sandbox from end local index = mw.ustring.sub(mw.title.new(template).text,1,1) local status, data = pcall(function () return(mw.loadData('Module:Transclusion_count/data/' .. (mw.ustring.find(index, "%a") and index or "other"))) end) if status then return_value = tonumber(data[mw.ustring.gsub(template, " ", "_")]) end end end -- If database value doesn't exist, use value passed to template if return_value == nil and frame.args[1] ~= nil then local arg1=mw.ustring.match(frame.args[1], '[%d,]+') if arg1 and arg1 ~= '' then return_value = tonumber(frame:callParserFunction('formatnum', arg1, 'R')) end end return return_value end -- Tabulate this data for [[Wikipedia:Database reports/Templates transcluded on the most pages]] function p.tabulate(frame) local list = {} for i = 65, 91 do local data = mw.loadData('Module:Transclusion count/data/' .. ((i == 91) and 'other' or string.char(i))) for name, count in pairs(data) do table.insert(list, {mw.title.new(name, "Template").fullText, count}) end end table.sort(list, function(a, b) return (a[2] == b[2]) and (a[1] < b[1]) or (a[2] > b[2]) end) local lang = mw.getContentLanguage(); for i = 1, #list do list[i] = ('|-\n| %d || [[%s]] || %s\n'):format(i, list[i][1]:gsub('_', ' '), lang:formatNum(list[i][2])) end return table.concat(list) end return p 000ef6bcbf7b66e727870b0c300c4009da300513 Module:Lua banner 828 121 275 274 2023-06-06T08:51:47Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Lua_banner]]: w Scribunto text/plain -- This module implements the {{lua}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local p = {} function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args) local modules = mTableTools.compressSparseArray(args) local box = p.renderBox(modules) local trackingCategories = p.renderTrackingCategories(args, modules) return box .. trackingCategories end function p.renderBox(modules) local boxArgs = {} if #modules < 1 then boxArgs.text = '<strong class="error">Error: no modules specified</strong>' else local moduleLinks = {} for i, module in ipairs(modules) do moduleLinks[i] = string.format('[[:%s]]', module) local maybeSandbox = mw.title.new(module .. '/sandbox') if maybeSandbox.exists then moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) end end local moduleList = mList.makeList('bulleted', moduleLinks) local title = mw.title.getCurrentTitle() if title.subpageText == "doc" then title = title.basePageTitle end if title.contentModel == "Scribunto" then boxArgs.text = 'This module depends on the following other modules:' .. moduleList else boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList end end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]' return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, modules, titleObj) if yesno(args.nocat) then return '' end local cats = {} -- Error category if #modules < 1 then cats[#cats + 1] = 'Lua templates with errors' end -- Lua templates category titleObj = titleObj or mw.title.getCurrentTitle() local subpageBlacklist = { doc = true, sandbox = true, sandbox2 = true, testcases = true } if not subpageBlacklist[titleObj.subpageText] then local protCatName if titleObj.namespace == 10 then local category = args.category if not category then local categories = { ['Module:String'] = 'Templates based on the String Lua module', ['Module:Math'] = 'Templates based on the Math Lua module', ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', ['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module' } category = modules[1] and categories[modules[1]] category = category or 'Lua-based templates' end cats[#cats + 1] = category protCatName = "Templates using under-protected Lua modules" elseif titleObj.namespace == 828 then protCatName = "Modules depending on under-protected modules" end if not args.noprotcat and protCatName then local protLevels = { autoconfirmed = 1, extendedconfirmed = 2, templateeditor = 3, sysop = 4 } local currentProt if titleObj.id ~= 0 then -- id is 0 (page does not exist) if am previewing before creating a template. currentProt = titleObj.protectionLevels["edit"][1] end if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end for i, module in ipairs(modules) do if module ~= "WP:libraryUtil" then local moduleProt = mw.title.new(module).protectionLevels["edit"][1] if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end if moduleProt < currentProt then cats[#cats + 1] = protCatName break end end end end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p 03ec1b34a40121efc562c0c64a67ebbf57d56dff Template:Lua 10 122 277 276 2023-06-06T08:51:47Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Lua]]: w wikitext text/x-wiki <includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude> {{Lua|Module:Lua banner}} {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7 Template:Clc 10 123 279 278 2023-06-06T08:51:48Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Clc]]: w wikitext text/x-wiki #REDIRECT [[Template:Category link with count]] 02280e2ab57b544236e11f913e3759c5781ca9d5 Template:Category link with count 10 124 281 280 2023-06-06T08:51:48Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Category_link_with_count]]: w wikitext text/x-wiki [[:Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|<!-- -->{{#if:{{{name|}}}|{{{name}}}|Category:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}}}<!-- -->]]&nbsp;({{PAGESINCATEGORY:{{#invoke:string|replace|1={{{1}}}|2=^:?[Cc]ategory:|3=|plain=false}}|{{{2|all}}}}})<noinclude> {{Documentation}} </noinclude> f93f1540b8c157703bd6d24ae35c35bef745981d Template:Self-reference 10 125 283 282 2023-06-06T08:51:49Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Self-reference]]: w wikitext text/x-wiki {{#switch:{{{2|NONE}}} |NONE|hatnote|hat={{Hatnote|extraclasses=plainlinks selfreference noprint|1={{{1}}}}} |inline=<div class="plainlinks selfreference" style="display:inline; font-style: italic;"><!--Same style as class hatnote.-->{{{1}}}</div> |<!--Matching the empty string here for unprintworthy content is for backwards compatibility with the 2006-2008 version. Do not depend on it!-->=<div style="display:inline;" class="plainlinks selfreference noprint">{{{1}}}</div> |#default={{error|Second parameter must be <code>hatnote</code>, <code>hat</code>, or <code>inline</code>}} }}<noinclude> {{Documentation}} <!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES THE /doc SUBPAGE, AND INTERWIKIS TO WIKIDATA, THANKS --> </noinclude> 0c4a08f880070e918c3edcaa50cc493f99841e98 Template:TemplateDataHeader 10 126 285 284 2023-06-06T08:51:49Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:TemplateDataHeader]]: w wikitext text/x-wiki #REDIRECT [[Template:TemplateData header]] {{R from move}} 61e461016bcb3a0a6fc4d8aea35d590298c19630 Template:Template display 10 127 287 286 2023-06-06T08:51:49Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_display]]: w wikitext text/x-wiki <includeonly>{{#invoke:Message box|ombox|type=notice |image={{#switch:{{{1}}}|adaptive=[[File:Different devices simple.svg|65x65px|link=|alt=]]|nomobile=[[File:Handheld devices no.svg|55px|link=|alt=]]|nodesktop=[[File:Desktop devices no.svg|55px|link=|alt=]]}} |text={{#switch:{{{1}}} | adaptive = This template is [[Adaptive web design|responsive]] and <strong>displays differently in mobile and desktop view</strong>. Read the documentation for an explanation of the differences and why they exist. | nomobile = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the documentation for an explanation. | nodesktop = This template does ''not'' display in the desktop view of Wikipedia; it is <strong>mobile only</strong>. Read the documentation for an explanation. | nomobilesidebar = This template does ''not'' display in the mobile view of Wikipedia; it is <strong>desktop only</strong>. Read the [[Template:Sidebar/doc|parent documentation]] for an explanation. | vector2022 = This template does not work properly in the [[Wikipedia:Vector 2022|Vector 2022]] skin. Read the documentation for an explanation. | #default = {{{1}}} }}}}</includeonly><noinclude> {{Documentation}} </noinclude> 47cc41eacc2d2dec246f01b81111b280cec901a3 Template:Navbox suite 10 128 289 288 2023-06-06T08:51:50Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Navbox_suite]]: w wikitext text/x-wiki {{#invoke:sidebar|sidebar | width = auto | bodystyle = border-spacing:0;background:#f7f7f7;padding:2px; | title = Navbox suite | titlestyle = padding: 0.2em 0.8em; font-size: 145%; line-height: 1.2em; background-color: #ccf; | contentclass = plainlist | contentstyle = padding:0.25em;background:#fdfdfd; | content1 = *{{tl|Navbox}} *{{tl|Navbox with collapsible groups}} *{{tl|Navbox with columns}} *{{tl|Navboxes}} | navbarstyle = background:#fdfdfd;padding:0 5px }}<!-- NOTE: A template MUST support all of the parameters marked with a cross in Template:Navbox/doc in order to be Navbox suite compliant. In particular, the name, state, border, and navbar parameters are especially important. --><noinclude> {{Documentation|content= Helper template for linking between main navbox templates in their documentation. [[Category:Wikipedia-internal sidebar templates]] [[Category:Navigational boxes|Δ]]<!-- Δ for documentation ([[WP:SORTKEY]]) --> [[Category:Documentation see also templates]] }} </noinclude> 96300845706c925e4c1e1f1f511ad327cee6d0cf Template:Lua sidebar 10 129 291 290 2023-06-06T08:51:51Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Lua_sidebar]]: w wikitext text/x-wiki {{Sidebar | class = lua-sidebar | templatestyles = Template:Lua sidebar/styles.css | title = Related pages | content1 = {{plainlist}} * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|Template]] {{#if:{{#invoke:redirect|isRedirect|Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Template talk:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}} * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Template sandbox]] * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Template testcases]] * [[Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Template doc]] * [[Special:PrefixIndex/Template:{{{template|{{{title|{{BASEPAGENAME}}}}}}}}/|Template subpages]] * [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|Module]] {{#if:{{#invoke:redirect|isRedirect|Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}}}||([[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}|talk]])}} * [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/sandbox|Module sandbox]] * [[Module talk:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/testcases|Module testcases]] * [[Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/doc|Module doc]] * [[Special:PrefixIndex/Module:{{{module|{{{title|{{BASEPAGENAME}}}}}}}}/|Module subpages]] {{endplainlist}} | content2 = {{{1|}}} }}<noinclude> {{Documentation}} </noinclude> f11e49d67a400d29f6d73720fea7eb5a273ab663 Template:Lua sidebar/styles.css 10 130 293 292 2023-06-06T08:51:51Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Lua_sidebar/styles.css]]: w sanitized-css text/css .lua-sidebar { width: auto; max-width: 22em; } 9984d36eb49fae70dd00527c993784d775409a6b Template:Navbox visibility 10 131 295 294 2023-06-06T08:51:52Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Navbox_visibility]]: w wikitext text/x-wiki Templates using the classes <code>class=navbox</code> ({{tl|navbox}}) or <code>class=nomobile</code> ({{tl|sidebar}}) are not displayed on the [https://en.m.wikipedia.org/ mobile web site] of English Wikipedia. Mobile page views account for approximately 65% of all page views (90-day average {{as of|May 2023|lc=y}}).<noinclude> {{documentation}} </noinclude> 3b1f65df829fd9f96b9c4f002fba38a0fd987a6b Template:PAGENAMETDOC 10 132 297 296 2023-06-06T08:51:52Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:PAGENAMETDOC]]: w wikitext text/x-wiki {{#ifeq:{{#invoke:String|find|{{FULLPAGENAME}}|/sandbox%d*$|plain=false}}|0|{{{{#if:{{{1|}}}||FULL}}BASEPAGENAME}}|{{{{#if:{{{1|}}}||FULL}}PAGENAME}}}}<noinclude> {{Documentation|content= This template returns the current {{Tlx|FULLBASEPAGENAME}}, unless the title ends in <code>/sandbox</code> plus any number of digits, in which case it returns the {{tlx|FULLPAGENAME}}. It is primarily meant for demonstrating the sandbox version of templates in their documentation. This template takes one numbered parameter (<code>1</code>); if anything is in this parameter then it will return <code>&#123;&#123;BASEPAGENAME&#125;&#125;</code> and <code>&#123;&#123;PAGENAME&#125;&#125;</code>, which have no namespace prefix. }} [[Category:Wikipedia magic word templates]] </noinclude> ae0c3ac1a7415671c46f970d5faad2fd708640b0 Template:Navigation templates 10 133 299 298 2023-06-06T08:51:53Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Navigation_templates]]: w wikitext text/x-wiki {| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;" |+ Navigation templates comparison {{Navbar|Navigation templates|plain=1|brackets=y}} |- ! Template ! Collapsible !! Header color ! Image !! Groups !! Style (body) <br /> parameter/s |- | style="text-align: left;" | {{tl|Navbox}} | collapsible || style="background: #ccf;" | navbox | Left/right of body || Yes || Yes |- | style="text-align: left;" | {{tl|Navbox with collapsible groups}} | collapsible || style="background: #ccf;" | navbox | Left/right of body and/or in each list || Yes || Yes |- | style="text-align: left;" | {{tl|Navbox with columns}} | collapsible || style="background: #ccf;" | navbox | Left/right of columns || No || Yes |} {| class="wikitable" style="margin-left: auto; margin-right: auto; text-align: center;" |+ Collapsible attributes |- ! Type !! CSS classes !! JavaScript !! Collapses when !! Custom <br /> initial&nbsp;state !! Nesting |- | style="text-align:left;" | [[Help:Collapsing|Collapsible tables]] | mw-collapsible | Defined in [[MediaWiki:Common.js|Common.js]] | 2 or more autocollapse on page || Yes || Yes |}<noinclude> [[Category:Navigational boxes|Δ]] [[Category:Documentation shared content templates]]</noinclude> 64df85f0aa0ebaa7b3cbfa4c05af256a71c18c39 Module:Transclusion count/data/N 828 134 301 300 2023-06-06T08:51:53Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Transclusion_count/data/N]]: w Scribunto text/plain return { ["N"] = 15000, ["N.b."] = 2200, ["N/A"] = 23000, ["N/a"] = 53000, ["NA-Class"] = 14000, ["NASTRO_comment"] = 30000, ["NBA_Draft_template_list"] = 3400, ["NBA_Year"] = 5500, ["NBA_color"] = 3600, ["NBA_color_cell"] = 4300, ["NBA_color_cell2"] = 3400, ["NBA_player_statistics_legend"] = 4200, ["NBA_player_statistics_start"] = 3800, ["NBbox"] = 3400, ["NCAA_color_cell"] = 9600, ["NCAA_secondary_color_cell"] = 4100, ["NCES_District_ID"] = 2600, ["NED"] = 9600, ["NEXTYEAR"] = 7700, ["NFLAltPrimaryStyle"] = 5800, ["NFLPrimaryColor"] = 2200, ["NFLPrimaryStyle"] = 28000, ["NFLSecondaryColor"] = 19000, ["NFL_Roster_navbox_template_list"] = 2600, ["NFL_Year"] = 23000, ["NFL_predraft"] = 5800, ["NFL_predraft/check"] = 5800, ["NFL_predraft/ftin"] = 5800, ["NFLplayer"] = 2100, ["NFT"] = 6800, ["NFT_player"] = 30000, ["NGA"] = 3200, ["NGR"] = 2300, ["NHLE"] = 18000, ["NHLS_url"] = 2200, ["NLD"] = 11000, ["NLM_content"] = 2800, ["NOINDEX"] = 449000, ["NOMIS2011"] = 2300, ["NOR"] = 9400, ["NRDB_species"] = 6900, ["NRHP-PA"] = 2600, ["NRHPGoogleMapFootnote"] = 2500, ["NRHP_Focus"] = 76000, ["NRHP_color"] = 3700, ["NRHP_date_for_lists"] = 3100, ["NRHP_date_for_lists/dates"] = 3100, ["NRHP_header"] = 3300, ["NRHP_navigation_box"] = 8300, ["NRHP_row"] = 3400, ["NRHP_style"] = 70000, ["NRHP_url"] = 29000, ["NRHP_url/core"] = 31000, ["NRISref"] = 73000, ["NSWcity"] = 2100, ["NSWcity/core"] = 2100, ["NUMBEROFSECTIONS"] = 4700, ["NYCS_br"] = 2700, ["NYCS_time_2"] = 3100, ["NZL"] = 6700, ["NZ_electorate_link"] = 2300, ["Na"] = 2400, ["Nac"] = 2700, ["Namespace_detect"] = 568000, ["Namespace_detect_showall"] = 9600, ["Nastaliq"] = 10000, ["Nat_fs_end"] = 2400, ["National_Film_Awards/style"] = 2000, ["National_Heritage_List_for_England"] = 22000, ["National_Rail_style"] = 5700, ["National_Register_of_Historic_Places"] = 29000, ["National_Register_of_Historic_Places_in_Massachusetts"] = 4400, ["National_Register_of_Historic_Places_in_New_York"] = 5600, ["National_Register_of_Historic_Places_in_North_Carolina"] = 2900, ["National_Register_of_Historic_Places_in_Pennsylvania"] = 3200, ["National_Register_of_Historic_Places_in_Virginia"] = 3100, ["National_basketball_squad"] = 3300, ["National_field_hockey_squad"] = 4000, ["National_football_squad_end"] = 2900, ["National_football_squad_start/styles.css"] = 2400, ["National_rugby_union_team"] = 3600, ["National_squad"] = 41000, ["National_squad_no_numbers"] = 17000, ["Native_name"] = 16000, ["Native_name_checker"] = 80000, ["Naval"] = 2900, ["Naval/core"] = 2900, ["Navbar"] = 40000, ["Navbar-collapsible"] = 3600, ["Navbar-header"] = 15000, ["Navbar-header/styles.css"] = 15000, ["Navbox"] = 3050000, ["Navbox_GR_munic"] = 3500, ["Navbox_Musical_artist"] = 9700, ["Navbox_bottom"] = 15000, ["Navbox_decade_list"] = 11000, ["Navbox_ice_hockey"] = 3100, ["Navbox_musical_artist"] = 220000, ["Navbox_musical_artist/color"] = 220000, ["Navbox_rugby_league_squad"] = 4900, ["Navbox_season_by_team"] = 3100, ["Navbox_top"] = 15000, ["Navbox_with_collapsible_groups"] = 131000, ["Navbox_with_collapsible_sections"] = 2300, ["Navbox_with_columns"] = 24000, ["Navboxes"] = 55000, ["Navboxes_colour"] = 5300, ["Navseasoncats"] = 479000, ["Navseasoncats_with_centuries_below_decade"] = 6700, ["Navseasoncats_with_decades_below_year"] = 18000, ["Navsource"] = 2500, ["Navy"] = 19000, ["Navy/core"] = 19000, ["Nay"] = 19000, ["Nbay"] = 5500, ["Nbsp"] = 480000, ["Nbsp_to_space"] = 20000, ["Ndash"] = 20000, ["Nee"] = 9000, ["NeilBrownPlayers"] = 3100, ["New_user_bar"] = 57000, ["Newbot"] = 4200, ["Next_period"] = 21000, ["Nfly"] = 2200, ["Nihongo"] = 102000, ["Nihongo2"] = 12000, ["Nihongo_foot"] = 2600, ["No"] = 8300, ["No."] = 14000, ["No2"] = 10000, ["NoSpam"] = 3900, ["NoSpamEmail"] = 17000, ["No_col_break"] = 2300, ["No_col_break/styles.css"] = 2300, ["No_footnotes"] = 51000, ["No_ping"] = 376000, ["No_plot"] = 5700, ["No_redirect"] = 562000, ["No_spam"] = 258000, ["No_wrap"] = 2300, ["Nobold"] = 382000, ["Nobold/styles.css"] = 382000, ["Nobr"] = 4700, ["Nobreak"] = 28000, ["Nochange"] = 2400, ["Noindex"] = 4800, ["Noitalic"] = 4500, ["Noitalic/styles.css"] = 4500, ["Nom"] = 40000, ["Nominated"] = 7100, ["Non-English-language_text_category"] = 2500, ["Non-admin_closure"] = 2800, ["Non-diffusing_subcategory"] = 13000, ["Non-free_2D_art"] = 7200, ["Non-free_3D_art"] = 2500, ["Non-free_album_cover"] = 201000, ["Non-free_audio_sample"] = 8400, ["Non-free_biog-pic"] = 25000, ["Non-free_book_cover"] = 55000, ["Non-free_character"] = 2400, ["Non-free_comic"] = 11000, ["Non-free_fair_use"] = 17000, ["Non-free_fair_use_in"] = 14000, ["Non-free_film_poster"] = 24000, ["Non-free_film_screenshot"] = 5000, ["Non-free_game_cover"] = 7400, ["Non-free_game_screenshot"] = 4600, ["Non-free_historic_image"] = 16000, ["Non-free_image_data"] = 8600, ["Non-free_image_rationale"] = 9800, ["Non-free_in_US"] = 2100, ["Non-free_logo"] = 162000, ["Non-free_magazine_cover"] = 7700, ["Non-free_media"] = 729000, ["Non-free_media_data"] = 9800, ["Non-free_media_rationale"] = 11000, ["Non-free_movie_poster"] = 22000, ["Non-free_newspaper_image"] = 2000, ["Non-free_poster"] = 80000, ["Non-free_promotional"] = 8800, ["Non-free_school_logo"] = 2400, ["Non-free_seal"] = 4400, ["Non-free_symbol"] = 6100, ["Non-free_television_screenshot"] = 16000, ["Non-free_title-card"] = 5600, ["Non-free_use_rationale"] = 461000, ["Non-free_use_rationale/styles.css"] = 680000, ["Non-free_use_rationale_2"] = 211000, ["Non-free_use_rationale_album_cover"] = 134000, ["Non-free_use_rationale_book_cover"] = 19000, ["Non-free_use_rationale_logo"] = 94000, ["Non-free_use_rationale_poster"] = 51000, ["Non-free_use_rationale_title-card"] = 2700, ["Non-free_use_rationale_video_cover"] = 5800, ["Non-free_use_rationale_video_game_cover"] = 10000, ["Non-free_video_cover"] = 16000, ["Non-free_video_game_cover"] = 21000, ["Non-free_video_game_cover/platform"] = 21000, ["Non-free_video_game_screenshot"] = 10000, ["Non-free_video_game_screenshot/platform"] = 9600, ["Non-free_with_NC"] = 2700, ["Non-free_with_permission"] = 2100, ["Nonspecific"] = 2200, ["Nonumtoc"] = 2700, ["Nonumtoc/styles.css"] = 2700, ["Noping"] = 366000, ["Noprint"] = 2900, ["Noredirect"] = 8300, ["Normal"] = 5900, ["Normalwraplink"] = 3500, ["NorthAmNative"] = 2000, ["North_America_topic"] = 3500, ["Northern_Ireland_tasks"] = 19000, ["Nospam"] = 20000, ["Not-PD-US-expired-min-year"] = 26000, ["Not_a_ballot"] = 7700, ["Not_a_forum"] = 7700, ["Not_a_typo"] = 11000, ["Not_around"] = 2900, ["Not_done"] = 20000, ["Notability"] = 63000, ["Notavote"] = 2100, ["Notdone"] = 5500, ["Note"] = 25000, ["NoteFoot"] = 3900, ["NoteTag"] = 3900, ["Note_label"] = 9000, ["Notelist"] = 183000, ["Notelist-lr"] = 3500, ["Notelist-ua"] = 6700, ["Notes"] = 6500, ["Noteslist"] = 3600, ["Notice"] = 113000, ["NovelsWikiProject"] = 19000, ["Nowiki_="] = 2300, ["Nowrap"] = 835000, ["Np"] = 2900, ["Npby"] = 2500, ["Nq"] = 3700, ["Nrut"] = 3600, ["Ns"] = 2600, ["Ns0"] = 107000, ["Ns_has_subpages"] = 2170000, ["Nts"] = 20000, ["Ntsh"] = 3300, ["Number_of_defined_parameters"] = 4800, ["Number_table_sorting"] = 34000, ["Number_table_sorting_hidden"] = 3300, ["Numero"] = 3500, ["Nutshell"] = 3900, ["Nw="] = 2300, ["Module:NUMBEROFSECTIONS"] = 4700, ["Module:Namespace_detect"] = 15900000, ["Module:Namespace_detect/config"] = 17000000, ["Module:Namespace_detect/data"] = 17000000, ["Module:National_squad"] = 54000, ["Module:Native_name"] = 91000, ["Module:Navbar"] = 5420000, ["Module:Navbar/configuration"] = 5420000, ["Module:Navbar/styles.css"] = 4770000, ["Module:Navbox"] = 4430000, ["Module:Navbox/configuration"] = 4430000, ["Module:Navbox/styles.css"] = 4430000, ["Module:Navbox_ice_hockey"] = 3100, ["Module:Navbox_top_and_bottom"] = 15000, ["Module:Navbox_with_collapsible_groups"] = 139000, ["Module:Navboxes"] = 55000, ["Module:Navseasoncats"] = 479000, ["Module:Nihongo"] = 104000, ["Module:No_ping"] = 447000, ["Module:Noinclude"] = 734000, ["Module:Ns_has_subpages"] = 2170000, ["Module:Number_table_sorting"] = 37000, } 39e43b2f7d7c960b9c86edd925fdfb685468d0e6 Module:Message box/ombox.css 828 33 303 66 2023-06-06T08:51:54Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Message_box/ombox.css]]: w sanitized-css text/css /** * {{ombox}} (other pages message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.ombox { margin: 4px 10%; border-collapse: collapse; /* Default "notice" gray */ border: 1px solid #a2a9b1; background-color: #f8f9fa; box-sizing: border-box; } /* An empty narrow cell */ .ombox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .ombox th.mbox-text, .ombox td.mbox-text { border: none; /* 0.9em left/right */ padding: 0.25em 0.9em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .ombox td.mbox-image { border: none; text-align: center; /* 0.9em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.9em; } /* The right image cell */ .ombox td.mbox-imageright { border: none; text-align: center; /* 0px left, 0.9em right */ /* @noflip */ padding: 2px 0.9em 2px 0; } table.ombox-notice { /* Gray */ border-color: #a2a9b1; } table.ombox-speedy { /* Pink */ background-color: #fee7e6; } table.ombox-speedy, table.ombox-delete { /* Red */ border-color: #b32424; border-width: 2px; } table.ombox-content { /* Orange */ border-color: #f28500; } table.ombox-style { /* Yellow */ border-color: #fc3; } table.ombox-move { /* Purple */ border-color: #9932cc; } table.ombox-protection { /* Gray-gold */ border-color: #a2a9b1; border-width: 2px; } /** * {{ombox|small=1}} styles * * These ".mbox-small" classes must be placed after all other * ".ombox" classes. "html body.mediawiki .ombox" * is so they apply only to other page message boxes. * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ /* For the "small=yes" option. */ html body.mediawiki .ombox.mbox-small { clear: right; float: right; margin: 4px 0 4px 1em; box-sizing: border-box; width: 238px; font-size: 88%; line-height: 1.25em; } e2c21da9b2e5ea3a68e2f5a7432cbfd3cfce80a8 Template:Navbox/doc 10 135 305 304 2023-06-06T08:51:56Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Navbox/doc]]: w wikitext text/x-wiki {{for|vertically-aligned navigation|Template:Sidebar}} {{documentation subpage}} {{high-use|all-pages=y}} {{Template display|nomobile}} {{Lua|Module:Navbox}} {{Navbox suite}} {{Lua sidebar}} This template allows a [[Wikipedia:Navigation template|navigational template]] to be set up relatively quickly by supplying it with one or more lists of links. It comes equipped with default styles that should work for most navigational templates. Changing the default styles is possible, but not recommended. Using this template, or one of its "Navbox suite" sister templates, is highly recommended for standardization of navigational templates, and for ease of use. {{Navbox visibility}} == Usage == Please remove the parameters that are left blank. <pre style="overflow: auto;">{{Navbox | name = {{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}} | title = | listclass = hlist | state = {{{state|}}} | above = | image = | group1 = | list1 = | group2 = | list2 = | group3 = | list3 = <!-- ... --> | below = }} </pre> == Parameter list == {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | title = {{{title}}} | above = {{{above}}} | image = {{{image}}} | group1 = {{{group1}}} | list1 = {{{list1}}} | group2 = {{{group2}}} | list2 = {{{list2}}} | group3 = {{{group3}}} | list3 = {{{list3}}} | group4 = {{{group4}}} | list4 = {{{list4}}} | below = {{{below}}} <br /> See alternate navbox formats under: [[#Layout of table|''Layout of table'']] }} The navbox uses lowercase parameter names, as shown in the box (''above''). The required ''name'' and ''title'' will create a one-line box if other parameters are omitted. Notice "group1" (etc.) is optional, as are sections named "above/below". {{clear}} The basic and most common parameters are as follows (see [[#Parameter descriptions|below]] for the full list): : <code>name</code> – the name (Wikipedia location) of the template. : <code>title</code> – text in the title bar, such as: <nowiki>[[Widget stuff]]</nowiki>. : <code>listclass</code> – a CSS class for the list cells, usually <code>hlist</code> for horizontal lists. Alternatively, use bodyclass for the whole box. : <code>state</code> – controls when a navbox is expanded or collapsed. : <code>titlestyle</code> – a CSS style for the title-bar, such as: <code>background: gray;</code> : <code>groupstyle</code> – a CSS style for the group-cells, such as: <code>background: #eee;</code> : <code>above</code> – text to appear above the group/list section (could be a list of overall wikilinks). : <code>image</code> – an optional right-side image, coded as the whole image, such as: <code><nowiki>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</nowiki></code> :: Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight. : <code>imageleft</code> – an optional left-side image (code the same as the "image" parameter). : <code>group<sub>n</sub></code> – the left-side text before list-n (if group-n omitted, list-n extends to the left edge of the box, and defaults to <code>text-align:center</code> styling). : <code>list<sub>n</sub></code> – text listing wikilinks using a [[Help:List|wikilist]] format. : <code>below</code> – optional text to appear below the group/list section. == Parameter descriptions == The following is a complete list of parameters for using {{tl|Navbox}}. In most cases, the only required parameters are <code>name</code>, <code>title</code>, and <code>list1</code>, though [[Template:Navbox/doc#Child navboxes|child navboxes]] do not even require those to be set. {{tl|Navbox}} shares numerous common parameter names with its sister templates, {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}, for consistency and ease of use. Parameters marked with an asterisk (*) are common to all three master templates. === Setup parameters === ; ''name''* : The name of the template, which is needed for the "V&nbsp;• T&nbsp;• E" ("View&nbsp;• Talk&nbsp;• Edit") links to work properly on all pages where the template is used. You can enter <code><nowiki>{{subst:PAGENAME}}</nowiki></code> for this value as a shortcut. The name parameter is only mandatory if a <code>title</code> is specified, and the <code>border</code> parameter is not set, and the <code>navbar</code> parameter is not used to disable the navbar. ; ''state''* <span style="font-weight:normal;">[<code>autocollapse, collapsed, expanded, plain, off</code>]</span> :* Defaults to <code>autocollapse</code>. A navbox with <code>autocollapse</code> will start out collapsed if there are two or more collapsible elements on the same page. Otherwise, the navbox will be expanded. For the technically minded, see [[MediaWiki:Common.js]] (search for "autocollapse"). :* If set to <code>collapsed</code>, the navbox will always start out in a collapsed state. :* If set to <code>expanded</code>, the navbox will always start out in an expanded state. :* If set to <code>plain</code>, the navbox will always be expanded with no [hide] link on the right, and the title will remain centered (by using padding to offset the <small>V&nbsp;• T&nbsp;• E</small> links). :* If set to <code>off</code>, the navbox will always be expanded with no [hide] link on the right, but no padding will be used to keep the title centered. This is for advanced use only; the "plain" option should suffice for most applications where the [show]/[hide] button needs to be hidden. : To show the box when standalone (non-included) but then auto-hide contents when in an article, put "expanded" inside {{tag|noinclude|p}} tags. This setting will force the box to be visible when standalone (even when followed by other boxes), displaying "[hide]", but then it will auto-collapse the box when stacked inside an article: <pre>| state =&nbsp;</nowiki></code>{{tag|noinclude|content=expanded}}</pre> Often times, editors will want a default initial state for a navbox, which may be overridden in an article. Here is the trick to do this: :* In your intermediate template, create a parameter also named "state" as a pass-through like this: <pre><nowiki>| state = {{{state<includeonly>|your_desired_initial_state</includeonly>}}}</nowiki></pre> :* The {{tag|includeonly|o}}<code>|</code> will make the template expanded when viewing the template page by itself. :** Example 1: {{tl|Peso}} with ''autocollapse'' as the default initial state. [[Catalan peseta]] transcludes it and has only one navbox; thus, the peso navbox shows. [[Chilean peso]] has more than two navboxes; thus, the peso navbox collapses. :** Example 2: {{tl|Historical currencies of Hungary}} with ''expanded'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|expanded</includeonly>}}}</pre> All transcluding articles show the content by default, unless there is a hypothetical article that specifies <code><nowiki>{{templatename|state=collapsed}}</nowiki></code> when transcluding. :** Example 3: {{tl|Tourism}} with ''collapsed'' as the default initial state, as such: <pre>| state = {{{state<includeonly>|collapsed</includeonly>}}}</pre> All transcluding articles will show the template as collapsed by default, but the template will still be uncollapsed when displayed on its own page. :* The template {{tl|Collapsible option}} explains how to use the <code>state</code> parameter. It can be added to a {{tag|noinclude|p}} section after the template definition or to the instructions on the {{tl|documentation subpage}}. ; ''navbar''* : If set to <code>plain</code>, the <span style="font-size: 88%;">V&nbsp;• T&nbsp;• E</span> links on the left side of the titlebar will not be displayed, and padding will be automatically used to keep the title centered. Use <code>off</code> to remove the <span style="font-size: 88%;">V&nbsp;• T&nbsp;• E</span> links, but not apply padding (this is for advanced use only; the "plain" option should suffice for most applications where a navbar is not desired). It is highly recommended that one not hide the navbar, in order to make it easier for users to edit the template, and to keep a standard style across pages. ; ''border''* : ''See later section on [[#Child navboxes|using navboxes within one another]] for examples and a more complete description.'' If set to <code>child</code> or <code>subgroup</code>, then the navbox can be used as a borderless child that fits snugly in another navbox. The border is hidden and there is no padding on the sides of the table, so it fits into the ''list'' area of its parent navbox. If set to <code>none</code>, then the border is hidden and padding is removed, and the navbox may be used as a child of another container (do not use the <code>none</code> option inside of another navbox; similarly, only use the <code>child</code>/<code>subgroup</code> option inside of another navbox). If set to anything else (default), then a regular navbox is displayed with a 1px border. An alternate way to specify the border to be a subgroup style is like this (i.e. use the first unnamed parameter instead of the named ''border'' parameter): :<pre>{{Navbox|child|...}}</pre> === Cells === ; ''title''* : Text that appears centered in the top row of the table. It is usually the template's topic, i.e. a succinct description of the body contents. This should be a single line, but if a second line is needed, use <code><nowiki>{{-}}</nowiki></code> to ensure proper centering. This parameter is technically not mandatory, but using {{tl|Navbox}} is rather pointless without a title. ; ''above''* : A full-width cell displayed between the titlebar and first group/list, i.e. ''above'' the template's body (groups, lists and image). In a template without an image, ''above'' behaves in the same way as the ''list1'' parameter without the ''group1'' parameter. ; ''group<sub>n</sub>''* : (i.e. ''group1'', ''group2'', etc.) If specified, text appears in a header cell displayed to the left of ''list<sub>n</sub>''. If omitted, ''list<sub>n</sub>'' uses the full width of the table. ; ''list<sub>n</sub>''* : (i.e. ''list1'', ''list2'', etc.) The body of the template, usually a list of links. Format is inline, although the text can be entered on separate lines if the entire list is enclosed within <code><nowiki><div> </div></nowiki></code>. At least one ''list'' parameter is required; each additional ''list'' is displayed in a separate row of the table. Each ''list<sub>n</sub>'' may be preceded by a corresponding ''group<sub>n</sub>'' parameter, if provided (see below). :Entries should be separated using a [[newline]] and an [[asterisk]] (*). If instead two asterisks are used, it provides [[Nesting (computing)|nesting]] within the previous entry by enclosing the entry with brackets. Increasing the number of asterisks used increases the number of brackets around entries. ; ''image''* : An image to be displayed in a cell below the title and to the right of the body (the groups/lists). For the image to display properly, the ''list1'' parameter must be specified. The ''image'' parameter accepts standard wikicode for displaying an image, ''e.g.'': <pre>[[File:</nowiki><var>XX</var><nowiki>.jpg|80px|link=|alt=]]</pre> nb: including "|right" will produce the usual left margin to provide separation from the list items and [[Zebra striping (computer graphics)|zebra striping]]. :Note that most of such images don't comply with [[MOS:DECOR]] and should be removed at sight. A rare example of a correct usage would be [[special:permalink/995622594|this one]]: a map shows (in green) the location of a region within the state of Kazakhstan, and this is consistently implemented for [[:category:Kazakhstan region templates|all state's regions]]. ; ''imageleft''* : An image to be displayed in a cell below the title and to the left of the body (lists). For the image to display properly, the ''list1'' parameter must be specified and no groups can be specified. It accepts the same sort of parameter that ''image'' accepts. ; ''below''* : A full-width cell displayed ''below'' the template's body (groups, lists and image). In a template without an image, ''below'' behaves in the same way as the template's final ''list<sub>n</sub>'' parameter without a ''group<sub>n</sub>'' parameter. For an example of the ''below'' parameter in use, see {{oldid|Main Page|352612160|this}} version of {{tl|Lists of the provinces and territories of Canada}}. {{tl|icon}} is often used for non-article links, for example <code><nowiki>{{icon|category}} [[:Category:</nowiki>''name''<nowiki>|Category]]</nowiki></code>. === Style parameters === Styles are generally advised against, to maintain consistency among templates and pages in Wikipedia; but the option to modify styles is given. ; ''bodystyle''* : Specifies [[Cascading Style Sheets|CSS]] styles to apply to the template body. This option should be used sparingly as it can lead to visual inconsistencies. Examples: :* <code>bodystyle = background: #''nnnnnn'';</code> :* <code>bodystyle = width: ''N''&nbsp;[em/%/px or width: auto];</code> :* <code>bodystyle = float: [''left/right/none''];</code> :* <code>bodystyle = clear: [''right/left/both/none''];</code> ; ''basestyle''* : CSS styles to apply to the ''title'', ''above'', ''below'', and ''group'' cells all at once. The styles are not applied to ''list'' cells. This is convenient for easily changing the basic color of the navbox without having to repeat the style specifications for the different parts of the navbox. Example: <code>basestyle = background: lightskyblue;</code> ; ''titlestyle''* : [[Cascading Style Sheets|CSS]] styles to apply to ''title'', most often the titlebar's background color: :* <code>titlestyle = background: ''#nnnnnn'';</code> :* <code>titlestyle = background: ''name'';</code> :* <code>titlestyle = background: none;</code> — for no background color ; ''groupstyle''* : CSS styles to apply to the ''groupN'' cells. This option overrides any styles that are applied to the entire table. Examples: :* <code>groupstyle = background: #''nnnnnn'';</code> :* <code>groupstyle = text-align: [''left/center/right''];</code> :* <code>groupstyle = vertical-align: [''top/middle/bottom''];</code> ; ''group<sub>n</sub>style''* : CSS styles to apply to a specific group, in addition to any styles specified by the ''groupstyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>group3style = background: red; color: white;</code> ; ''groupwidth'' : A number and unit specifying a uniform width for the group cells, in cases where little content in the list cells may cause group cells to be too wide. No default. However, may be overridden by the ''group(n)style'' parameter. Example: <code>groupwidth = 9em</code> ; ''liststyle''* : CSS styles to apply to all lists. Overruled by the ''oddstyle'' and ''evenstyle'' parameters (if specified) hereafter. When using backgound colors in the navbox, see the [[#Intricacies|note hereafter]]. ; ''list<sub>n</sub>style''* : CSS styles to apply to a specific list, in addition to any styles specified by the ''liststyle'' parameter. This parameter should only be used when absolutely necessary in order to maintain standardization and simplicity. Example: <code>list5style = background: #ddddff;</code> ; ''listpadding''* : A number and unit specifying the padding in each ''list'' cell. The ''list'' cells come equipped with a default padding of 0.25em on the left and right, and 0 on the top and bottom. Due to complex technical reasons, simply setting "liststyle = padding: 0.5em;" (or any other padding setting) will not work. Examples: :* <code>listpadding = 0.5em 0;</code> (sets 0.5em padding for the top/bottom, and 0 padding for the left/right.) :* <code>listpadding = 0;</code> (removes all list padding.) ; ''oddstyle'' ; ''evenstyle'' : Applies to odd/even list numbers. Overrules styles defined by ''liststyle''. The default behavior is to add striped colors (white and gray) to odd/even rows, respectively, in order to improve readability. These should not be changed except in extraordinary circumstances. ; ''evenodd'' <span style="font-weight: normal;"><code>[swap, even, odd, off]</code></span> : If set to <code>swap</code>, then the automatic striping of even and odd rows is reversed. Normally, even rows get a light gray background for striping; when this parameter is used, the odd rows receive the gray striping instead of the even rows. Setting to <code>even</code> or <code>odd</code> sets all rows to have that striping color. Setting to <code>off</code> disables automatic row striping. ; ''abovestyle''* ; ''belowstyle''* : CSS styles to apply to the top cell (specified via the ''above'' parameter) and bottom cell (specified via the ''below'' parameter). Typically used to set background color or text alignment: :* <code>abovestyle = background: #''nnnnnn'';</code> :* <code>abovestyle = text-align: [''left/center/right''];</code> :* <code>belowstyle = background: #''nnnnnn'';</code> :* <code>belowstyle = text-align: [''left/center/right''];</code> ; ''imagestyle''* ; ''imageleftstyle''* : CSS styles to apply to the cells where the image/imageleft sits. These styles should only be used in exceptional circumstances, usually to fix width problems if the width of groups is set and the width of the image cell grows too large. Example: <code>imagestyle = width:5em;</code> ===== Default styles ===== The style settings listed here are those that editors using the navbox change most often. The other more complex style settings were left out of this list to keep it simple. Most styles are set in [[MediaWiki:Common.css]]. <syntaxhighlight lang="css"> bodystyle = background: #fdfdfd; width: 100%; vertical-align: middle; titlestyle = background: #ccccff; padding-left: 1em; padding-right: 1em; text-align: center; abovestyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center; belowstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: center; groupstyle = background: #ddddff; padding-left: 1em; padding-right: 1em; text-align: right; liststyle = background: transparent; text-align: left/center; oddstyle = background: transparent; evenstyle = background: #f7f7f7; </syntaxhighlight> Since ''liststyle'' and ''oddstyle'' are transparent, odd lists have the color of the ''bodystyle'', which defaults to #fdfdfd (white with a hint of gray). A list defaults to <code>text-align: left;</code> if it has a group, if not it defaults to <code>text-align: center;</code>. Since only ''bodystyle'' has a vertical-align all the others inherit its <code>vertical-align: middle;</code>. === Advanced parameters === ; ''bodyclass'' ; ''aboveclass'' ; ''groupclass'' ; ''listclass'' ; ''belowclass'' : This enables attaching a CSS class to group or list cells. The most common use for ''listclass'' is to give it the <code>hlist</code> class that will cause lists to render horizontally. All these parameters accept the <code>hlist</code> class, but if more than one parameter is used for <code>hlist</code>, use {{para|bodyclass|hlist}} instead. ; ''titlegroup'' : This puts a group in the title area, with the same default styles as ''group<sub>n</sub>''. It should be used only in exceptional circumstances (usually advanced meta-templates) and its use requires some knowledge of the internal code of {{tl|Navbox}}; you should be ready to manually set up CSS styles to get everything to work properly if you wish to use it. If you think you have an application for this parameter, it might be best to change your mind, or consult the talk page first. ; ''titlegroupstyle'' : The styles for the titlegroup cell. ; ''innerstyle'' : A very advanced parameter to be used ''only'' for advanced meta-templates employing the navbox. Internally, the navbox uses an outer table to draw the border, and then an inner table for everything else (title/above/groups/lists/below/images, etc.). The ''style''/''bodystyle'' parameter sets the style for the outer table, which the inner table inherits, but in advanced cases (meta-templates) it may be necessary to directly set the style for the inner table. This parameter provides access to that inner table so styles can be applied. Use at your own risk. ; ''nowrapitems'' : Setting <code>|nowrapitems=yes</code> applies nowrap to each line in a list item, and to any <code>above</code> or <code>below</code> item. ; ''orphan'' : Setting <code>|orphan=yes</code> in a child navbox fixes odd/even striping and removes [[:Category:Navbox orphans]]. ==== Microformats ==== ; ''bodyclass'' : This parameter is inserted into the "class" attribute for the navbox as a whole. ; ''titleclass'' : This parameter is inserted into the "class" attribute for the navbox's title caption. This template supports the addition of microformat information. This is done by adding "class" attributes to various data cells, indicating what kind of information is contained within. To flag a navbox as containing [[hCard]] information about a person, for example, add the following parameter: <pre> | bodyclass = vcard </pre> ''and'' <pre> | titleclass = fn </pre> ''or'' (for example): <pre><nowiki> | title = The books of <span class="fn">[[Iain Banks]]</span> </nowiki></pre> ...and so forth. See [[Wikipedia:WikiProject Microformats]] for more information on adding microformat information to Wikipedia, and [[microformat]] for more information on microformats in general. == Layout of table == ===Without image, above and below=== Table generated by {{tl|Navbox}} '''without''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only): {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | liststyle = background: silver; | title = {{{title}}} | group1 = {{{group1}}} | list1 = {{{list1}}} | group2 = {{{group2}}} | list2 = {{{list2}}} | list3 = {{{list3}}} ''without {{{group3}}}'' | group4 = {{{group4}}} | list4 = {{{list4}}} }} ===With image, above and below=== Table generated by {{tl|Navbox}} '''with''' ''image'', ''above'' and ''below'' parameters (gray list background color added for illustration only): {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | liststyle = background: silver; | image = {{{image}}} | title = {{{title}}} | above = {{{above}}} | group1 = {{{group1}}} | list1 = {{{list1}}} | group2 = {{{group2}}} | list2 = {{{list2}}} | list3 = {{{list3}}} ''without {{{group3}}}'' | group4 = {{{group4}}} | list4 = {{{list4}}} | below = {{{below}}} }} ===With image and without groups=== Table generated by {{tl|Navbox}} '''with''' ''image'', ''imageleft'', ''lists'', and '''without''' ''groups'', ''above'', ''below'' (gray list background color added for illustration only): {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | liststyle = background: silver; | image = {{{image}}} | imageleft = {{{imageleft}}} | title = {{{title}}} | list1 = {{{list1}}} | list2 = {{{list2}}} | list3 = {{{list3}}} | list4 = {{{list4}}} }} == Examples == <!-- Please do not encourage folks to use <div> within Navboxes as (unless handled carefully) they can negate liststyles/groupstyles/etc. settings. --> === No image === <syntaxhighlight lang="wikitext" style="overflow: auto;"> {{Navbox | name = Navbox/doc | title = [[MSC Malaysia]] | listclass = hlist | group1 = Centre | list1 = * [[Cyberjaya]] | group2 = Area | list2 = * [[Klang Valley]] | group3 = Major landmarks | list3 = * [[Petronas Twin Towers]] * [[Kuala Lumpur Tower]] * [[Kuala Lumpur Sentral]] * [[Technology Park Malaysia]] * [[Putrajaya]] * [[Cyberjaya]] * [[Kuala Lumpur International Airport]] | group4 = Infrastructure | list4 = * [[Express Rail Link]] * [[KL-KLIA Dedicated Expressway]] | group5 = Prime applications | list5 = * [[E-Government]] * [[MyKad]] }} </syntaxhighlight> {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | title = [[MSC Malaysia]] | listclass = hlist | group1 = Centre | list1 = * [[Cyberjaya]] | group2 = Area | list2 = * [[Klang Valley]] | group3 = Major landmarks | list3 = * [[Petronas Twin Towers]] * [[Kuala Lumpur Tower]] * [[Kuala Lumpur Sentral]] * [[Technology Park Malaysia]] * [[Putrajaya]] * [[Cyberjaya]] * [[Kuala Lumpur International Airport]] | group4 = Infrastructure | list4 = * [[Express Rail Link]] * [[KL-KLIA Dedicated Expressway]] | group5 = Prime applications | list5 = * [[E-Government]] * [[MyKad]] }} == Child navboxes == {{Selfref|For additional examples, see the [[Template:Navbox/testcases|Navbox testcases page]].}} It is possible to place multiple navboxes within a single border by using "child" as the first parameter, or by setting the ''border'' parameter. The basic code for doing this is as follows (which adds a subgroup for the first group/list area): <pre style="overflow: auto;"> {{Navbox | name = {{subst:PAGENAME}} | title = Title | group1 = [optional] | list1 = {{Navbox|child ...child navbox parameters... }} ... }} </pre> === Subgroups example === This example shows two subgroups created using <code>child</code> as the first unnamed parameter. The striping is alternated automatically. To remove the striping altogether, you can set <code>liststyle = background:transparent;</code> in each of the navboxes. {{{{PAGENAMETDOC}} | name = Navbox/doc | state = uncollapsed | title = Multiple subgroup example | above = Above | below = Below | group1 = Group1 | list1 = List1 | group2 = Group2 | list2 = {{{{PAGENAMETDOC}}|child | group1 = Group2.1 | list1 = List1 | group2 = Group2.2 | list2 = List2 | group3 = Group2.3 | list3 = List3 }} | group3 = Group3 | list3 = List3 | group4 = Group4 | list4 = {{{{PAGENAMETDOC}}|child | group1 = Group4.1 | list1 = List1 | group2 = Group4.2 | list2 = List2 | group3 = Group4.3 | list3 = List3 }} }} === Multiple show/hides in a single container === {{main|Template:Navbox with collapsible groups}} The example below is generated using a regular navbox for the main container, then its list1, list2, and list3 parameters each contain another navbox, with <code>1 = child</code> set. The view (v), talk (t), edit (e) navbar links are hidden using <code>navbar = plain</code> for each of them, or could be suppressed by just leaving out the ''name'' parameter (child navboxes do not require the name parameter to be set, unlike regular navboxes). {{{{PAGENAMETDOC}} | name = Navbox/doc | title = [[French colonial empire|Former French overseas empire]] | state = uncollapsed | list1 = {{{{PAGENAMETDOC}}|child | navbar = plain | title = [[French colonial empire|Former French colonies]] in [[Africa]] and the [[Indian Ocean]] | listclass = hlist | group1 = [[Mahgreb]] | list1 = * [[French rule in Algeria|Algeria]] * [[French Morocco|Morocco]] <small>([[Arguin|Arguin Island]])</small> * [[History of Tunisia|Tunisia]] | group2 = [[French West Africa]] | list2 = * [[History of Côte d'Ivoire#French Period|Côte d'Ivoire]] * [[French Dahomey|Dahomey]] * [[French Sudan]] * [[French Guinea|Guinea]] * [[History of Mauritania#French colonization and post-colonial history|Mauritania]] * [[History of Niger#Colonization|Niger]] * [[History of Senegal|Senegal]] * [[French Upper Volta|Upper Volta]] * [[French Togoland]] * [[James Island (The Gambia)|James Island]] | group3 = [[French Equatorial Africa]] | list3 = * [[Colonial Chad|Chad]] * [[History of Gabon|Gabon]] * [[History of the Republic of the Congo|Middle Congo]] * [[Oubangui-Chari]] | group4 = [[Comoros]] | list4 = * [[Anjouan]] * [[Grande Comore]] * [[Mohéli]] * [[History of Djibouti#French Interest|French Somaliland (Djibouti)]] * [[History of Madagascar#French control|Madagascar]] * [[Mauritius|Ile de France]] * [[Seychelles]] }} | list2 = {{{{PAGENAMETDOC}}|child | navbar = plain | title = [[French colonial empire|Former French colonies]] in the [[Americas]] | listclass = hlist | list1 = * [[New France]]{{spaces|2}}<small>([[Acadia]], [[Louisiana (New France)|Louisiana]], [[Canada, New France|Canada]], [[Newfoundland (island)|Terre Neuve]]) 1655–1763 </small> | list2 = * [[Inini]] * [[Berbice]] * [[Saint-Domingue]] * <small>[[Haiti]]</small> * [[Tobago]] * [[History of the British Virgin Islands|Virgin Islands]] * [[France Antarctique]] * [[France Équinoxiale]] | below = [[French West India Company]] }} | list3 = {{{{PAGENAMETDOC}}|child | navbar = plain | title = [[French colonial empire|Former French colonies]] in [[Asia]] and [[Oceania]] | listclass = hlist | group1 = [[French India]] | list1 = * [[Chandernagor]] * [[Coromandel Coast]] * [[History of Chennai|Madras]] * [[Mahé, India|Mahé]] * [[History of Pondicherry|Pondichéry]] * [[Karaikal]] * [[Yanam (India)|Yanaon]] | group2 = [[French Indochina]] | list2 = * [[Colonial Cambodia|Cambodia]] * [[History of Laos to 1945#French Laos|Laos]] * [[French Indochina|Vietnam]] <small>([[Annam (French colony)|Annam]], [[Cochinchina]], [[Tonkin]])</small> | group3 = Other Asian | list3 = * [[Alawite State|Alaouites]] * [[Republic of Hatay|Alexandretta-Hatay]] * [[Sri Lanka|Ceylon]] * [[Kwangchowan]] | group4 = [[Oceania]] | list4 = * [[New Hebrides]] ** [[History of Vanuatu|Vanuatu]] | below = [[French East India Company]] }} }} == Relationship with other Navbox templates == This navbox template works in conjunction with two other templates: {{tl|Navbox with columns}} and {{tl|Navbox with collapsible groups}}. All three of these templates share common parameters for consistency and ease of use (such parameters are marked with an asterisk (*) in the [[#Parameter descriptions|parameter descriptions]] list hereinbefore). Most importantly, each template can be used as a child of one another (by using the {{para|border|child}} parameter, or by specifying the first unnamed parameter to be <code>child</code>. For example: <code><nowiki>{{Navbox|child ...}}</nowiki></code>, <code><nowiki>{{Navbox with columns|child ...}}</nowiki></code> or <code><nowiki>{{Navbox with collapsible groups|child ...}}</nowiki></code>.) == Technical details == * The {{navbar|1=:{{FULLPAGENAME}}|mini=on}} links are produced by [[Template:Navbar]]. If you have a question about them, it is probably best to ask at [[Template talk:Navbar]]. * The 2px wide border between groups and lists is drawn using the border-left property of the list cell. Thus, if you wish to change the background color of the template (for example <code>bodystyle = background:purple;</code>), then you'll need to make the border-left-color match the background color (i.e. <code>liststyle = border-left-color: purple;</code>). If you wish to have a border around each list cell, then the 2px border between the list cells and group cells will disappear; you'll have to come up with your own solution. * Adjacent navboxes have only a 1 pixel border between them. If you set the top or bottom margin of <code>style/bodystyle</code>, then this will not work. * The default margin-left and margin-right of the outer navbox table are set to "auto;". If you wish to use navbox as a float, you need to manually set the margin-left and margin-right values, because the auto margins interfere with the float option. For example, add the following code to use the navbox as a float: ** <code>bodystyle = width: 22em; float: right; margin-left: 1em; margin-right: 0;</code> === Copying to other projects or wikis === If you are trying to copy {{tlf|Navbox}} to your local wiki, there are several other things that must be installed or copied over as well: * The [[mw:Extension:Scribunto|Scribunto]] and [[:mw:Extension:TemplateStyles|TemplateStyles]] extensions must be installed. * [[Module:Navbox]] and its module and TemplateStyles dependencies, listed in the above two links * Optionally, the <code>Add support to mw-collapsible for autocollapse, innercollapse and outercollapse</code> script from [[MediaWiki:Common.js]] may be copied, if autocollapsing is desired. == TemplateData == {{TemplateDataHeader}} <templatedata> { "params": { "state": { "label": "State", "description": "Controls when a navbox is expanded or collapsed", "example": "autocollapse", "suggestedvalues": [ "autocollapse", "collapsed", "expanded", "plain", "off" ], "default": "autocollapse", "suggested": true }, "title": { "label": "Title", "description": "Text in the title bar; centered in the top row of the table. Usually the template's topic.", "example": "[[Widget stuff]]", "suggested": true }, "above": { "label": "Above", "description": "Full-width cell displayed between the titlebar and first group/list, i.e. above the template's body (groups, lists and image)", "type": "string", "suggested": true }, "image": { "label": "Image", "description": "Image to be displayed in a cell below the title and to the right of the body", "example": "[[File:XX.jpg | 80px | link= | alt= ]]", "type": "wiki-file-name", "suggested": true }, "group1": { "label": "Group 1", "description": "If specified, text appears in a header cell displayed to the left of list 1. If omitted, list 1 uses the full width of the table.", "suggested": true }, "list1": { "label": "List 1", "description": "Body of the template; usually a list of links. Format is inline. At least one list parameter is required; each additional list is displayed in a separate row of the table. Each listn may be preceded by a corresponding groupn parameter.\nEntries should be separated using a newline and an asterisk. If two asterisks are used, it provides nesting within the previous entry with brackets.", "required": true, "suggested": true }, "group2": { "suggested": true }, "list2": { "suggested": true }, "list3": { "suggested": true }, "group3": { "suggested": true }, "group4": {}, "list4": {}, "below": { "label": "Below", "description": "Full-width cell displayed below the template's body.", "suggested": true }, "imageleft": { "label": "Image left", "description": "Image to be displayed in a cell below the title and to the left of the body. For the image to display properly, list1 parameter must be specified and no groups can be specified.", "example": "[[File:XX.jpg | 80px | link= | alt= ]]", "type": "wiki-file-name" }, "name": { "label": "Name", "description": "The name of the template. Needed for \"View • Talk • Edit\" links to work properly.", "type": "string", "default": "{{subst:PAGENAME}}{{subst:void|Don't change anything on this line. It will change itself when you save.}}", "suggested": true }, "listclass": { "label": "List class", "description": "CSS class for the list cells, usually hlist for horizontal lists. Alternatively, use bodyclass for the whole box.", "example": "hlist", "type": "string" }, "navbar": { "label": "Navbar status", "example": "plain, off", "type": "string" }, "border": { "label": "Border status", "example": "child, subgroup, none", "type": "string" }, "bodystyle": {}, "basestyle": {}, "titlestyle": {}, "groupstyle": {}, "group1style": {}, "groupwidth": {}, "liststyle": {}, "list1style": {}, "listpadding": {}, "oddstyle": {}, "evenstyle": {}, "evenodd": { "suggestedvalues": [ "swap", "even", "odd", "off" ] }, "abovestyle": {}, "belowstyle": {}, "imagestyle": {}, "imageleftstyle": {} }, "description": "Creates a navigational box for links to other pages. \nDoes not display in mobile.", "paramOrder": [ "name", "title", "group1", "list1", "listclass", "state", "above", "below", "image", "group2", "list2", "group3", "list3", "group4", "list4", "imageleft", "navbar", "border", "bodystyle", "basestyle", "titlestyle", "groupstyle", "liststyle", "group1style", "list1style", "groupwidth", "listpadding", "oddstyle", "evenstyle", "evenodd", "abovestyle", "belowstyle", "imagestyle", "imageleftstyle" ] } </templatedata> == See also == * {{tl|Navboxes}} — groups several navigation boxes together. * {{tl|Nobold}} — To display text at normal font-weight within a context where the default font-weight is bold, e.g. header cells in tables. * {{tl|Sidebar}} — Vertically-aligned navigation templates. * [[Template:Navbox/testcases]] — For additional examples of template code. * [[Wikipedia:Line-break handling]] — The how-to guide about how to handle word wraps (line breaks) on Wikipedia, such as the wrapping of the link lists used in navboxes. * [[Wikipedia:Template documentation]] — Guideline to creating the accompanying documentation * {{tl|Nowrap begin}}, {{tl|·}} and {{tl|•}} are '''deprecated''' in favor of the <code>hlist</code> class for formatting lists. See [[Template:Flatlist#Technical details|Flatlist]] for a technical explanation of how <code>hlist</code> works. === Tracking categories === * {{clc|Navbox orphans}} * {{clc|Navigational boxes without horizontal lists}} * {{clc|Navboxes using background colours}} * {{clc|Potentially illegible navboxes}} * {{clc|Navboxes using borders}} {{Navigation templates}} <includeonly>{{sandbox other|| <!-- Add categories below this line, and interwikis at Wikidata --> [[Category:Navigational boxes| ]] [[Category:Templates generating microformats]] [[Category:Templates that are not mobile friendly]] [[Category:Wikipedia metatemplates]] [[Category:Collapse templates]] }}</includeonly> 9063bd1d64f66910446323fd0f80c3a65eea6e20 Template:Plainlist/styles.css 10 39 307 78 2023-06-06T08:51:56Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Plainlist/styles.css]]: w sanitized-css text/css /** * Unbulleted lists */ .plainlist ul { line-height: inherit; list-style: none none; margin: 0; } .plainlist ul li { margin-bottom: 0; } 7243fd4329145928d2b4b02fc42513ab65934318 Template:Hlist/styles.css 10 136 309 308 2023-06-06T08:51:57Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Hlist/styles.css]]: w sanitized-css text/css /* {{pp-protected|reason=match parent|small=yes}} */ /* * hlist styles are defined in core and Minerva and differ in Minerva. The * current definitions here (2023-01-01) are sufficient to override Minerva * without use of the hlist-separated class. The most problematic styles were * related to margin, padding, and the bullet. Check files listed at * [[MediaWiki talk:Common.css/to do#hlist-separated]] */ /* * TODO: When the majority of readership supports it (or some beautiful world * in which grade C support is above the minimum threshold), use :is() */ .hlist dl, .hlist ol, .hlist ul { margin: 0; padding: 0; } /* Display list items inline */ .hlist dd, .hlist dt, .hlist li { /* * don't trust the note that says margin doesn't work with inline * removing margin: 0 makes dds have margins again * We also want to reset margin-right in Minerva */ margin: 0; display: inline; } /* Display requested top-level lists inline */ .hlist.inline, .hlist.inline dl, .hlist.inline ol, .hlist.inline ul, /* Display nested lists inline */ .hlist dl dl, .hlist dl ol, .hlist dl ul, .hlist ol dl, .hlist ol ol, .hlist ol ul, .hlist ul dl, .hlist ul ol, .hlist ul ul { display: inline; } /* Hide empty list items */ .hlist .mw-empty-li { display: none; } /* TODO: :not() can maybe be used here to remove the later rule. naive test * seems to work. more testing needed. like so: *.hlist dt:not(:last-child)::after { * content: ": "; *} *.hlist dd:not(:last-child)::after, *.hlist li:not(:last-child)::after { * content: " · "; * font-weight: bold; *} */ /* Generate interpuncts */ .hlist dt::after { content: ": "; } .hlist dd::after, .hlist li::after { content: " · "; font-weight: bold; } .hlist dd:last-child::after, .hlist dt:last-child::after, .hlist li:last-child::after { content: none; } /* Add parentheses around nested lists */ .hlist dd dd:first-child::before, .hlist dd dt:first-child::before, .hlist dd li:first-child::before, .hlist dt dd:first-child::before, .hlist dt dt:first-child::before, .hlist dt li:first-child::before, .hlist li dd:first-child::before, .hlist li dt:first-child::before, .hlist li li:first-child::before { content: " ("; font-weight: normal; } .hlist dd dd:last-child::after, .hlist dd dt:last-child::after, .hlist dd li:last-child::after, .hlist dt dd:last-child::after, .hlist dt dt:last-child::after, .hlist dt li:last-child::after, .hlist li dd:last-child::after, .hlist li dt:last-child::after, .hlist li li:last-child::after { content: ")"; font-weight: normal; } /* Put ordinals in front of ordered list items */ .hlist ol { counter-reset: listitem; } .hlist ol > li { counter-increment: listitem; } .hlist ol > li::before { content: " " counter(listitem) "\a0"; } .hlist dd ol > li:first-child::before, .hlist dt ol > li:first-child::before, .hlist li ol > li:first-child::before { content: " (" counter(listitem) "\a0"; } 8c9dd9c9c00f30eead17fe10f51d183333e81f33 Template:Dated maintenance category (articles) 10 137 311 310 2023-06-06T08:51:58Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Dated_maintenance_category_(articles)]]: w wikitext text/x-wiki {{Dated maintenance category |onlyarticles=yes |1={{{1|}}} |2={{{2|}}} |3={{{3|}}} |4={{{4|}}} |5={{{5|}}} }}<noinclude> {{documentation|Template:Dated maintenance category/doc}} </noinclude> 6bbc57c75cc28708a0e71dd658224d5945d80d68 Template:Kns characters 10 138 312 2023-06-06T08:57:04Z Otonashi Ayana 2 Created page with "{{Navbox | name = Characters kns | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Fac..." wikitext text/x-wiki {{Navbox | name = Characters kns | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Faculty | list3 = * [[Tokio Saeki]] * [[Nene Akazaki]] * [[Tatsuhiko Kusaka]] | group4 = Hospital Staff | list4 = * [[Yasutada Kuchiki]] * [[Koharu Yamanouchi]] * [[Naoki Murase]] * [[Tamaki Saito]] | list5 = * [[Kyoko Hazuki]] * [[Hatsune Amemiya]] * [[Natsume Takashiro]] * [[Kazuna Takashiro]] * [[Yukiko Mamiya]] * [[Shinzo Mamiya]] * [[Stella]] * [[Chizuru Kuchiki]] * [[Fumiya Kuchiki]] * [[Shin Katsuragi]] }} a2c019756064994593e82f0c338638cb1eae9b22 317 312 2023-06-06T09:08:31Z Otonashi Ayana 2 Otonashi Ayana moved page [[Template:Characters kns]] to [[Template:Kns characters]] without leaving a redirect wikitext text/x-wiki {{Navbox | name = Characters kns | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Faculty | list3 = * [[Tokio Saeki]] * [[Nene Akazaki]] * [[Tatsuhiko Kusaka]] | group4 = Hospital Staff | list4 = * [[Yasutada Kuchiki]] * [[Koharu Yamanouchi]] * [[Naoki Murase]] * [[Tamaki Saito]] | list5 = * [[Kyoko Hazuki]] * [[Hatsune Amemiya]] * [[Natsume Takashiro]] * [[Kazuna Takashiro]] * [[Yukiko Mamiya]] * [[Shinzo Mamiya]] * [[Stella]] * [[Chizuru Kuchiki]] * [[Fumiya Kuchiki]] * [[Shin Katsuragi]] }} a2c019756064994593e82f0c338638cb1eae9b22 318 317 2023-06-06T09:08:53Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Faculty | list3 = * [[Tokio Saeki]] * [[Nene Akazaki]] * [[Tatsuhiko Kusaka]] | group4 = Hospital Staff | list4 = * [[Yasutada Kuchiki]] * [[Koharu Yamanouchi]] * [[Naoki Murase]] * [[Tamaki Saito]] | list5 = * [[Kyoko Hazuki]] * [[Hatsune Amemiya]] * [[Natsume Takashiro]] * [[Kazuna Takashiro]] * [[Yukiko Mamiya]] * [[Shinzo Mamiya]] * [[Stella]] * [[Chizuru Kuchiki]] * [[Fumiya Kuchiki]] * [[Shin Katsuragi]] }} 4615feb484b19229ab65ba521e17b75abf523503 320 318 2023-06-06T09:11:49Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Faculty | list3 = * [[Tokio Saeki]] * [[Nene Akazaki]] * [[Tatsuhiko Kusaka]] | group4 = Hospital Staff | list4 = * [[Yasutada Kuchiki]] * [[Koharu Yamanouchi]] * [[Naoki Murase]] * [[Tamaki Saito]] | list5 = * [[Kyoko Hazuki]] * [[Hatsune Amemiya]] * [[Natsume Takashiro]] * [[Kazuna Takashiro]] * [[Yukiko Mamiya]] * [[Shinzo Mamiya]] * [[Stella]] * [[Chizuru Kuchiki]] * [[Fumiya Kuchiki]] * [[Shin Katsuragi]] }} [[Category:Kara no Shōjo]] 54e909999120fcdf9fc79fac4ab1aab443788997 321 320 2023-06-06T09:12:29Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Faculty | list3 = * [[Tokio Saeki]] * [[Nene Akazaki]] * [[Tatsuhiko Kusaka]] | group4 = Hospital Staff | list4 = * [[Yasutada Kuchiki]] * [[Koharu Yamanouchi]] * [[Naoki Murase]] * [[Tamaki Saito]] | list5 = * [[Kyoko Hazuki]] * [[Hatsune Amemiya]] * [[Natsume Takashiro]] * [[Kazuna Takashiro]] * [[Yukiko Mamiya]] * [[Shinzo Mamiya]] * [[Stella]] * [[Chizuru Kuchiki]] * [[Fumiya Kuchiki]] * [[Shin Katsuragi]] }} <includeonly>[[Category:Kara no Shōjo]]</includeonly> 921184f23105967edb9e76572cfb63d6bbff1da3 322 321 2023-06-06T09:13:45Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * [[Reiji Tokisaka]] * [[Uozumi Kyozo]] * [[Shugo Takashiro]] * [[Ryoichi Yaginuma]] | group2 = Students | list2 = * [[Yukari Tokisaka]] * [[Toko Kuchiki]] * [[Toko Mizuhara]] * [[Tsuzuriko Yosomiya]] * [[Orihime Tsukishima]] * [[Ayumu Sato]] * [[Yui Nishizono]] * [[Kei Koizumi]] * [[Yumi Takagawa]] | group3 = Faculty | list3 = * [[Tokio Saeki]] * [[Nene Akazaki]] * [[Tatsuhiko Kusaka]] | group4 = Hospital Staff | list4 = * [[Yasutada Kuchiki]] * [[Koharu Yamanouchi]] * [[Naoki Murase]] * [[Tamaki Saito]] | list5 = * [[Kyoko Hazuki]] * [[Hatsune Amemiya]] * [[Natsume Takashiro]] * [[Kazuna Takashiro]] * [[Yukiko Mamiya]] * [[Shinzo Mamiya]] * [[Stella]] * [[Chizuru Kuchiki]] * [[Fumiya Kuchiki]] * [[Shin Katsuragi]] }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> 021d62313a6765a0fe5cfde4b92470ee07e1bb77 Template:Infobox character 10 2 313 86 2023-06-06T08:59:00Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> <pre> {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> 20b530ca6ad53f9d550d34cf704cc5ee81b4297d 314 313 2023-06-06T09:05:03Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> <pre> {{infobox character | name = {{PAGENAME}} | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> b0087bbca8c030db9129e843cbaaf9d27051b9bf Reiji Tokisaka 0 42 315 87 2023-06-06T09:06:35Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} 1a1a6bb58a0930cc6e665df47dca2dcff390bbfd 316 315 2023-06-06T09:08:09Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} {{characters kns}} 7e56a8d8e021dc939e4fc5dce56110c0d05c52c0 319 316 2023-06-06T09:08:57Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} {{kns characters}} 7cf959cfc7fc53802c4a20f7e1033a795331b9a0 Category:Kara no Shōjo 14 139 323 2023-06-06T09:13:50Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Category:Characters 14 140 324 2023-06-06T09:14:16Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Shugo Takashiro 0 62 325 124 2023-06-06T09:14:31Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = {{PAGENAME}} | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * {{spoiler|[[Kazuna Kozuki]] (love interest)}} * [[Kazuna Takashiro]] (wife) }} }} {{kns characters}} 6cb0c5a29446e7fd3b56f548ed0be1fb7272a688 326 325 2023-06-06T09:15:14Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * {{spoiler|[[Kazuna Kozuki]] (love interest)}} * [[Kazuna Takashiro]] (wife) }} }} {{kns characters}} c41e65daf59aa23d82db02fc612bf3d9dd5e48b6 Template:Nowrap 10 141 328 327 2023-06-06T09:16:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Nowrap]]: w wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> 5d0dc6b6d89b37f4356242404f46138a4017f015 Template:Tlx 10 35 330 70 2023-06-06T09:16:24Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tlx]]: w wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Mono/styles.css"/><!-- -->{{#if:{{yesno|{{{nowrap|}}}}}<!-- -->|<templatestyles src="Template:Nowrap/styles.css"/><!-- -->}}<span class=" monospaced {{#if:{{yesno|{{{nowrap|}}}}}|nowrap}} "><!-- -->{{((}}<!-- --><noinclude>[[Template:Tlx|tlx]]</noinclude><!-- --><includeonly>[[{{#if:{{{SISTER|}}}|{{{SISTER}}}Template|{{ns:10}}}}:{{{1}}}|{{{1}}}]]</includeonly><!-- -->{{#if:{{{2|}}}|{{!}}{{{2}}}}}<!-- -->{{#if:{{{3|}}}|{{!}}{{{3}}}}}<!-- -->{{#if:{{{4|}}}|{{!}}{{{4}}}}}<!-- -->{{#if:{{{5|}}}|{{!}}{{{5}}}}}<!-- -->{{#if:{{{6|}}}|{{!}}{{{6}}}}}<!-- -->{{#if:{{{7|}}}|{{!}}{{{7}}}}}<!-- -->{{#if:{{{8|}}}|{{!}}''...''}}<!-- -->{{))}}<!-- --></span><!-- --></onlyinclude> {{documentation}} 25c4c72191d3dad2c3476ae6092c6c17ee3034d8 Template:Template link expanded 10 142 332 331 2023-06-06T09:16:25Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link_expanded]]: w wikitext text/x-wiki {{#Invoke:Template link general|main|code=on}}<noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlx}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 6c99696fee02f1da368ed20d2504e19bc15b1c13 Template:Distinguish 10 143 334 333 2023-06-06T09:16:26Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Distinguish]]: w wikitext text/x-wiki {{#invoke:Distinguish|distinguish}}<noinclude><!-- splitting these lines causes {{Documentation}} template to terminate green shading when Distinguish is used in /doc pages. --> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis to Wikidata, not here! --> </noinclude> f949a4cbfd6eb0ab77b832e69059a40a964b1fd8 Module:Distinguish 828 144 336 335 2023-06-06T09:16:27Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Distinguish]]: w Scribunto text/plain local mHatnote = require('Module:Hatnote') local mHatlist = require('Module:Hatnote list') local mArguments --initialize lazily local mTableTools --initialize lazily local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local p = {} function p.distinguish(frame) mArguments = require('Module:Arguments') mTableTools = require('Module:TableTools') local args = mArguments.getArgs(frame) local selfref = args.selfref local text = args.text args = mTableTools.compressSparseArray(args) return p._distinguish(args, text, selfref) end function p._distinguish(args, text, selfref) checkType("_distinguish", 1, args, 'table') if #args == 0 and not text then return '' end local text = string.format( 'Not to be confused with %s.', text or mHatlist.orList(args, true) ) hnOptions = {selfref = selfref} return mHatnote._hatnote(text, hnOptions) end return p 0364d14af01fc656ad1d898c5036fbd12a7ca938 Template:Further 10 145 338 337 2023-06-06T09:16:30Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Further]]: w wikitext text/x-wiki <includeonly>{{#invoke:labelled list hatnote|labelledList|Further information{{#if:{{{topic|}}}|&#32;on {{{topic|}}}}}}}</includeonly><noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> dd29c6dfb3894a2dc3f20144a654b7012c9a9214 Template:Ombox 10 146 340 339 2023-06-06T09:16:31Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Ombox]]: w wikitext text/x-wiki {{#invoke:Message box|ombox}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 0e54065432d540737b9e56c4e3a8e7f74d4534ea Template:Em 10 147 342 341 2023-06-06T09:16:31Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Em]]: w wikitext text/x-wiki <em {{#if:{{{role|}}}|role="{{{role}}}"}} {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</em><noinclude> {{documentation}} <!-- Add categories to the /doc subpage, interwikis to Wikidata, not here --> </noinclude> e2fac6fb507a0dd72c4e79d02403049c7d857c8d Template:Section link 10 148 344 343 2023-06-06T09:16:32Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Section_link]]: w wikitext text/x-wiki {{#invoke:Section link|main}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> 8d047e5845f8a9b74a4655b5dd79ca7595a8f88b Module:Section link 828 149 346 345 2023-06-06T09:16:32Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Section_link]]: w Scribunto text/plain -- This module implements {{section link}}. require('strict'); local checkType = require('libraryUtil').checkType local p = {} local function makeSectionLink(page, section, display) display = display or section page = page or '' -- MediaWiki doesn't allow these in `page`, so only need to do for `section` if type(section) == 'string' then section = string.gsub(section, "{", "&#x7B;") section = string.gsub(section, "}", "&#x7D;") end return string.format('[[%s#%s|%s]]', page, section, display) end local function normalizeTitle(title) title = mw.ustring.gsub(mw.ustring.gsub(title, "'", ""), '"', '') title = mw.ustring.gsub(title, "%b<>", "") return mw.title.new(title).prefixedText end function p._main(page, sections, options, title) -- Validate input. checkType('_main', 1, page, 'string', true) checkType('_main', 3, options, 'table', true) if sections == nil then sections = {} elseif type(sections) == 'string' then sections = {sections} elseif type(sections) ~= 'table' then error(string.format( "type error in argument #2 to '_main' " .. "(string, table or nil expected, got %s)", type(sections) ), 2) end options = options or {} title = title or mw.title.getCurrentTitle() -- Deal with blank page names elegantly if page and not page:find('%S') then page = nil options.nopage = true end -- Make the link(s). local isShowingPage = not options.nopage if #sections <= 1 then local linkPage = page or '' local section = sections[1] or 'Notes' local display = '§&nbsp;' .. section if isShowingPage then page = page or title.prefixedText if options.display and options.display ~= '' then if normalizeTitle(options.display) == normalizeTitle(page) then display = options.display .. ' ' .. display else error(string.format( 'Display title "%s" was ignored since it is ' .. "not equivalent to the page's actual title", options.display ), 0) end else display = page .. ' ' .. display end end return makeSectionLink(linkPage, section, display) else -- Multiple sections. First, make a list of the links to display. local ret = {} for i, section in ipairs(sections) do ret[i] = makeSectionLink(page, section) end -- Assemble the list of links into a string with mw.text.listToText. -- We use the default separator for mw.text.listToText, but a custom -- conjunction. There is also a special case conjunction if we only -- have two links. local conjunction if #sections == 2 then conjunction = '&#8203; and ' else conjunction = ', and ' end ret = mw.text.listToText(ret, nil, conjunction) -- Add the intro text. local intro = '§§&nbsp;' if isShowingPage then intro = (page or title.prefixedText) .. ' ' .. intro end ret = intro .. ret return ret end end function p.main(frame) local yesno = require('Module:Yesno') local args = require('Module:Arguments').getArgs(frame, { wrappers = 'Template:Section link', valueFunc = function (key, value) value = value:match('^%s*(.-)%s*$') -- Trim whitespace -- Allow blank first parameters, as the wikitext template does this. if value ~= '' or key == 1 then return value end end }) for k, v in pairs(args) do -- replace underscores in the positional parameter values if 'number' == type(k) then if not yesno (args['keep-underscores']) then -- unless |keep-underscores=yes args[k] = mw.uri.decode (v, 'WIKI'); -- percent-decode; replace underscores with space characters else args[k] = mw.uri.decode (v, 'PATH'); -- percent-decode; retain underscores end end end -- Sort the arguments. local page local sections, options = {}, {} for k, v in pairs(args) do if k == 1 then -- Doing this in the loop because of a bug in [[Module:Arguments]] -- when using pairs with deleted arguments. page = mw.text.decode(v, true) elseif type(k) == 'number' then sections[k] = v else options[k] = v end end options.nopage = yesno (options.nopage); -- make boolean -- Extract section from page, if present if page then local p, s = page:match('^(.-)#(.*)$') if p then page, sections[1] = p, s end end -- Compress the sections array. local function compressArray(t) local nums, ret = {}, {} for num in pairs(t) do nums[#nums + 1] = num end table.sort(nums) for i, num in ipairs(nums) do ret[i] = t[num] end return ret end sections = compressArray(sections) return p._main(page, sections, options) end return p 5cc61d43dc601ca43e9472500fc5cd09ca7cea44 Template:Collapse top 10 150 348 347 2023-06-06T09:16:33Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Collapse_top]]: w wikitext text/x-wiki <div style="margin-left:{{{indent|0}}}"><!-- NOTE: width renders incorrectly if added to main STYLE section --> {| <!-- Template:Collapse top --> class="mw-collapsible mw-archivedtalk {{<includeonly>safesubst:</includeonly>#if:{{{expand|{{{collapse|}}}}}}||mw-collapsed}} {{{class|}}}" style="background: {{{bg1|transparent}}}; text-align: left; border: {{{border|1px}}} solid {{{b-color|Silver}}}; margin: 0.2em auto auto; width:{{<includeonly>safesubst:</includeonly>#if:{{{width|}}}|{{{width}}}|100%}}; clear: {{{clear|both}}}; padding: 1px;" |- ! style="background: {{{bg|#{{main other|F0F2F5|CCFFCC}}}}}; font-size:87%; padding:0.2em 0.3em; text-align:{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}|left|{{<includeonly>safesubst:</includeonly>#if:{{{align|}}}|left|center}}}}; {{<includeonly>safesubst:</includeonly>#if:{{{fc|}}}|color: {{{fc}}};|}}" | <div style="font-size:115%;{{<includeonly>safesubst:</includeonly>#if:{{{left|}}}||margin:0 4em}}">{{{1|{{{title|{{{reason|{{{header|{{{heading|{{{result|Extended content}}}}}}}}}}}}}}}}}}</div> {{<includeonly>safesubst:</includeonly>#if:{{{warning|{{{2|}}}}}} |{{<includeonly>safesubst:</includeonly>!}}- {{<includeonly>safesubst:</includeonly>!}} style="text-align:center; font-style:italic;" {{<includeonly>safesubst:</includeonly>!}} {{{2|The following is a closed discussion. {{strongbad|Please do not modify it.}} }}} }} |- | style="border: solid {{{border2|1px Silver}}}; padding: {{{padding|0.6em}}}; background: {{{bg2|White}}};" {{<includeonly>safesubst:</includeonly>!}}<noinclude> {{lorem ipsum|3}} {{Collapse bottom}} {{Documentation}} </noinclude> 247cc43d5198baf8804d0926529cbbdd7be91113 Template:Collapse bottom 10 151 350 349 2023-06-06T09:16:33Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Collapse_bottom]]: w wikitext text/x-wiki <includeonly>|}</div></includeonly><noinclude> {{Documentation|Template:Collapse top/doc}} <!-- PLEASE ADD THIS TEMPLATE'S CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --> </noinclude> 64b210e8ab0882b262da50e9fbccf2132bc34fab Template:No redirect 10 152 352 351 2023-06-06T09:16:33Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:No_redirect]]: w wikitext text/x-wiki {{safesubst:<noinclude/>#if: {{safesubst:<noinclude/>#invoke:Redirect|isRedirect|{{{1}}}}} | <span class="plainlinks">[{{safesubst:<noinclude/>fullurl:{{{1}}}|redirect=no}} {{{2|{{{1}}}}}}]</span> | {{safesubst:<noinclude/>#if:{{{2|}}}|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}|{{{2}}}]]|[[:{{safesubst:<noinclude/>FULLPAGENAME:{{{1}}}}}]]}} }}<noinclude> {{documentation}} </noinclude> 1760035b1bed54ee08b810208ed3551b812dfe13 Template:Further information 10 153 354 353 2023-06-06T09:16:34Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Further_information]]: w wikitext text/x-wiki #REDIRECT [[Template:Further]] {{R from move}} 42879303989bb2724f884c7b099077b50c789c48 Template:Tlxs 10 154 356 355 2023-06-06T09:16:35Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tlxs]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link expanded with subst]] {{Redirect category shell| {{R from move}} }} 74e095f26cae0cd68518f2f66d74e948a7861c79 Template:Template link expanded with subst 10 155 358 357 2023-06-06T09:16:36Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link_expanded_with_subst]]: w wikitext text/x-wiki {{#Invoke:Template link general|main|code=on|subst=on}}<noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlxs}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 9b2ef0a8c882c336902f1d61dcff3658528c2210 Module:Shortcut 828 156 360 359 2023-06-06T09:16:36Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Shortcut]]: w Scribunto text/plain -- This module implements {{shortcut}}. -- Set constants local CONFIG_MODULE = 'Module:Shortcut/config' -- Load required modules local checkType = require('libraryUtil').checkType local yesno = require('Module:Yesno') local p = {} local function message(msg, ...) return mw.message.newRawMessage(msg, ...):plain() end local function makeCategoryLink(cat) return string.format('[[%s:%s]]', mw.site.namespaces[14].name, cat) end function p._main(shortcuts, options, frame, cfg) checkType('_main', 1, shortcuts, 'table') checkType('_main', 2, options, 'table', true) options = options or {} frame = frame or mw.getCurrentFrame() cfg = cfg or mw.loadData(CONFIG_MODULE) local templateMode = options.template and yesno(options.template) local redirectMode = options.redirect and yesno(options.redirect) local isCategorized = not options.category or yesno(options.category) ~= false -- Validate shortcuts for i, shortcut in ipairs(shortcuts) do if type(shortcut) ~= 'string' or #shortcut < 1 then error(message(cfg['invalid-shortcut-error'], i), 2) end end -- Make the list items. These are the shortcuts plus any extra lines such -- as options.msg. local listItems = {} for i, shortcut in ipairs(shortcuts) do local templatePath, prefix if templateMode then -- Namespace detection local titleObj = mw.title.new(shortcut, 10) if titleObj.namespace == 10 then templatePath = titleObj.fullText else templatePath = shortcut end prefix = options['pre' .. i] or options.pre or '' end if options.target and yesno(options.target) then listItems[i] = templateMode and string.format("&#123;&#123;%s[[%s|%s]]&#125;&#125;", prefix, templatePath, shortcut) or string.format("[[%s]]", shortcut) else listItems[i] = frame:expandTemplate{ title = 'No redirect', args = templateMode and {templatePath, shortcut} or {shortcut, shortcut} } if templateMode then listItems[i] = string.format("&#123;&#123;%s%s&#125;&#125;", prefix, listItems[i]) end end end table.insert(listItems, options.msg) -- Return an error if we have nothing to display if #listItems < 1 then local msg = cfg['no-content-error'] msg = string.format('<strong class="error">%s</strong>', msg) if isCategorized and cfg['no-content-error-category'] then msg = msg .. makeCategoryLink(cfg['no-content-error-category']) end return msg end local root = mw.html.create() root:wikitext(frame:extensionTag{ name = 'templatestyles', args = { src = 'Module:Shortcut/styles.css'} }) -- Anchors local anchorDiv = root :tag('div') :addClass('module-shortcutanchordiv') for i, shortcut in ipairs(shortcuts) do local anchor = mw.uri.anchorEncode(shortcut) anchorDiv:tag('span'):attr('id', anchor) end -- Shortcut heading local shortcutHeading do local nShortcuts = #shortcuts if nShortcuts > 0 then local headingMsg = options['shortcut-heading'] or redirectMode and cfg['redirect-heading'] or cfg['shortcut-heading'] shortcutHeading = message(headingMsg, nShortcuts) shortcutHeading = frame:preprocess(shortcutHeading) end end -- Shortcut box local shortcutList = root :tag('div') :addClass('module-shortcutboxplain noprint') :attr('role', 'note') if options.float and options.float:lower() == 'left' then shortcutList:addClass('module-shortcutboxleft') end if options.clear and options.clear ~= '' then shortcutList:css('clear', options.clear) end if shortcutHeading then shortcutList :tag('div') :addClass('module-shortcutlist') :wikitext(shortcutHeading) end local ubl = require('Module:List').unbulleted(listItems) shortcutList:wikitext(ubl) return tostring(root) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame) -- Separate shortcuts from options local shortcuts, options = {}, {} for k, v in pairs(args) do if type(k) == 'number' then shortcuts[k] = v else options[k] = v end end -- Compress the shortcut array, which may contain nils. local function compressArray(t) local nums, ret = {}, {} for k in pairs(t) do nums[#nums + 1] = k end table.sort(nums) for i, num in ipairs(nums) do ret[i] = t[num] end return ret end shortcuts = compressArray(shortcuts) return p._main(shortcuts, options, frame) end return p 03fd46a265e549852a9ed3d3a9249b247d84cb4f Module:Shortcut/config 828 157 362 361 2023-06-06T09:16:36Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Shortcut/config]]: w Scribunto text/plain -- This module holds configuration data for [[Module:Shortcut]]. return { -- The heading at the top of the shortcut box. It accepts the following parameter: -- $1 - the total number of shortcuts. (required) ['shortcut-heading'] = '[[Wikipedia:Shortcut|{{PLURAL:$1|Shortcut|Shortcuts}}]]', -- The heading when |redirect=yes is given. It accepts the following parameter: -- $1 - the total number of shortcuts. (required) ['redirect-heading'] = '[[Wikipedia:Redirect|{{PLURAL:$1|Redirect|Redirects}}]]', -- The error message to display when a shortcut is invalid (is not a string, or -- is the blank string). It accepts the following parameter: -- $1 - the number of the shortcut in the argument list. (required) ['invalid-shortcut-error'] = 'shortcut #$1 was invalid (shortcuts must be ' .. 'strings of at least one character in length)', -- The error message to display when no shortcuts or other displayable content -- were specified. (required) ['no-content-error'] = 'Error: no shortcuts were specified and the ' .. mw.text.nowiki('|msg=') .. ' parameter was not set.', -- A category to add when the no-content-error message is displayed. (optional) ['no-content-error-category'] = 'Shortcut templates with missing parameters', } f9d1d94844d5953753eb19e30a3ce389eda3d319 Template:Param 10 158 364 363 2023-06-06T09:16:38Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Param]]: w wikitext text/x-wiki {{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||<{{{tag|code}}}>}}&#123;&#123;&#123;{{{1<noinclude>|foo</noinclude>}}}{{SAFESUBST:<noinclude />#ifeq:{{{2}}}|{{{2|}}} |&#124;}}{{{2|}}}&#125;&#125;&#125;{{SAFESUBST:<noinclude />#ifeq:{{SAFESUBST:<noinclude />Yesno|{{{nested|no}}}}}|yes||</{{{tag|code}}}>}}<noinclude> {{Documentation}} <!-- PLEASE ADD CATEGORIES AND INTERWIKIS TO THE /doc SUBPAGE, THANKS --> </noinclude> abdb5d7fe0982064ea62ad15e8298d1693ed69e2 Template:Never substitute 10 159 366 365 2023-06-06T09:16:39Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Never_substitute]]: w wikitext text/x-wiki {{Ombox |type=notice |text='''This template should {{em|not}} be [[Wikipedia:Substitution|substituted]].''' {{{1|}}} }}<noinclude> {{Documentation}} </noinclude> ed10c57c4f8088f4a40cd7d066ae311218883d20 Template:Template shortcut 10 160 368 367 2023-06-06T09:16:39Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_shortcut]]: w wikitext text/x-wiki <includeonly>{{#invoke:Shortcut|main|template=yes}}</includeonly><noinclude>{{Documentation}}</noinclude> bfb2889c4c0ec36294b7b667f5e03350d2df680e Module:Transclusion count/data/D 828 161 370 369 2023-06-06T09:16:40Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Transclusion_count/data/D]]: w Scribunto text/plain return { ["D&D"] = 3900, ["D&D_to-do"] = 5600, ["D-da"] = 2600, ["DANFS"] = 8400, ["DC-Comics-trademark-copyright"] = 2100, ["DCS_Sri_Lanka"] = 2100, ["DDR"] = 2800, ["DEC"] = 8600, ["DECADE"] = 283000, ["DEN"] = 6700, ["DEU"] = 17000, ["DMC"] = 61000, ["DMCA"] = 2090000, ["DNB"] = 8800, ["DNB-Portal"] = 2100, ["DNB_portal"] = 3800, ["DNK"] = 7700, ["DNZB"] = 3600, ["DOM"] = 2100, ["DOWs"] = 2600, ["DPP"] = 100000, ["DPP/logo"] = 100000, ["DRV_links"] = 3600, ["DWT"] = 2300, ["DYKC"] = 6700, ["DYKF"] = 2100, ["DYK_blue"] = 3400, ["DYK_checklist"] = 13000, ["DYK_conditions"] = 65000, ["DYK_files"] = 2100, ["DYK_header"] = 32000, ["DYK_nompage_links"] = 76000, ["DYK_talk"] = 102000, ["DYK_talk/date"] = 102000, ["DYK_tools"] = 51000, ["DYK_tools/styles.css"] = 51000, ["DYKfile"] = 12000, ["DZA"] = 2700, ["Dab"] = 17000, ["Dablink"] = 2100, ["Dagger"] = 17000, ["Dashboard.wikiedu.org_assignment"] = 13000, ["Dashboard.wikiedu.org_bibliography/guide"] = 6400, ["Dashboard.wikiedu.org_course_header"] = 5900, ["Dashboard.wikiedu.org_course_header/edit-note"] = 5900, ["Dashboard.wikiedu.org_draft_template/about_this_sandbox"] = 9800, ["Dashboard.wikiedu.org_evaluate_article/guide"] = 7200, ["Dashboard.wikiedu.org_peer_review/guide"] = 11000, ["Dashboard.wikiedu.org_sandbox"] = 91000, ["Dashboard.wikiedu.org_student_editor"] = 79000, ["Dashboard.wikiedu.org_student_program_sandbox"] = 91000, ["Dashboard.wikiedu.org_talk_course_link"] = 80000, ["Dashboard.wikiedu.org_user_talk"] = 2200, ["Date"] = 41000, ["Date-mf"] = 38000, ["Date_table_sorting"] = 38000, ["Dated_maintenance_category"] = 2150000, ["Dated_maintenance_category_(articles)"] = 2090000, ["Dated_maintenance_category_by_type_(articles)"] = 21000, ["Davis_Cup_player"] = 2500, ["Day+1"] = 6900, ["Day-1"] = 8300, ["Dbox"] = 3000, ["Dda"] = 5300, ["Dead_YouTube_link"] = 2700, ["Dead_Youtube_links"] = 2500, ["Dead_link"] = 275000, ["Death-date"] = 11000, ["Death-date_and_age"] = 10000, ["Death_date"] = 9100, ["Death_date_and_age"] = 380000, ["Death_date_and_given_age"] = 2500, ["Death_year_and_age"] = 16000, ["Death_year_category_header"] = 2000, ["Decade"] = 2100, ["Decade_link"] = 32000, ["Decimals"] = 3000, ["Decline"] = 2500, ["Declined"] = 3200, ["Decrease"] = 34000, ["Define"] = 5100, ["Deg2DMS"] = 3400, ["Deletion_review_log_header"] = 5600, ["Deletion_review_log_header/Core"] = 5600, ["Delink"] = 1960000, ["Delink_question_hyphen-minus"] = 292000, ["Delrevxfd"] = 3500, ["Democratic_Party_(US)/meta/shading"] = 15000, ["Description_missing"] = 6900, ["Designation/abbreviation"] = 8100, ["Designation/color"] = 76000, ["Designation/colour"] = 79000, ["Designation/colour2"] = 18000, ["Designation/divbox"] = 29000, ["Designation/text"] = 42000, ["Designation_list"] = 5300, ["Details"] = 4700, ["DetailsLink"] = 5800, ["Detect_singular"] = 197000, ["Deutsche_Bahn_station_codes"] = 2200, ["DfE_performance_tables"] = 4500, ["Diff"] = 30000, ["Diff2"] = 11000, ["Digits"] = 21000, ["Directories_box"] = 3200, ["Disamb"] = 2200, ["Disambig"] = 63000, ["Disambig-Class"] = 12000, ["DisambigProj"] = 12000, ["DisambigProject"] = 150000, ["Disambigproject"] = 5800, ["Disambiguation"] = 216000, ["Disambiguation/cat"] = 216000, ["Disambiguation_page_short_description"] = 350000, ["Discogs_artist"] = 16000, ["Discogs_master"] = 12000, ["Discogs_release"] = 3000, ["Discussion_bottom"] = 11000, ["Discussion_top"] = 12000, ["DisestcatCountry"] = 9500, ["DisestcatCountry/core"] = 9500, ["DisestcatCountryDecade"] = 2600, ["DisestcatUSstate"] = 4900, ["DisestcatUSstate/core"] = 4900, ["Disputed"] = 2200, ["Distinguish"] = 95000, ["Disused_Rail_Start"] = 4000, ["Disused_rail_start"] = 4300, ["Disused_style"] = 4600, ["Div_col"] = 396000, ["Div_col/styles.css"] = 398000, ["Div_col_end"] = 297000, ["Div_col_start"] = 2900, ["Div_end"] = 2600, ["Divbox"] = 333000, ["Divbox/styles.css"] = 357000, ["Dividing_line"] = 4000, ["Dmbox"] = 456000, ["Dmbox/styles.css"] = 456000, ["Do_not_move_to_Commons"] = 16000, ["Doc"] = 3500, ["Documentation"] = 89000, ["Documentation_subpage"] = 95000, ["Dog_opentask"] = 3400, ["Doi"] = 25000, ["Doing"] = 3600, ["Don't_edit_this_line"] = 106000, ["Don't_edit_this_line_always_display"] = 469000, ["Don't_edit_this_line_extinct"] = 469000, ["Don't_edit_this_line_link_target"] = 469000, ["Don't_edit_this_line_link_text"] = 469000, ["Don't_edit_this_line_parent"] = 469000, ["Don't_edit_this_line_rank"] = 469000, ["Don't_edit_this_line_refs"] = 106000, ["Don't_edit_this_line_same_as"] = 469000, ["Done"] = 101000, ["Doppelganger"] = 2700, ["Dot"] = 2600, ["Double+single"] = 2700, ["Double-dagger"] = 18000, ["Dr"] = 3400, ["Dr-logno"] = 3400, ["Dr-make"] = 3400, ["Dr-yr"] = 3400, ["Draft"] = 3700, ["Draft_article"] = 5700, ["Draft_article_check"] = 5800, ["Draft_categories"] = 6100, ["Draft_other"] = 115000, ["Draft_topics"] = 26000, ["Drafts_moved_from_mainspace"] = 12000, ["Draw"] = 3800, ["Draw_key"] = 17000, ["Draw_links"] = 13000, ["Drep"] = 3400, ["Drugbankcite"] = 4300, ["Drugbox"] = 7500, ["Drugs.com"] = 3600, ["Ds/talk_notice"] = 6200, ["Dts"] = 38000, ["Dubious"] = 8100, ["Duck"] = 2900, ["Dummytab"] = 4800, ["Duration"] = 38000, ["Dutch_municipality"] = 2600, ["Dyktalk"] = 42000, ["Dynamic_list"] = 9800, ["Module:DYK_checklist"] = 13000, ["Module:DYK_checklist/data"] = 13000, ["Module:DYK_nompage_links"] = 76000, ["Module:Data"] = 148000, ["Module:Date"] = 1360000, ["Module:DateI18n"] = 65000, ["Module:Date_table_sorting"] = 38000, ["Module:DecodeEncode"] = 113000, ["Module:Delink"] = 2070000, ["Module:Detect_singular"] = 1500000, ["Module:Disambiguation"] = 3500000, ["Module:Distinguish"] = 95000, ["Module:Documentation"] = 135000, ["Module:Documentation/config"] = 135000, ["Module:Documentation/styles.css"] = 135000, ["Module:Draft_topics"] = 26000, ["Module:Duration"] = 236000, } 28eacb8bec85d8e4733a57d9fa28b3b3ffa8696b Template:Documentation/doc 10 162 372 371 2023-06-06T09:16:41Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Documentation/doc]]: w wikitext text/x-wiki <noinclude>{{pp-semi-indef}} </noinclude>{{Distinguish|Template:Documentation subpage}} {{Documentation subpage}} {{template shortcut|doc}} {{High-use}} {{Lua|Module:Documentation}} {{Never substitute}} The {{tlx|documentation}} template is used to contain the [[WP:TDOC|documented information and instructions]] of a certain template, usually from a /doc subpage. It can also be configured to load the content from other pages or be directly fed by text. For detailed instructions on how and when to use this template, see [[Wikipedia:Template documentation]] (shortcut: [[WP:TDOC]]). This template has two parts: the big "documentation box" with the documentation inside alongside a toolbar (the <code>[view][edit][hist][purge]</code> links), and the smaller "link box" that shows metadata about the documentation alongside the [[Wikipedia:Template sandbox and test cases|sandbox and testcases]] links. Use of this template allows templates to be [[Wikipedia:Protection policy|protected]], where necessary, while allowing anyone to edit the documentation and categories. == General syntax == Normally, the template is used without parameters and is placed inside {{tag|noinclude}} at the bottom of the template page (see {{section link|#Placement and tags}} for more information): <syntaxhighlight lang="wikitext"> <!--Last line of your template code--><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage --> </noinclude> </syntaxhighlight> === Transcluding a different page === To transclude a different page other than the /doc subpage, simply provide {{para|1}} like this: <syntaxhighlight lang="wikitext"> <!--Last line of your template code--><noinclude> {{Documentation|Template:Other page/doc}} </noinclude> </syntaxhighlight> Note that when loading the documentation from a page other than the local /doc subpage, it becomes tricky to handle the categories. === Using the {{para|content}} parameter === The documentation can also be fed directly as text, by using the {{para|content}} parameter: <syntaxhighlight lang="wikitext"> <!--Last line of your template code--><noinclude> {{Documentation | content = <!-- template documentation --> }}</noinclude> </syntaxhighlight> When using this parameter, the toolbar will not show. Note that the /doc subpage in the link box will still show up if it exists. Also note that when {{para|1}} and {{para|content}} is specified, {{para|content}} takes precedence and always shows in the documentation box. == Advanced syntax == === Customizing the heading === The heading in the documentation box changes depending on namespace. See the below list for the default text in each namespace: * Template namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Template documentation''' * Module namespace: [[File:Test Template Info-Icon - Version (2).svg|32px|link=[[Wikipedia:Template documentation]]]] '''Module documentation''' * Other namespaces: '''Documentation''' To customize the heading, simply set the parameter {{para|heading}} to anything you like, for example {{para|heading|Infobox documentation}}. Note that if the heading parameter is empty but defined (like {{para|heading|}}) the heading alongside the toolbar will not show. The {{para|heading-style}} parameter can be fed optional [[Cascading Style Sheets|CSS]] values, like {{para|heading-style|font-size:150%;color:red;}}. Not that you should omit quotation marks <code>" "</code> and add the ending semicolon <code>;</code>. === Customizing the link box === To customize the link box, simply set {{para|link box}} to something else, like {{para|link box|The above documentation is automatically generated from [[Template:Foo]]}}. To hide the link box, simply set {{para|link box}} to <code>off</code>. === Testing === You can simulate the output for a given page by using the {{para|page}} parameter. For example, if you use the code {{para|page|Template:Edit protected}}, the template will behave exactly as if it were on the page [[Template:Edit protected]], including showing the documentation from [[Template:Edit protected/doc]], linking to [[Template:Edit protected/sandbox]], etc. This parameter is useful for testing and is used extensively on the [[Module:Documentation/testcases|module testcases page]]. == Placement and tags == {{Further information|Wikipedia:Template documentation#Where to place it}} This code should be added at the bottom of the template code page, with no space before {{Tag|noinclude|o}} (which causes extra whitespace to show on pages where the template is transcluded): <syntaxhighlight lang="wikitext"><!--Last line of your template code--><noinclude> {{documentation}} <!-- Add categories to the /doc subpage --> </noinclude></syntaxhighlight> To automatically insert the above text, you can also use the [[Wikipedia:Substitution|substitution]] code shortcut {{tlxs|doc-code}}. === Categories and interwikis === Depending on where to the documentation is placed, it may be tricky to handle the categories and interwikis. See {{section link|Wikipedia:Template documentation#Categories and interwiki links}} for information about adding these. == Technical details == === Automatic functions === If the documentation page does not exist, the toolbar is replaced with a <code>[create]</code> link. It automatically [[mw:Manual:Creating pages with preloaded text|creates the page with preloaded text]] with the basic documentation syntax. Preload text is also used for the /sandbox and /testcases [create] links. The preload page for the /doc <code>[create]</code> link is [[Template:Documentation/preload]]. The preload pages for the /sandbox and /testcases links are [[Template:Documentation/preload-sandbox]] and [[Template:Documentation/preload-testcases]]. The preload page for the /sandbox <code>[mirror]</code> link is [[Template:Documentation/mirror]]. This template also automatically adds {{tl|pp-template}} to a protected template page, so no need to manually add this template to protected pages. When this template is on a /sandbox subpage it automatically adds the {{tl|Template sandbox notice}} template. === Link box features === Depending on the namespace, the link box may have less features, or may not show up at all. The following table shows this: {| class="wikitable" ! Namespace ! Behavior |- | Template | Full behavior |- | Module | Full behavior, with the addition of a "create documentation" link when the page does not exist |- | User | Full behavior |- | Other namespaces | Hidden, unless {{para|1}} is specified (which will show "The above documentation is transcluded from {{param|1}}") |} Alongside that, if {{para|1}} or {{para|content}} is specified, the "Add categories to the /doc subpage" will not show. === Subject namespaces vs. talk namespaces === This template is usually placed in the [[WP:NS#Subject namespaces|subject namespace]]. But in some cases this template needs to be on the [[WP:TALKSPACE|Talk namespace]]: * In the MediaWiki namespace, since {{tag|noinclude|o}} often does not work in system messages, and since the MediaWiki namespace needs to be kept clean for performance reasons. When placed on talk pages, this template usually is placed near the top of the page and without {{tag|noinclude}} tags. The /doc, /sandbox and /testcases pages should normally be in the subject namespace, except in the namespaces that do not have the MediaWiki [[meta:Help:Link#Subpage feature|subpage feature]] enabled: Main, File, and MediaWiki. (Categories can have subpages, but documentation is created in the Category talk namespace to prevent creating empty categories. There are also a whole bunch of other technical reasons why the /doc page must be stored under the talk page for those (but only those) namespaces. This template automatically points its [create] links for the /doc, /sandbox and /testcases to the right namespace. == Full syntax == <syntaxhighlight lang="wikitext"> {{Documentation}} or {{Documentation | [path to documentation page] }} {{Documentation | content = }} or {{Documentation | [path to documentation page] | heading-style = | heading = | link box = }} or {{Documentation | [path to documentation page] | content = | heading-style = | heading = | link box = | page = }} </syntaxhighlight> === Color scheme === {| class="wikitable" style="font-size:90%" |+ Wikipedia background colors for {{Template link|documentation}} <small>([[Help:Using colors]])</small> ! !! RGB !! HSV !! Color !! General usage !! Note |- | A&nbsp; | <kbd>#ECFCF4</kbd> || 150&deg;, 6%, 99% | style="background:#ECFCF4" | &nbsp; | Sample || Current documentation background |- | B | <kbd>#00FF80</kbd> | style="font-size:90%;" | {{nowrap|1=Hue=150&deg; <small>(41.7%; 106/255<small>dec</small>)</small> 100%, 100%}} | style="background:#00FF80" | &nbsp; | Basic hue || What we'd call ''the color'' |- | colspan="6" | |- | 1 | <kbd>#A3BFB1</kbd> || 150&deg;, 15%, 75% | style="background:#A3BFB1" | &nbsp; | Header border only || |- | 2 | <kbd>#CEF2E0</kbd> || 150&deg;, 15%, 95% | style="background:#CEF2E0" | &nbsp; | Main&nbsp;border; header&nbsp;background || |- | 3 | <kbd>#E6FFF2</kbd> || 150&deg;, 10%, 100% | style="background:#E6FFF2" | &nbsp; | 2nd header, accent colour || |- | 4 | <kbd>#F5FFFA</kbd> || 150&deg;, 4%, 100% | style="background:#F5FFFA" | &nbsp; | Main background || So saturation in A is a bit off |} {{collapse top|title=Colors for documentation navbox}} As a suggestion, here are colors for a navbox intended for documentation pages only. They follow the shading of regular blue navbox colors: <syntaxhighlight lang="wikitext"> | titlestyle = background:#ccffe5 | basestyle = background:#ddffee <!-- basestyle= sets groupstyle, abovestyle, belowstyle together --> </syntaxhighlight> For subgroups, in child navboxes: <syntaxhighlight lang="wikitext"> {{Navbox|child | groupstyle = background:#e6fff2 ... </syntaxhighlight> Example:{{Template link expanded|Periodic table templates}} {{collapse bottom}} ==See also== * {{tl|Documentation subpage}}, a notice placed at the top of a /doc subpage explaining its role and including a link to the page it documents. * {{tl|Barnstar documentation}}, a variant of {{tl|Documentation}} for use with [[Wikipedia:Barnstars|barnstar]] templates. * [[Wikipedia:Template documentation]] is a how-to guide to template documentation. * [[Wikipedia:Template sandbox and test cases]] explains the use of /sandbox and /testcases subpages and includes more information about template testing. <includeonly><!-- Make sure that only page [[Template:Documentation]] is categorised. No other page (no subpages, not when transcluded). -->{{#ifeq:{{FULLPAGENAME}}|Template:Documentation| [[Category:Template documentation| ]] [[Category:Template namespace templates|Documentation]] }}</includeonly> 431959208b67db006bc22ce92572aa643072c326 Module:Shortcut/styles.css 828 163 374 373 2023-06-06T09:16:42Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Shortcut/styles.css]]: w sanitized-css text/css /* {{pp-template}} */ .module-shortcutboxplain { float: right; margin: 0 0 0 1em; border: 1px solid #aaa; background: #fff; padding: 0.3em 0.6em 0.2em 0.6em; text-align: center; font-size: 85%; } .module-shortcutboxleft { float: left; margin: 0 1em 0 0; } .module-shortcutlist { display: inline-block; border-bottom: 1px solid #aaa; margin-bottom: 0.2em; } .module-shortcutboxplain ul { font-weight: bold; } .module-shortcutanchordiv { position: relative; top: -3em; } li .module-shortcutanchordiv { float: right; /* IE/Edge in list items */ } .mbox-imageright .module-shortcutboxplain { padding: 0.4em 1em 0.4em 1em; line-height: 1.3; margin: 0; } ccf3877e4b14726147d3b1d8a297fbecacdb2cf8 Template:Lua 10 122 376 277 2023-06-06T09:19:09Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Lua]]: w wikitext text/x-wiki <includeonly>{{#invoke:Lua banner|main}}</includeonly><noinclude> {{Lua|Module:Lua banner}} {{documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> </noinclude> dba3962144dacd289dbc34f50fbe0a7bf6d7f2f7 Template:Tim 10 164 378 377 2023-06-06T09:19:10Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tim]]: w wikitext text/x-wiki [[m:Template:{{{1|{{PAGENAME}}}}}]]<noinclude> {{documentation|content= Displays a link to a template on Meta. * {{xpds|tim|foo}} [[Category:Shortcut templates|{{PAGENAME}}]] [[Category:External link templates]]}}</noinclude> 2bed05d802e6f826c40c07ef66c9e0df72d4028d Module:Lua banner 828 121 380 275 2023-06-06T09:19:10Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Lua_banner]]: w Scribunto text/plain -- This module implements the {{lua}} template. local yesno = require('Module:Yesno') local mList = require('Module:List') local mTableTools = require('Module:TableTools') local mMessageBox = require('Module:Message box') local p = {} function p.main(frame) local origArgs = frame:getParent().args local args = {} for k, v in pairs(origArgs) do v = v:match('^%s*(.-)%s*$') if v ~= '' then args[k] = v end end return p._main(args) end function p._main(args) local modules = mTableTools.compressSparseArray(args) local box = p.renderBox(modules) local trackingCategories = p.renderTrackingCategories(args, modules) return box .. trackingCategories end function p.renderBox(modules) local boxArgs = {} if #modules < 1 then boxArgs.text = '<strong class="error">Error: no modules specified</strong>' else local moduleLinks = {} for i, module in ipairs(modules) do moduleLinks[i] = string.format('[[:%s]]', module) local maybeSandbox = mw.title.new(module .. '/sandbox') if maybeSandbox.exists then moduleLinks[i] = moduleLinks[i] .. string.format(' ([[:%s|sandbox]])', maybeSandbox.fullText) end end local moduleList = mList.makeList('bulleted', moduleLinks) local title = mw.title.getCurrentTitle() if title.subpageText == "doc" then title = title.basePageTitle end if title.contentModel == "Scribunto" then boxArgs.text = 'This module depends on the following other modules:' .. moduleList else boxArgs.text = 'This template uses [[Wikipedia:Lua|Lua]]:\n' .. moduleList end end boxArgs.type = 'notice' boxArgs.small = true boxArgs.image = '[[File:Lua-Logo.svg|30px|alt=|link=]]' return mMessageBox.main('mbox', boxArgs) end function p.renderTrackingCategories(args, modules, titleObj) if yesno(args.nocat) then return '' end local cats = {} -- Error category if #modules < 1 then cats[#cats + 1] = 'Lua templates with errors' end -- Lua templates category titleObj = titleObj or mw.title.getCurrentTitle() local subpageBlacklist = { doc = true, sandbox = true, sandbox2 = true, testcases = true } if not subpageBlacklist[titleObj.subpageText] then local protCatName if titleObj.namespace == 10 then local category = args.category if not category then local categories = { ['Module:String'] = 'Templates based on the String Lua module', ['Module:Math'] = 'Templates based on the Math Lua module', ['Module:BaseConvert'] = 'Templates based on the BaseConvert Lua module', ['Module:Citation/CS1'] = 'Templates based on the Citation/CS1 Lua module' } category = modules[1] and categories[modules[1]] category = category or 'Lua-based templates' end cats[#cats + 1] = category protCatName = "Templates using under-protected Lua modules" elseif titleObj.namespace == 828 then protCatName = "Modules depending on under-protected modules" end if not args.noprotcat and protCatName then local protLevels = { autoconfirmed = 1, extendedconfirmed = 2, templateeditor = 3, sysop = 4 } local currentProt if titleObj.id ~= 0 then -- id is 0 (page does not exist) if am previewing before creating a template. currentProt = titleObj.protectionLevels["edit"][1] end if currentProt == nil then currentProt = 0 else currentProt = protLevels[currentProt] end for i, module in ipairs(modules) do if module ~= "WP:libraryUtil" then local moduleProt = mw.title.new(module).protectionLevels["edit"][1] if moduleProt == nil then moduleProt = 0 else moduleProt = protLevels[moduleProt] end if moduleProt < currentProt then cats[#cats + 1] = protCatName break end end end end end for i, cat in ipairs(cats) do cats[i] = string.format('[[Category:%s]]', cat) end return table.concat(cats) end return p 03ec1b34a40121efc562c0c64a67ebbf57d56dff Module:Lua banner/config 828 165 382 381 2023-06-06T09:19:10Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Lua_banner/config]]: w Scribunto text/plain local cfg = {} -- Don’t touch this line. -- Subpage blacklist: these subpages will not be categorized (except for the -- error category, which is always added if there is an error). -- For example “Template:Foo/doc” matches the `doc = true` rule, so it will have -- no categories. “Template:Foo” and “Template:Foo/documentation” match no rules, -- so they *will* have categories. All rules should be in the -- ['<subpage name>'] = true, -- format. cfg['subpage_blacklist'] = { ['doc'] = true, ['sandbox'] = true, ['sandbox2'] = true, ['testcases'] = true, } -- Allow wishes: whether wishes for conversion to Lua are allowed. -- If true, calls with zero parameters are valid, and considered to be wishes: -- The box’s text is “This template should use Lua”, and cfg['wish_category'] is -- added. If false, such calls are invalid, an error message appears, and -- cfg['error_category'] is added. cfg['allow_wishes'] = false -- Default category: this category is added if the module call contains errors -- (e.g. no module listed). A category name without namespace, or nil -- to disable categorization (not recommended). cfg['error_category'] = 'Lua templates with errors' -- Wish category: this category is added if no module is listed, and wishes are -- allowed. (Not used if wishes are not allowed.) A category name without -- namespace, or nil to disable categorization. cfg['wish_category'] = 'Lua-candidates' -- Default category: this category is added if none of the below module_categories -- matches the first module listed. A category name without namespace, or nil -- to disable categorization. cfg['default_category'] = 'Lua-based templates' -- Module categories: one of these categories is added if the first listed module -- is the listed module (e.g. {{Lua|Module:String}} adds -- [[Category:Lua String-based templates]].) Format: -- ['<module name>'] = '<category name>' -- where neither <module name> nor <category name> contains namespace. An empty -- table (i.e. no module-based categorization) will suffice on smaller wikis. cfg['module_categories'] = { ['String'] = 'Lua String-based templates', } return cfg -- Don’t touch this line. 960aa5bb0f008cf7e3ef37963e1dbc797c2ffdd5 Template:Pp-template 10 166 384 383 2023-06-06T09:19:11Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Pp-template]]: w wikitext text/x-wiki <includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}} |*=[[Category:Pages with incorrect protection templates]] |autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]] |sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]] }}</includeonly><noinclude> {{Documentation}} </noinclude> 1046e139e5a0380698fd75d7207e9ef53a4ff91d Template:Module other 10 167 386 385 2023-06-06T09:19:12Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Module_other]]: w wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Module}} | module | other }} }} | module = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 5a2444103b3cffc028f4dc0de2e8a278f87c7129 Module:Effective protection level 828 84 388 185 2023-06-06T09:19:12Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Effective_protection_level]]: w Scribunto text/plain local p = {} -- Returns the permission required to perform a given action on a given title. -- If no title is specified, the title of the page being displayed is used. function p._main(action, pagename) local title if type(pagename) == 'table' and pagename.prefixedText then title = pagename elseif pagename then title = mw.title.new(pagename) else title = mw.title.getCurrentTitle() end pagename = title.prefixedText if action == 'autoreview' then local level = mw.ext.FlaggedRevs.getStabilitySettings(title) level = level and level.autoreview if level == 'review' then return 'reviewer' elseif level ~= '' then return level else return nil -- not '*'. a page not being PC-protected is distinct from it being PC-protected with anyone able to review. also not '', as that would mean PC-protected but nobody can review end elseif action ~= 'edit' and action ~= 'move' and action ~= 'create' and action ~= 'upload' and action ~= 'undelete' then error( 'First parameter must be one of edit, move, create, upload, undelete, autoreview', 2 ) end if title.namespace == 8 then -- MediaWiki namespace if title.text:sub(-3) == '.js' or title.text:sub(-4) == '.css' or title.contentModel == 'javascript' or title.contentModel == 'css' then -- site JS or CSS page return 'interfaceadmin' else -- any non-JS/CSS MediaWiki page return 'sysop' end elseif title.namespace == 2 and title.isSubpage then if title.contentModel == 'javascript' or title.contentModel == 'css' then -- user JS or CSS page return 'interfaceadmin' elseif title.contentModel == 'json' then -- user JSON page return 'sysop' end end if action == 'undelete' then return 'sysop' end local level = title.protectionLevels[action] and title.protectionLevels[action][1] if level == 'sysop' or level == 'editprotected' then return 'sysop' elseif title.cascadingProtection.restrictions[action] and title.cascadingProtection.restrictions[action][1] then -- used by a cascading-protected page return 'sysop' elseif level == 'templateeditor' then return 'templateeditor' elseif action == 'move' then local blacklistentry = mw.ext.TitleBlacklist.test('edit', pagename) -- Testing action edit is correct, since this is for the source page. The target page name gets tested with action move. if blacklistentry and not blacklistentry.params.autoconfirmed then return 'templateeditor' elseif title.namespace == 6 then return 'filemover' elseif level == 'extendedconfirmed' then return 'extendedconfirmed' else return 'autoconfirmed' end end local blacklistentry = mw.ext.TitleBlacklist.test(action, pagename) if blacklistentry then if not blacklistentry.params.autoconfirmed then return 'templateeditor' elseif level == 'extendedconfirmed' then return 'extendedconfirmed' else return 'autoconfirmed' end elseif level == 'editsemiprotected' then -- create-semiprotected pages return this for some reason return 'autoconfirmed' elseif level then return level elseif action == 'upload' then return 'autoconfirmed' elseif action == 'create' and title.namespace % 2 == 0 and title.namespace ~= 118 then -- You need to be registered, but not autoconfirmed, to create non-talk pages other than drafts return 'user' else return '*' end end setmetatable(p, { __index = function(t, k) return function(frame) return t._main(k, frame.args[1]) end end }) return p 70256a489edf6be9808031b14a7e3ef3e025da97 Template:Documentation 10 15 390 239 2023-06-06T09:19:33Z Otonashi Ayana 2 1 revision imported from [[:meta:Template:Documentation]]: w wikitext text/x-wiki <noinclude> <languages/> </noinclude><includeonly>{{#invoke:documentation|main|_content={{ {{#invoke:documentation|contentTitle}}}}}}</includeonly><noinclude> {{documentation|content= {{Lua|Module:Documentation}} <translate><!--T:12--> This template automatically displays a documentation box like the one you are seeing now, of which the content is sometimes transcluded from another page.</translate> <translate><!--T:13--> It is intended for pages which are [[<tvar name=1>Special:MyLanguage/Help:Transclusion</tvar>|transcluded]] in other pages, i.e. templates, whether in the template namespace or not.</translate> <translate> ==Usage== <!--T:2--> ===Customizing display=== <!--T:3--> <!--T:4--> Overrides exist to customize the output in special cases: </translate> * <nowiki>{{</nowiki>documentation{{!}}'''heading'''=<nowiki>}}</nowiki> - <translate><!--T:5--> change the text of the "documentation" heading.</translate> <translate><!--T:10--> If this is set to blank, the entire heading line (including the first [edit] link) will also disappear.</translate> <translate> ==Rationale== <!--T:6--> </translate> <translate><!--T:7--> This template allows any page to use any documentation page, and makes it possible to protect templates while allowing anyone to edit the template's documentation and categories.</translate> <translate><!--T:8--> It also reduces server resources by circumventing a [[w:Wikipedia:Template limits|technical limitation of templates]] (see a [[<tvar name=1>:en:Special:Diff/69888944</tvar>|developer's explanation]]).</translate> <translate> ==See also== <!--T:9--> </translate> * <translate><!--T:14--> [[w:Template:Documentation subpage]]</translate> * {{tim|Documentation}} * <translate><!--T:11--> [[w:Wikipedia:Template documentation]]</translate> }} [[Category:Formatting templates{{#translation:}}|Template documentation]] [[Category:Template documentation{{#translation:}}| ]] </noinclude><includeonly>{{#if:{{{content|}}}| [[Category:Template documentation pages{{#translation:}}]] }}</includeonly> e9a25c87d40f5882dd425c83ed4d3be628082f3c Module:Yesno 828 12 392 133 2023-06-06T09:19:34Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:Yesno]]: w Scribunto text/plain -- Function allowing for consistent treatment of boolean-like wikitext input. -- It works similarly to the template {{yesno}}. return function (val, default) -- If your wiki uses non-ascii characters for any of "yes", "no", etc., you -- should replace "val:lower()" with "mw.ustring.lower(val)" in the -- following line. val = type(val) == 'string' and val:lower() or val if val == nil then return nil elseif val == true or val == 'yes' or val == 'y' or val == 'true' or val == 't' or val == 'on' or tonumber(val) == 1 then return true elseif val == false or val == 'no' or val == 'n' or val == 'false' or val == 'f' or val == 'off' or tonumber(val) == 0 then return false else return default end end f767643e7d12126d020d88d662a3dd057817b9dc Module:Arguments 828 13 394 135 2023-06-06T09:19:34Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:Arguments]]: w Scribunto text/plain -- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called from #invoke directly. local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local arguments = {} -- Generate four different tidyVal functions, so that we don't have to check the -- options every time we call it. local function tidyValDefault(key, val) if type(val) == 'string' then val = val:match('^%s*(.-)%s*$') if val == '' then return nil else return val end else return val end end local function tidyValTrimOnly(key, val) if type(val) == 'string' then return val:match('^%s*(.-)%s*$') else return val end end local function tidyValRemoveBlanksOnly(key, val) if type(val) == 'string' then if val:find('%S') then return val else return nil end else return val end end local function tidyValNoChange(key, val) return val end local function matchesTitle(given, title) local tp = type( given ) return (tp == 'string' or tp == 'number') and mw.title.new( given ).prefixedText == title end local translate_mt = { __index = function(t, k) return k end } function arguments.getArgs(frame, options) checkType('getArgs', 1, frame, 'table', true) checkType('getArgs', 2, options, 'table', true) frame = frame or {} options = options or {} --[[ -- Set up argument translation. --]] options.translate = options.translate or {} if getmetatable(options.translate) == nil then setmetatable(options.translate, translate_mt) end if options.backtranslate == nil then options.backtranslate = {} for k,v in pairs(options.translate) do options.backtranslate[v] = k end end if options.backtranslate and getmetatable(options.backtranslate) == nil then setmetatable(options.backtranslate, { __index = function(t, k) if options.translate[k] ~= k then return nil else return k end end }) end --[[ -- Get the argument tables. If we were passed a valid frame object, get the -- frame arguments (fargs) and the parent frame arguments (pargs), depending -- on the options set and on the parent frame's availability. If we weren't -- passed a valid frame object, we are being called from another Lua module -- or from the debug console, so assume that we were passed a table of args -- directly, and assign it to a new variable (luaArgs). --]] local fargs, pargs, luaArgs if type(frame.args) == 'table' and type(frame.getParent) == 'function' then if options.wrappers then --[[ -- The wrappers option makes Module:Arguments look up arguments in -- either the frame argument table or the parent argument table, but -- not both. This means that users can use either the #invoke syntax -- or a wrapper template without the loss of performance associated -- with looking arguments up in both the frame and the parent frame. -- Module:Arguments will look up arguments in the parent frame -- if it finds the parent frame's title in options.wrapper; -- otherwise it will look up arguments in the frame object passed -- to getArgs. --]] local parent = frame:getParent() if not parent then fargs = frame.args else local title = parent:getTitle():gsub('/sandbox$', '') local found = false if matchesTitle(options.wrappers, title) then found = true elseif type(options.wrappers) == 'table' then for _,v in pairs(options.wrappers) do if matchesTitle(v, title) then found = true break end end end -- We test for false specifically here so that nil (the default) acts like true. if found or options.frameOnly == false then pargs = parent.args end if not found or options.parentOnly == false then fargs = frame.args end end else -- options.wrapper isn't set, so check the other options. if not options.parentOnly then fargs = frame.args end if not options.frameOnly then local parent = frame:getParent() pargs = parent and parent.args or nil end end if options.parentFirst then fargs, pargs = pargs, fargs end else luaArgs = frame end -- Set the order of precedence of the argument tables. If the variables are -- nil, nothing will be added to the table, which is how we avoid clashes -- between the frame/parent args and the Lua args. local argTables = {fargs} argTables[#argTables + 1] = pargs argTables[#argTables + 1] = luaArgs --[[ -- Generate the tidyVal function. If it has been specified by the user, we -- use that; if not, we choose one of four functions depending on the -- options chosen. This is so that we don't have to call the options table -- every time the function is called. --]] local tidyVal = options.valueFunc if tidyVal then if type(tidyVal) ~= 'function' then error( "bad value assigned to option 'valueFunc'" .. '(function expected, got ' .. type(tidyVal) .. ')', 2 ) end elseif options.trim ~= false then if options.removeBlanks ~= false then tidyVal = tidyValDefault else tidyVal = tidyValTrimOnly end else if options.removeBlanks ~= false then tidyVal = tidyValRemoveBlanksOnly else tidyVal = tidyValNoChange end end --[[ -- Set up the args, metaArgs and nilArgs tables. args will be the one -- accessed from functions, and metaArgs will hold the actual arguments. Nil -- arguments are memoized in nilArgs, and the metatable connects all of them -- together. --]] local args, metaArgs, nilArgs, metatable = {}, {}, {}, {} setmetatable(args, metatable) local function mergeArgs(tables) --[[ -- Accepts multiple tables as input and merges their keys and values -- into one table. If a value is already present it is not overwritten; -- tables listed earlier have precedence. We are also memoizing nil -- values, which can be overwritten if they are 's' (soft). --]] for _, t in ipairs(tables) do for key, val in pairs(t) do if metaArgs[key] == nil and nilArgs[key] ~= 'h' then local tidiedVal = tidyVal(key, val) if tidiedVal == nil then nilArgs[key] = 's' else metaArgs[key] = tidiedVal end end end end end --[[ -- Define metatable behaviour. Arguments are memoized in the metaArgs table, -- and are only fetched from the argument tables once. Fetching arguments -- from the argument tables is the most resource-intensive step in this -- module, so we try and avoid it where possible. For this reason, nil -- arguments are also memoized, in the nilArgs table. Also, we keep a record -- in the metatable of when pairs and ipairs have been called, so we do not -- run pairs and ipairs on the argument tables more than once. We also do -- not run ipairs on fargs and pargs if pairs has already been run, as all -- the arguments will already have been copied over. --]] metatable.__index = function (t, key) --[[ -- Fetches an argument when the args table is indexed. First we check -- to see if the value is memoized, and if not we try and fetch it from -- the argument tables. When we check memoization, we need to check -- metaArgs before nilArgs, as both can be non-nil at the same time. -- If the argument is not present in metaArgs, we also check whether -- pairs has been run yet. If pairs has already been run, we return nil. -- This is because all the arguments will have already been copied into -- metaArgs by the mergeArgs function, meaning that any other arguments -- must be nil. --]] if type(key) == 'string' then key = options.translate[key] end local val = metaArgs[key] if val ~= nil then return val elseif metatable.donePairs or nilArgs[key] then return nil end for _, argTable in ipairs(argTables) do local argTableVal = tidyVal(key, argTable[key]) if argTableVal ~= nil then metaArgs[key] = argTableVal return argTableVal end end nilArgs[key] = 'h' return nil end metatable.__newindex = function (t, key, val) -- This function is called when a module tries to add a new value to the -- args table, or tries to change an existing value. if type(key) == 'string' then key = options.translate[key] end if options.readOnly then error( 'could not write to argument table key "' .. tostring(key) .. '"; the table is read-only', 2 ) elseif options.noOverwrite and args[key] ~= nil then error( 'could not write to argument table key "' .. tostring(key) .. '"; overwriting existing arguments is not permitted', 2 ) elseif val == nil then --[[ -- If the argument is to be overwritten with nil, we need to erase -- the value in metaArgs, so that __index, __pairs and __ipairs do -- not use a previous existing value, if present; and we also need -- to memoize the nil in nilArgs, so that the value isn't looked -- up in the argument tables if it is accessed again. --]] metaArgs[key] = nil nilArgs[key] = 'h' else metaArgs[key] = val end end local function translatenext(invariant) local k, v = next(invariant.t, invariant.k) invariant.k = k if k == nil then return nil elseif type(k) ~= 'string' or not options.backtranslate then return k, v else local backtranslate = options.backtranslate[k] if backtranslate == nil then -- Skip this one. This is a tail call, so this won't cause stack overflow return translatenext(invariant) else return backtranslate, v end end end metatable.__pairs = function () -- Called when pairs is run on the args table. if not metatable.donePairs then mergeArgs(argTables) metatable.donePairs = true end return translatenext, { t = metaArgs } end local function inext(t, i) -- This uses our __index metamethod local v = t[i + 1] if v ~= nil then return i + 1, v end end metatable.__ipairs = function (t) -- Called when ipairs is run on the args table. return inext, t, 0 end return args end return arguments 3134ecce8429b810d445e29eae115e2ae4c36c53 Module:Message box 828 11 396 141 2023-06-06T09:19:34Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:Message_box]]: w Scribunto text/plain -- This is a meta-module for producing message box templates, including -- {{mbox}}, {{ambox}}, {{imbox}}, {{tmbox}}, {{ombox}}, {{cmbox}} and {{fmbox}}. -- Load necessary modules. require('strict') local getArgs local yesno = require('Module:Yesno') -- Get a language object for formatDate and ucfirst. local lang = mw.language.getContentLanguage() -- Define constants local CONFIG_MODULE = 'Module:Message box/configuration' local DEMOSPACES = {talk = 'tmbox', image = 'imbox', file = 'imbox', category = 'cmbox', article = 'ambox', main = 'ambox'} local TEMPLATE_STYLES = 'Module:Message box/%s.css' -------------------------------------------------------------------------------- -- Helper functions -------------------------------------------------------------------------------- local function getTitleObject(...) -- Get the title object, passing the function through pcall -- in case we are over the expensive function count limit. local success, title = pcall(mw.title.new, ...) if success then return title end end local function union(t1, t2) -- Returns the union of two arrays. local vals = {} for i, v in ipairs(t1) do vals[v] = true end for i, v in ipairs(t2) do vals[v] = true end local ret = {} for k in pairs(vals) do table.insert(ret, k) end table.sort(ret) return ret end local function getArgNums(args, prefix) local nums = {} for k, v in pairs(args) do local num = mw.ustring.match(tostring(k), '^' .. prefix .. '([1-9]%d*)$') if num then table.insert(nums, tonumber(num)) end end table.sort(nums) return nums end -------------------------------------------------------------------------------- -- Box class definition -------------------------------------------------------------------------------- local MessageBox = {} MessageBox.__index = MessageBox function MessageBox.new(boxType, args, cfg) args = args or {} local obj = {} obj.boxType = boxType -- Set the title object and the namespace. obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle() -- Set the config for our box type. obj.cfg = cfg[boxType] if not obj.cfg then local ns = obj.title.namespace -- boxType is "mbox" or invalid input if args.demospace and args.demospace ~= '' then -- implement demospace parameter of mbox local demospace = string.lower(args.demospace) if DEMOSPACES[demospace] then -- use template from DEMOSPACES obj.cfg = cfg[DEMOSPACES[demospace]] obj.boxType = DEMOSPACES[demospace] elseif string.find( demospace, 'talk' ) then -- demo as a talk page obj.cfg = cfg.tmbox obj.boxType = 'tmbox' else -- default to ombox obj.cfg = cfg.ombox obj.boxType = 'ombox' end elseif ns == 0 then obj.cfg = cfg.ambox -- main namespace obj.boxType = 'ambox' elseif ns == 6 then obj.cfg = cfg.imbox -- file namespace obj.boxType = 'imbox' elseif ns == 14 then obj.cfg = cfg.cmbox -- category namespace obj.boxType = 'cmbox' else local nsTable = mw.site.namespaces[ns] if nsTable and nsTable.isTalk then obj.cfg = cfg.tmbox -- any talk namespace obj.boxType = 'tmbox' else obj.cfg = cfg.ombox -- other namespaces or invalid input obj.boxType = 'ombox' end end end -- Set the arguments, and remove all blank arguments except for the ones -- listed in cfg.allowBlankParams. do local newArgs = {} for k, v in pairs(args) do if v ~= '' then newArgs[k] = v end end for i, param in ipairs(obj.cfg.allowBlankParams or {}) do newArgs[param] = args[param] end obj.args = newArgs end -- Define internal data structure. obj.categories = {} obj.classes = {} -- For lazy loading of [[Module:Category handler]]. obj.hasCategories = false return setmetatable(obj, MessageBox) end function MessageBox:addCat(ns, cat, sort) if not cat then return nil end if sort then cat = string.format('[[Category:%s|%s]]', cat, sort) else cat = string.format('[[Category:%s]]', cat) end self.hasCategories = true self.categories[ns] = self.categories[ns] or {} table.insert(self.categories[ns], cat) end function MessageBox:addClass(class) if not class then return nil end self.classes[class] = 1 end function MessageBox:removeClass(class) if not class then return nil end self.classes[class] = nil end function MessageBox:setParameters() local args = self.args local cfg = self.cfg -- Get type data. self.type = args.type local typeData = cfg.types[self.type] self.invalidTypeError = cfg.showInvalidTypeError and self.type and not typeData typeData = typeData or cfg.types[cfg.default] self.typeClass = typeData.class self.typeImage = typeData.image -- Find if the box has been wrongly substituted. self.isSubstituted = cfg.substCheck and args.subst == 'SUBST' -- Find whether we are using a small message box. self.isSmall = cfg.allowSmall and ( cfg.smallParam and args.small == cfg.smallParam or not cfg.smallParam and yesno(args.small) ) -- Add attributes, classes and styles. self.id = args.id self.name = args.name for _, class in ipairs(cfg.classes or {}) do self:addClass(class) end if self.name then self:addClass('box-' .. string.gsub(self.name,' ','_')) end local plainlinks = yesno(args.plainlinks) if plainlinks == true then self:addClass('plainlinks') elseif plainlinks == false then self:removeClass('plainlinks') end if self.isSmall then self:addClass(cfg.smallClass or 'mbox-small') end self:addClass(self.typeClass) self:addClass(args.class) self.style = args.style self.attrs = args.attrs -- Set text style. self.textstyle = args.textstyle -- Find if we are on the template page or not. This functionality is only -- used if useCollapsibleTextFields is set, or if both cfg.templateCategory -- and cfg.templateCategoryRequireName are set. self.useCollapsibleTextFields = cfg.useCollapsibleTextFields if self.useCollapsibleTextFields or cfg.templateCategory and cfg.templateCategoryRequireName then if self.name then local templateName = mw.ustring.match( self.name, '^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$' ) or self.name templateName = 'Template:' .. templateName self.templateTitle = getTitleObject(templateName) end self.isTemplatePage = self.templateTitle and mw.title.equals(self.title, self.templateTitle) end -- Process data for collapsible text fields. At the moment these are only -- used in {{ambox}}. if self.useCollapsibleTextFields then -- Get the self.issue value. if self.isSmall and args.smalltext then self.issue = args.smalltext else local sect if args.sect == '' then sect = 'This ' .. (cfg.sectionDefault or 'page') elseif type(args.sect) == 'string' then sect = 'This ' .. args.sect end local issue = args.issue issue = type(issue) == 'string' and issue ~= '' and issue or nil local text = args.text text = type(text) == 'string' and text or nil local issues = {} table.insert(issues, sect) table.insert(issues, issue) table.insert(issues, text) self.issue = table.concat(issues, ' ') end -- Get the self.talk value. local talk = args.talk -- Show talk links on the template page or template subpages if the talk -- parameter is blank. if talk == '' and self.templateTitle and ( mw.title.equals(self.templateTitle, self.title) or self.title:isSubpageOf(self.templateTitle) ) then talk = '#' elseif talk == '' then talk = nil end if talk then -- If the talk value is a talk page, make a link to that page. Else -- assume that it's a section heading, and make a link to the talk -- page of the current page with that section heading. local talkTitle = getTitleObject(talk) local talkArgIsTalkPage = true if not talkTitle or not talkTitle.isTalkPage then talkArgIsTalkPage = false talkTitle = getTitleObject( self.title.text, mw.site.namespaces[self.title.namespace].talk.id ) end if talkTitle and talkTitle.exists then local talkText = 'Relevant discussion may be found on' if talkArgIsTalkPage then talkText = string.format( '%s [[%s|%s]].', talkText, talk, talkTitle.prefixedText ) else talkText = string.format( '%s the [[%s#%s|talk page]].', talkText, talkTitle.prefixedText, talk ) end self.talk = talkText end end -- Get other values. self.fix = args.fix ~= '' and args.fix or nil local date if args.date and args.date ~= '' then date = args.date elseif args.date == '' and self.isTemplatePage then date = lang:formatDate('F Y') end if date then self.date = string.format(" <small class='date-container'>''(<span class='date'>%s</span>)''</small>", date) end self.info = args.info if yesno(args.removalnotice) then self.removalNotice = cfg.removalNotice end end -- Set the non-collapsible text field. At the moment this is used by all box -- types other than ambox, and also by ambox when small=yes. if self.isSmall then self.text = args.smalltext or args.text else self.text = args.text end -- Set the below row. self.below = cfg.below and args.below -- General image settings. self.imageCellDiv = not self.isSmall and cfg.imageCellDiv self.imageEmptyCell = cfg.imageEmptyCell if cfg.imageEmptyCellStyle then self.imageEmptyCellStyle = 'border:none;padding:0px;width:1px' end -- Left image settings. local imageLeft = self.isSmall and args.smallimage or args.image if cfg.imageCheckBlank and imageLeft ~= 'blank' and imageLeft ~= 'none' or not cfg.imageCheckBlank and imageLeft ~= 'none' then self.imageLeft = imageLeft if not imageLeft then local imageSize = self.isSmall and (cfg.imageSmallSize or '30x30px') or '40x40px' self.imageLeft = string.format('[[File:%s|%s|link=|alt=]]', self.typeImage or 'Imbox notice.png', imageSize) end end -- Right image settings. local imageRight = self.isSmall and args.smallimageright or args.imageright if not (cfg.imageRightNone and imageRight == 'none') then self.imageRight = imageRight end end function MessageBox:setMainspaceCategories() local args = self.args local cfg = self.cfg if not cfg.allowMainspaceCategories then return nil end local nums = {} for _, prefix in ipairs{'cat', 'category', 'all'} do args[prefix .. '1'] = args[prefix] nums = union(nums, getArgNums(args, prefix)) end -- The following is roughly equivalent to the old {{Ambox/category}}. local date = args.date date = type(date) == 'string' and date local preposition = 'from' for _, num in ipairs(nums) do local mainCat = args['cat' .. tostring(num)] or args['category' .. tostring(num)] local allCat = args['all' .. tostring(num)] mainCat = type(mainCat) == 'string' and mainCat allCat = type(allCat) == 'string' and allCat if mainCat and date and date ~= '' then local catTitle = string.format('%s %s %s', mainCat, preposition, date) self:addCat(0, catTitle) catTitle = getTitleObject('Category:' .. catTitle) if not catTitle or not catTitle.exists then self:addCat(0, 'Articles with invalid date parameter in template') end elseif mainCat and (not date or date == '') then self:addCat(0, mainCat) end if allCat then self:addCat(0, allCat) end end end function MessageBox:setTemplateCategories() local args = self.args local cfg = self.cfg -- Add template categories. if cfg.templateCategory then if cfg.templateCategoryRequireName then if self.isTemplatePage then self:addCat(10, cfg.templateCategory) end elseif not self.title.isSubpage then self:addCat(10, cfg.templateCategory) end end -- Add template error categories. if cfg.templateErrorCategory then local templateErrorCategory = cfg.templateErrorCategory local templateCat, templateSort if not self.name and not self.title.isSubpage then templateCat = templateErrorCategory elseif self.isTemplatePage then local paramsToCheck = cfg.templateErrorParamsToCheck or {} local count = 0 for i, param in ipairs(paramsToCheck) do if not args[param] then count = count + 1 end end if count > 0 then templateCat = templateErrorCategory templateSort = tostring(count) end if self.categoryNums and #self.categoryNums > 0 then templateCat = templateErrorCategory templateSort = 'C' end end self:addCat(10, templateCat, templateSort) end end function MessageBox:setAllNamespaceCategories() -- Set categories for all namespaces. if self.isSubstituted then self:addCat('all', 'Pages with incorrectly substituted templates') end end function MessageBox:setCategories() if self.title.namespace == 0 then self:setMainspaceCategories() elseif self.title.namespace == 10 then self:setTemplateCategories() end self:setAllNamespaceCategories() end function MessageBox:renderCategories() if not self.hasCategories then -- No categories added, no need to pass them to Category handler so, -- if it was invoked, it would return the empty string. -- So we shortcut and return the empty string. return "" end -- Convert category tables to strings and pass them through -- [[Module:Category handler]]. return require('Module:Category handler')._main{ main = table.concat(self.categories[0] or {}), template = table.concat(self.categories[10] or {}), all = table.concat(self.categories.all or {}), nocat = self.args.nocat, page = self.args.page } end function MessageBox:export() local root = mw.html.create() -- Add the subst check error. if self.isSubstituted and self.name then root:tag('b') :addClass('error') :wikitext(string.format( 'Template <code>%s[[Template:%s|%s]]%s</code> has been incorrectly substituted.', mw.text.nowiki('{{'), self.name, self.name, mw.text.nowiki('}}') )) end -- Add TemplateStyles root:wikitext(mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = TEMPLATE_STYLES:format(self.boxType) }, }) -- Create the box table. local boxTable -- Check for fmbox because not all interface messages have mw-parser-output -- which is necessary for TemplateStyles. Add the wrapper class if it is and -- then start the actual mbox, else start the mbox. if self.boxType == 'fmbox' then boxTable = root:tag('div') :addClass('mw-parser-output') :tag('table') else boxTable = root:tag('table') end boxTable:attr('id', self.id or nil) for class, _ in pairs(self.classes or {}) do boxTable:addClass(class or nil) end boxTable :cssText(self.style or nil) :attr('role', 'presentation') if self.attrs then boxTable:attr(self.attrs) end -- Add the left-hand image. local row = boxTable:tag('tr') if self.imageLeft then local imageLeftCell = row:tag('td'):addClass('mbox-image') if self.imageCellDiv then -- If we are using a div, redefine imageLeftCell so that the image -- is inside it. Divs use style="width: 52px;", which limits the -- image width to 52px. If any images in a div are wider than that, -- they may overlap with the text or cause other display problems. imageLeftCell = imageLeftCell:tag('div'):css('width', '52px') end imageLeftCell:wikitext(self.imageLeft or nil) elseif self.imageEmptyCell then -- Some message boxes define an empty cell if no image is specified, and -- some don't. The old template code in templates where empty cells are -- specified gives the following hint: "No image. Cell with some width -- or padding necessary for text cell to have 100% width." row:tag('td') :addClass('mbox-empty-cell') :cssText(self.imageEmptyCellStyle or nil) end -- Add the text. local textCell = row:tag('td'):addClass('mbox-text') if self.useCollapsibleTextFields then -- The message box uses advanced text parameters that allow things to be -- collapsible. At the moment, only ambox uses this. textCell:cssText(self.textstyle or nil) local textCellDiv = textCell:tag('div') textCellDiv :addClass('mbox-text-span') :wikitext(self.issue or nil) if (self.talk or self.fix) and not self.isSmall then textCellDiv:tag('span') :addClass('hide-when-compact') :wikitext(self.talk and (' ' .. self.talk) or nil) :wikitext(self.fix and (' ' .. self.fix) or nil) end textCellDiv:wikitext(self.date and (' ' .. self.date) or nil) if self.info and not self.isSmall then textCellDiv :tag('span') :addClass('hide-when-compact') :wikitext(self.info and (' ' .. self.info) or nil) end if self.removalNotice then textCellDiv:tag('small') :addClass('hide-when-compact') :tag('i') :wikitext(string.format(" (%s)", self.removalNotice)) end else -- Default text formatting - anything goes. textCell :cssText(self.textstyle or nil) :wikitext(self.text or nil) end -- Add the right-hand image. if self.imageRight then local imageRightCell = row:tag('td'):addClass('mbox-imageright') if self.imageCellDiv then -- If we are using a div, redefine imageRightCell so that the image -- is inside it. imageRightCell = imageRightCell:tag('div'):css('width', '52px') end imageRightCell :wikitext(self.imageRight or nil) end -- Add the below row. if self.below then boxTable:tag('tr') :tag('td') :attr('colspan', self.imageRight and '3' or '2') :addClass('mbox-text') :cssText(self.textstyle or nil) :wikitext(self.below or nil) end -- Add error message for invalid type parameters. if self.invalidTypeError then root:tag('div') :css('text-align', 'center') :wikitext(string.format( 'This message box is using an invalid "type=%s" parameter and needs fixing.', self.type or '' )) end -- Add categories. root:wikitext(self:renderCategories() or nil) return tostring(root) end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p, mt = {}, {} function p._exportClasses() -- For testing. return { MessageBox = MessageBox } end function p.main(boxType, args, cfgTables) local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE)) box:setParameters() box:setCategories() return box:export() end function mt.__index(t, k) return function (frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end return t.main(k, getArgs(frame, {trim = false, removeBlanks = false})) end end return setmetatable(p, mt) fcf2586b774e6db72e0a2837019f5b445124ddc4 Module:No globals 828 168 398 397 2023-06-06T09:19:35Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:No_globals]]: w Scribunto text/plain local mt = getmetatable(_G) or {} function mt.__index (t, k) if k ~= 'arg' then -- perf optimization here and below: do not load Module:TNT unless there is an error error(require('Module:TNT').format('I18n/No globals', 'err-read', tostring(k)), 2) end return nil end function mt.__newindex(t, k, v) if k ~= 'arg' then error(require('Module:TNT').format('I18n/No globals', 'err-write', tostring(k)), 2) end rawset(t, k, v) end setmetatable(_G, mt) efcb47c74e7e2bb9a4ad8764d99a0afce8fed410 Module:Documentation 828 25 400 241 2023-06-06T09:19:35Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:Documentation]]: w Scribunto text/plain -- This module implements {{documentation}}. -- Get required modules. local getArgs = require('Module:Arguments').getArgs local messageBox = require('Module:Message box') -- Get the config table. local cfg = mw.loadData('Module:Documentation/config') local i18n = mw.loadData('Module:Documentation/i18n') local p = {} -- Often-used functions. local ugsub = mw.ustring.gsub ---------------------------------------------------------------------------- -- Helper functions -- -- These are defined as local functions, but are made available in the p -- table for testing purposes. ---------------------------------------------------------------------------- local function message(cfgKey, valArray, expectType) --[[ -- Gets a message from the cfg table and formats it if appropriate. -- The function raises an error if the value from the cfg table is not -- of the type expectType. The default type for expectType is 'string'. -- If the table valArray is present, strings such as $1, $2 etc. in the -- message are substituted with values from the table keys [1], [2] etc. -- For example, if the message "foo-message" had the value 'Foo $2 bar $1.', -- message('foo-message', {'baz', 'qux'}) would return "Foo qux bar baz." --]] local msg = cfg[cfgKey] expectType = expectType or 'string' if type(msg) ~= expectType then error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-type', cfgKey, expectType, type(msg)), 2) end if not valArray then return msg end local function getMessageVal(match) match = tonumber(match) return valArray[match] or error(require('Module:TNT').format('I18n/Documentation', 'cfg-error-msg-empty', '$' .. match, cfgKey), 4) end local ret = ugsub(msg, '$([1-9][0-9]*)', getMessageVal) return ret end p.message = message local function makeWikilink(page, display) if display then return mw.ustring.format('[[%s|%s]]', page, display) else return mw.ustring.format('[[%s]]', page) end end p.makeWikilink = makeWikilink local function makeCategoryLink(cat, sort) local catns = mw.site.namespaces[14].name return makeWikilink(catns .. ':' .. cat, sort) end p.makeCategoryLink = makeCategoryLink local function makeUrlLink(url, display) return mw.ustring.format('[%s %s]', url, display) end p.makeUrlLink = makeUrlLink local function makeToolbar(...) local ret = {} local lim = select('#', ...) if lim < 1 then return nil end for i = 1, lim do ret[#ret + 1] = select(i, ...) end return '<small style="font-style: normal;">(' .. table.concat(ret, ' &#124; ') .. ')</small>' end p.makeToolbar = makeToolbar ---------------------------------------------------------------------------- -- Argument processing ---------------------------------------------------------------------------- local function makeInvokeFunc(funcName) return function (frame) local args = getArgs(frame, { valueFunc = function (key, value) if type(value) == 'string' then value = value:match('^%s*(.-)%s*$') -- Remove whitespace. if key == 'heading' or value ~= '' then return value else return nil end else return value end end }) return p[funcName](args) end end ---------------------------------------------------------------------------- -- Load TemplateStyles ---------------------------------------------------------------------------- p.main = function(frame) local parent = frame.getParent(frame) local output = p._main(parent.args) return frame:extensionTag{ name='templatestyles', args = { src= message('templatestyles-scr') } } .. output end ---------------------------------------------------------------------------- -- Main function ---------------------------------------------------------------------------- function p._main(args) --[[ -- This function defines logic flow for the module. -- @args - table of arguments passed by the user -- -- Messages: -- 'main-div-id' --> 'template-documentation' -- 'main-div-classes' --> 'template-documentation iezoomfix' --]] local env = p.getEnvironment(args) local root = mw.html.create() root :wikitext(p._getModuleWikitext(args, env)) :wikitext(p.protectionTemplate(env)) :wikitext(p.sandboxNotice(args, env)) -- This div tag is from {{documentation/start box}}, but moving it here -- so that we don't have to worry about unclosed tags. :tag('div') :attr('id', message('main-div-id')) :addClass(message('main-div-class')) :wikitext(p._startBox(args, env)) :wikitext(p._content(args, env)) :done() :wikitext(p._endBox(args, env)) :wikitext(p.addTrackingCategories(env)) return tostring(root) end ---------------------------------------------------------------------------- -- Environment settings ---------------------------------------------------------------------------- function p.getEnvironment(args) --[[ -- Returns a table with information about the environment, including title objects and other namespace- or -- path-related data. -- @args - table of arguments passed by the user -- -- Title objects include: -- env.title - the page we are making documentation for (usually the current title) -- env.templateTitle - the template (or module, file, etc.) -- env.docTitle - the /doc subpage. -- env.sandboxTitle - the /sandbox subpage. -- env.testcasesTitle - the /testcases subpage. -- env.printTitle - the print version of the template, located at the /Print subpage. -- -- Data includes: -- env.protectionLevels - the protection levels table of the title object. -- env.subjectSpace - the number of the title's subject namespace. -- env.docSpace - the number of the namespace the title puts its documentation in. -- env.docpageBase - the text of the base page of the /doc, /sandbox and /testcases pages, with namespace. -- env.compareUrl - URL of the Special:ComparePages page comparing the sandbox with the template. -- -- All table lookups are passed through pcall so that errors are caught. If an error occurs, the value -- returned will be nil. --]] local env, envFuncs = {}, {} -- Set up the metatable. If triggered we call the corresponding function in the envFuncs table. The value -- returned by that function is memoized in the env table so that we don't call any of the functions -- more than once. (Nils won't be memoized.) setmetatable(env, { __index = function (t, key) local envFunc = envFuncs[key] if envFunc then local success, val = pcall(envFunc) if success then env[key] = val -- Memoise the value. return val end end return nil end }) function envFuncs.title() -- The title object for the current page, or a test page passed with args.page. local title local titleArg = args.page if titleArg then title = mw.title.new(titleArg) else title = mw.title.getCurrentTitle() end return title end function envFuncs.templateTitle() --[[ -- The template (or module, etc.) title object. -- Messages: -- 'sandbox-subpage' --> 'sandbox' -- 'testcases-subpage' --> 'testcases' --]] local subjectSpace = env.subjectSpace local title = env.title local subpage = title.subpageText if subpage == message('sandbox-subpage') or subpage == message('testcases-subpage') then return mw.title.makeTitle(subjectSpace, title.baseText) else return mw.title.makeTitle(subjectSpace, title.text) end end function envFuncs.docTitle() --[[ -- Title object of the /doc subpage. -- Messages: -- 'doc-subpage' --> 'doc' --]] local title = env.title local docname = args[1] -- User-specified doc page. local docpage if docname then docpage = docname else docpage = env.docpageBase .. '/' .. message('doc-subpage') end return mw.title.new(docpage) end function envFuncs.sandboxTitle() --[[ -- Title object for the /sandbox subpage. -- Messages: -- 'sandbox-subpage' --> 'sandbox' --]] return mw.title.new(env.docpageBase .. '/' .. message('sandbox-subpage')) end function envFuncs.testcasesTitle() --[[ -- Title object for the /testcases subpage. -- Messages: -- 'testcases-subpage' --> 'testcases' --]] return mw.title.new(env.docpageBase .. '/' .. message('testcases-subpage')) end function envFuncs.printTitle() --[[ -- Title object for the /Print subpage. -- Messages: -- 'print-subpage' --> 'Print' --]] return env.templateTitle:subPageTitle(message('print-subpage')) end function envFuncs.protectionLevels() -- The protection levels table of the title object. return env.title.protectionLevels end function envFuncs.subjectSpace() -- The subject namespace number. return mw.site.namespaces[env.title.namespace].subject.id end function envFuncs.docSpace() -- The documentation namespace number. For most namespaces this is the same as the -- subject namespace. However, pages in the Article, File, MediaWiki or Category -- namespaces must have their /doc, /sandbox and /testcases pages in talk space. local subjectSpace = env.subjectSpace if subjectSpace == 0 or subjectSpace == 6 or subjectSpace == 8 or subjectSpace == 14 then return subjectSpace + 1 else return subjectSpace end end function envFuncs.docpageBase() -- The base page of the /doc, /sandbox, and /testcases subpages. -- For some namespaces this is the talk page, rather than the template page. local templateTitle = env.templateTitle local docSpace = env.docSpace local docSpaceText = mw.site.namespaces[docSpace].name -- Assemble the link. docSpace is never the main namespace, so we can hardcode the colon. return docSpaceText .. ':' .. templateTitle.text end function envFuncs.compareUrl() -- Diff link between the sandbox and the main template using [[Special:ComparePages]]. local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle if templateTitle.exists and sandboxTitle.exists then local compareUrl = mw.uri.fullUrl( 'Special:ComparePages', {page1 = templateTitle.prefixedText, page2 = sandboxTitle.prefixedText} ) return tostring(compareUrl) else return nil end end return env end ---------------------------------------------------------------------------- -- Auxiliary templates ---------------------------------------------------------------------------- p.getModuleWikitext = makeInvokeFunc('_getModuleWikitext') function p._getModuleWikitext(args, env) local currentTitle = mw.title.getCurrentTitle() if currentTitle.contentModel ~= 'Scribunto' then return end pcall(require, currentTitle.prefixedText) -- if it fails, we don't care local moduleWikitext = package.loaded["Module:Module wikitext"] if moduleWikitext then return moduleWikitext.main() end end function p.sandboxNotice(args, env) --[=[ -- Generates a sandbox notice for display above sandbox pages. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-notice-image' --> '[[Image:Sandbox.svg|50px|alt=|link=]]' -- 'sandbox-notice-blurb' --> 'This is the $1 for $2.' -- 'sandbox-notice-diff-blurb' --> 'This is the $1 for $2 ($3).' -- 'sandbox-notice-pagetype-template' --> '[[w:Wikipedia:Template test cases|template sandbox]] page' -- 'sandbox-notice-pagetype-module' --> '[[w:Wikipedia:Template test cases|module sandbox]] page' -- 'sandbox-notice-pagetype-other' --> 'sandbox page' -- 'sandbox-notice-compare-link-display' --> 'diff' -- 'sandbox-notice-testcases-blurb' --> 'See also the companion subpage for $1.' -- 'sandbox-notice-testcases-link-display' --> 'test cases' -- 'sandbox-category' --> 'Template sandboxes' --]=] local title = env.title local sandboxTitle = env.sandboxTitle local templateTitle = env.templateTitle local subjectSpace = env.subjectSpace if not (subjectSpace and title and sandboxTitle and templateTitle and mw.title.equals(title, sandboxTitle)) then return nil end -- Build the table of arguments to pass to {{ombox}}. We need just two fields, "image" and "text". local omargs = {} omargs.image = message('sandbox-notice-image') -- Get the text. We start with the opening blurb, which is something like -- "This is the template sandbox for [[Template:Foo]] (diff)." local text = '' local frame = mw.getCurrentFrame() local isPreviewing = frame:preprocess('{{REVISIONID}}') == '' -- True if the page is being previewed. local pagetype if subjectSpace == 10 then pagetype = message('sandbox-notice-pagetype-template') elseif subjectSpace == 828 then pagetype = message('sandbox-notice-pagetype-module') else pagetype = message('sandbox-notice-pagetype-other') end local templateLink = makeWikilink(templateTitle.prefixedText) local compareUrl = env.compareUrl if isPreviewing or not compareUrl then text = text .. message('sandbox-notice-blurb', {pagetype, templateLink}) else local compareDisplay = message('sandbox-notice-compare-link-display') local compareLink = makeUrlLink(compareUrl, compareDisplay) text = text .. message('sandbox-notice-diff-blurb', {pagetype, templateLink, compareLink}) end -- Get the test cases page blurb if the page exists. This is something like -- "See also the companion subpage for [[Template:Foo/testcases|test cases]]." local testcasesTitle = env.testcasesTitle if testcasesTitle and testcasesTitle.exists then if testcasesTitle.contentModel == "Scribunto" then local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesRunLinkDisplay = message('sandbox-notice-testcases-run-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) local testcasesRunLink = makeWikilink(testcasesTitle.talkPageTitle.prefixedText, testcasesRunLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-run-blurb', {testcasesLink, testcasesRunLink}) else local testcasesLinkDisplay = message('sandbox-notice-testcases-link-display') local testcasesLink = makeWikilink(testcasesTitle.prefixedText, testcasesLinkDisplay) text = text .. '<br />' .. message('sandbox-notice-testcases-blurb', {testcasesLink}) end end -- Add the sandbox to the sandbox category. text = text .. makeCategoryLink(message('sandbox-category')) omargs.text = text omargs.class = message('sandbox-class') local ret = '<div style="clear: both;"></div>' ret = ret .. messageBox.main('ombox', omargs) return ret end function p.protectionTemplate(env) -- Generates the padlock icon in the top right. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'protection-template' --> 'pp-template' -- 'protection-template-args' --> {docusage = 'yes'} local title = env.title local protectionLevels local protectionTemplate = message('protection-template') local namespace = title.namespace if not (protectionTemplate and (namespace == 10 or namespace == 828)) then -- Don't display the protection template if we are not in the template or module namespaces. return nil end protectionLevels = env.protectionLevels if not protectionLevels then return nil end local editLevels = protectionLevels.edit local moveLevels = protectionLevels.move if moveLevels and moveLevels[1] == 'sysop' or editLevels and editLevels[1] then -- The page is full-move protected, or full, template, or semi-protected. local frame = mw.getCurrentFrame() return frame:expandTemplate{title = protectionTemplate, args = message('protection-template-args', nil, 'table')} else return nil end end ---------------------------------------------------------------------------- -- Start box ---------------------------------------------------------------------------- p.startBox = makeInvokeFunc('_startBox') function p._startBox(args, env) --[[ -- This function generates the start box. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- The actual work is done by p.makeStartBoxLinksData and p.renderStartBoxLinks which make -- the [view] [edit] [history] [purge] links, and by p.makeStartBoxData and p.renderStartBox -- which generate the box HTML. --]] env = env or p.getEnvironment(args) local links local content = args.content if not content then -- No need to include the links if the documentation is on the template page itself. local linksData = p.makeStartBoxLinksData(args, env) if linksData then links = p.renderStartBoxLinks(linksData) end end -- Generate the start box html. local data = p.makeStartBoxData(args, env, links) if data then return p.renderStartBox(data) else -- User specified no heading. return nil end end function p.makeStartBoxLinksData(args, env) --[[ -- Does initial processing of data to make the [view] [edit] [history] [purge] links. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'view-link-display' --> 'view' -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'purge-link-display' --> 'purge' -- 'file-docpage-preload' --> 'Template:Documentation/preload-filespace' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'docpage-preload' --> 'Template:Documentation/preload' -- 'create-link-display' --> 'create' --]] local subjectSpace = env.subjectSpace local title = env.title local docTitle = env.docTitle if not title or not docTitle then return nil end if docTitle.isRedirect then docTitle = docTitle.redirectTarget end local data = {} data.title = title data.docTitle = docTitle -- View, display, edit, and purge links if /doc exists. data.viewLinkDisplay = i18n['view-link-display'] data.editLinkDisplay = i18n['edit-link-display'] data.historyLinkDisplay = i18n['history-link-display'] data.purgeLinkDisplay = i18n['purge-link-display'] -- Create link if /doc doesn't exist. local preload = args.preload if not preload then if subjectSpace == 6 then -- File namespace preload = message('file-docpage-preload') elseif subjectSpace == 828 then -- Module namespace preload = message('module-preload') else preload = message('docpage-preload') end end data.preload = preload data.createLinkDisplay = i18n['create-link-display'] return data end function p.renderStartBoxLinks(data) --[[ -- Generates the [view][edit][history][purge] or [create] links from the data table. -- @data - a table of data generated by p.makeStartBoxLinksData --]] local function escapeBrackets(s) -- Escapes square brackets with HTML entities. s = s:gsub('%[', '&#91;') -- Replace square brackets with HTML entities. s = s:gsub('%]', '&#93;') return s end local ret local docTitle = data.docTitle local title = data.title if docTitle.exists then local viewLink = makeWikilink(docTitle.prefixedText, data.viewLinkDisplay) local editLink = makeUrlLink(docTitle:fullUrl{action = 'edit'}, data.editLinkDisplay) local historyLink = makeUrlLink(docTitle:fullUrl{action = 'history'}, data.historyLinkDisplay) local purgeLink = makeUrlLink(title:fullUrl{action = 'purge'}, data.purgeLinkDisplay) ret = '[%s] [%s] [%s] [%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, viewLink, editLink, historyLink, purgeLink) else local createLink = makeUrlLink(docTitle:fullUrl{action = 'edit', preload = data.preload}, data.createLinkDisplay) ret = '[%s]' ret = escapeBrackets(ret) ret = mw.ustring.format(ret, createLink) end return ret end function p.makeStartBoxData(args, env, links) --[=[ -- Does initial processing of data to pass to the start-box render function, p.renderStartBox. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- @links - a string containing the [view][edit][history][purge] links - could be nil if there's an error. -- -- Messages: -- 'documentation-icon-wikitext' --> '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' -- 'template-namespace-heading' --> 'Template documentation' -- 'module-namespace-heading' --> 'Module documentation' -- 'file-namespace-heading' --> 'Summary' -- 'other-namespaces-heading' --> 'Documentation' -- 'start-box-linkclasses' --> 'mw-editsection-like plainlinks' -- 'start-box-link-id' --> 'doc_editlinks' -- 'testcases-create-link-display' --> 'create' --]=] local subjectSpace = env.subjectSpace if not subjectSpace then -- Default to an "other namespaces" namespace, so that we get at least some output -- if an error occurs. subjectSpace = 2 end local data = {} -- Heading local heading = args.heading -- Blank values are not removed. if heading == '' then -- Don't display the start box if the heading arg is defined but blank. return nil end if heading then data.heading = heading elseif subjectSpace == 10 then -- Template namespace data.heading = i18n['template-namespace-heading'] elseif subjectSpace == 828 then -- Module namespace data.heading = i18n['module-namespace-heading'] elseif subjectSpace == 6 then -- File namespace data.heading = i18n['file-namespace-heading'] else data.heading = i18n['other-namespaces-heading'] end -- Data for the [view][edit][history][purge] or [create] links. if links then data.linksClass = message('start-box-linkclasses') data.linksId = message('start-box-link-id') data.links = links end return data end function p.renderStartBox(data) -- Renders the start box html. -- @data - a table of data generated by p.makeStartBoxData. local sbox = mw.html.create('div') sbox :addClass(message('header-div-class')) :tag('div') :addClass(message('heading-div-class')) :wikitext(data.heading) local links = data.links if links then sbox :tag('div') :addClass(data.linksClass) :attr('id', data.linksId) :wikitext(links) end return tostring(sbox) end ---------------------------------------------------------------------------- -- Documentation content ---------------------------------------------------------------------------- p.content = makeInvokeFunc('_content') function p._content(args, env) -- Displays the documentation contents -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment env = env or p.getEnvironment(args) local docTitle = env.docTitle local content = args.content if not content and docTitle and docTitle.exists then content = args._content or mw.getCurrentFrame():expandTemplate{title = docTitle} end -- The line breaks below are necessary so that "=== Headings ===" at the start and end -- of docs are interpreted correctly. local cbox = mw.html.create('div') cbox :addClass(message('content-div-class')) :wikitext('\n' .. (content or '') .. '\n') return tostring(cbox) end p.contentTitle = makeInvokeFunc('_contentTitle') function p._contentTitle(args, env) env = env or p.getEnvironment(args) local docTitle = env.docTitle if not args.content and docTitle and docTitle.exists then return docTitle.prefixedText else return '' end end ---------------------------------------------------------------------------- -- End box ---------------------------------------------------------------------------- p.endBox = makeInvokeFunc('_endBox') function p._endBox(args, env) --[=[ -- This function generates the end box (also known as the link box). -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment --]=] -- Get environment data. env = env or p.getEnvironment(args) local subjectSpace = env.subjectSpace local docTitle = env.docTitle if not subjectSpace or not docTitle then return nil end -- Check whether we should output the end box at all. Add the end -- box by default if the documentation exists or if we are in the -- user, module or template namespaces. local linkBox = args['link box'] if linkBox == 'off' or not ( docTitle.exists or subjectSpace == 2 or subjectSpace == 828 or subjectSpace == 10 ) then return nil end -- Assemble the footer text field. local text = '' if linkBox then text = text .. linkBox else text = text .. (p.makeDocPageBlurb(args, env) or '') -- "This documentation is transcluded from [[Foo]]." if subjectSpace == 2 or subjectSpace == 10 or subjectSpace == 828 then -- We are in the user, template or module namespaces. -- Add sandbox and testcases links. -- "Editors can experiment in this template's sandbox and testcases pages." text = text .. (p.makeExperimentBlurb(args, env) or '') text = text .. '<br />' if not args.content and not args[1] then -- "Please add categories to the /doc subpage." -- Don't show this message with inline docs or with an explicitly specified doc page, -- as then it is unclear where to add the categories. text = text .. (p.makeCategoriesBlurb(args, env) or '') end text = text .. ' ' .. (p.makeSubpagesBlurb(args, env) or '') --"Subpages of this template" local printBlurb = p.makePrintBlurb(args, env) -- Two-line blurb about print versions of templates. if printBlurb then text = text .. '<br />' .. printBlurb end end end local ebox = mw.html.create('div') ebox :addClass(message('footer-div-class')) :wikitext(text) return tostring(ebox) end function p.makeDocPageBlurb(args, env) --[=[ -- Makes the blurb "This documentation is transcluded from [[Template:Foo]] (edit, history)". -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'edit-link-display' --> 'edit' -- 'history-link-display' --> 'history' -- 'transcluded-from-blurb' --> -- 'The above [[w:Wikipedia:Template documentation|documentation]] -- is [[w:Wikipedia:Transclusion|transcluded]] from $1.' -- 'module-preload' --> 'Template:Documentation/preload-module-doc' -- 'create-link-display' --> 'create' -- 'create-module-doc-blurb' --> -- 'You might want to $1 a documentation page for this [[w:Wikipedia:Lua|Scribunto module]].' --]=] local docTitle = env.docTitle if not docTitle or args.content then return nil end local ret if docTitle.exists then -- /doc exists; link to it. local docLink = makeWikilink(docTitle.prefixedText) local editUrl = docTitle:fullUrl{action = 'edit'} local editDisplay = i18n['edit-link-display'] local editLink = makeUrlLink(editUrl, editDisplay) local historyUrl = docTitle:fullUrl{action = 'history'} local historyDisplay = i18n['history-link-display'] local historyLink = makeUrlLink(historyUrl, historyDisplay) ret = message('transcluded-from-blurb', {docLink}) .. ' ' .. makeToolbar(editLink, historyLink) .. '<br />' elseif env.subjectSpace == 828 then -- /doc does not exist; ask to create it. local createUrl = docTitle:fullUrl{action = 'edit', preload = message('module-preload')} local createDisplay = i18n['create-link-display'] local createLink = makeUrlLink(createUrl, createDisplay) ret = message('create-module-doc-blurb', {createLink}) .. '<br />' end return ret end function p.makeExperimentBlurb(args, env) --[[ -- Renders the text "Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'sandbox-link-display' --> 'sandbox' -- 'sandbox-edit-link-display' --> 'edit' -- 'compare-link-display' --> 'diff' -- 'module-sandbox-preload' --> 'Template:Documentation/preload-module-sandbox' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'sandbox-create-link-display' --> 'create' -- 'mirror-edit-summary' --> 'Create sandbox version of $1' -- 'mirror-link-display' --> 'mirror' -- 'mirror-link-preload' --> 'Template:Documentation/mirror' -- 'sandbox-link-display' --> 'sandbox' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display'--> 'edit' -- 'template-sandbox-preload' --> 'Template:Documentation/preload-sandbox' -- 'testcases-create-link-display' --> 'create' -- 'testcases-link-display' --> 'testcases' -- 'testcases-edit-link-display' --> 'edit' -- 'module-testcases-preload' --> 'Template:Documentation/preload-module-testcases' -- 'template-testcases-preload' --> 'Template:Documentation/preload-testcases' -- 'experiment-blurb-module' --> 'Editors can experiment in this module's $1 and $2 pages.' -- 'experiment-blurb-template' --> 'Editors can experiment in this template's $1 and $2 pages.' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle local sandboxTitle = env.sandboxTitle local testcasesTitle = env.testcasesTitle local templatePage = templateTitle.prefixedText if not subjectSpace or not templateTitle or not sandboxTitle or not testcasesTitle then return nil end -- Make links. local sandboxLinks, testcasesLinks if sandboxTitle.exists then local sandboxPage = sandboxTitle.prefixedText local sandboxDisplay = message('sandbox-link-display') local sandboxLink = makeWikilink(sandboxPage, sandboxDisplay) local sandboxEditUrl = sandboxTitle:fullUrl{action = 'edit'} local sandboxEditDisplay = message('sandbox-edit-link-display') local sandboxEditLink = makeUrlLink(sandboxEditUrl, sandboxEditDisplay) local compareUrl = env.compareUrl local compareLink if compareUrl then local compareDisplay = message('compare-link-display') compareLink = makeUrlLink(compareUrl, compareDisplay) end sandboxLinks = sandboxLink .. ' ' .. makeToolbar(sandboxEditLink, compareLink) else local sandboxPreload if subjectSpace == 828 then sandboxPreload = message('module-sandbox-preload') else sandboxPreload = message('template-sandbox-preload') end local sandboxCreateUrl = sandboxTitle:fullUrl{action = 'edit', preload = sandboxPreload} local sandboxCreateDisplay = message('sandbox-create-link-display') local sandboxCreateLink = makeUrlLink(sandboxCreateUrl, sandboxCreateDisplay) local mirrorSummary = message('mirror-edit-summary', {makeWikilink(templatePage)}) local mirrorPreload = message('mirror-link-preload') local mirrorUrl = sandboxTitle:fullUrl{action = 'edit', preload = mirrorPreload, summary = mirrorSummary} local mirrorDisplay = message('mirror-link-display') local mirrorLink = makeUrlLink(mirrorUrl, mirrorDisplay) sandboxLinks = message('sandbox-link-display') .. ' ' .. makeToolbar(sandboxCreateLink, mirrorLink) end if testcasesTitle.exists then local testcasesPage = testcasesTitle.prefixedText local testcasesDisplay = message('testcases-link-display') local testcasesLink = makeWikilink(testcasesPage, testcasesDisplay) local testcasesEditUrl = testcasesTitle:fullUrl{action = 'edit'} local testcasesEditDisplay = message('testcases-edit-link-display') local testcasesEditLink = makeUrlLink(testcasesEditUrl, testcasesEditDisplay) testcasesLinks = testcasesLink .. ' ' .. makeToolbar(testcasesEditLink) else local testcasesPreload if subjectSpace == 828 then testcasesPreload = message('module-testcases-preload') else testcasesPreload = message('template-testcases-preload') end local testcasesCreateUrl = testcasesTitle:fullUrl{action = 'edit', preload = testcasesPreload} local testcasesCreateDisplay = message('testcases-create-link-display') local testcasesCreateLink = makeUrlLink(testcasesCreateUrl, testcasesCreateDisplay) testcasesLinks = message('testcases-link-display') .. ' ' .. makeToolbar(testcasesCreateLink) end local messageName if subjectSpace == 828 then messageName = 'experiment-blurb-module' else messageName = 'experiment-blurb-template' end return message(messageName, {sandboxLinks, testcasesLinks}) end function p.makeCategoriesBlurb(args, env) --[[ -- Generates the text "Please add categories to the /doc subpage." -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'doc-link-display' --> '/doc' -- 'add-categories-blurb' --> 'Please add categories to the $1 subpage.' --]] local docTitle = env.docTitle if not docTitle then return nil end local docPathLink = makeWikilink(docTitle.prefixedText, message('doc-link-display')) return message('add-categories-blurb', {docPathLink}) end function p.makeSubpagesBlurb(args, env) --[[ -- Generates the "Subpages of this template" link. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'template-pagetype' --> 'template' -- 'module-pagetype' --> 'module' -- 'default-pagetype' --> 'page' -- 'subpages-link-display' --> 'Subpages of this $1' --]] local subjectSpace = env.subjectSpace local templateTitle = env.templateTitle if not subjectSpace or not templateTitle then return nil end local pagetype if subjectSpace == 10 then pagetype = message('template-pagetype') elseif subjectSpace == 828 then pagetype = message('module-pagetype') else pagetype = message('default-pagetype') end local subpagesLink = makeWikilink( 'Special:PrefixIndex/' .. templateTitle.prefixedText .. '/', message('subpages-link-display', {pagetype}) ) return message('subpages-blurb', {subpagesLink}) end function p.makePrintBlurb(args, env) --[=[ -- Generates the blurb displayed when there is a print version of the template available. -- @args - a table of arguments passed by the user -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- -- Messages: -- 'print-link-display' --> '/Print' -- 'print-blurb' --> 'A [[Help:Books/for experts#Improving the book layout|print version]]' -- .. ' of this template exists at $1.' -- .. ' If you make a change to this template, please update the print version as well.' -- 'display-print-category' --> true -- 'print-category' --> 'Templates with print versions' --]=] local printTitle = env.printTitle if not printTitle then return nil end local ret if printTitle.exists then local printLink = makeWikilink(printTitle.prefixedText, message('print-link-display')) ret = message('print-blurb', {printLink}) local displayPrintCategory = message('display-print-category', nil, 'boolean') if displayPrintCategory then ret = ret .. makeCategoryLink(message('print-category')) end end return ret end ---------------------------------------------------------------------------- -- Tracking categories ---------------------------------------------------------------------------- function p.addTrackingCategories(env) --[[ -- Check if {{documentation}} is transcluded on a /doc or /testcases page. -- @env - environment table containing title objects, etc., generated with p.getEnvironment -- Messages: -- 'display-strange-usage-category' --> true -- 'doc-subpage' --> 'doc' -- 'testcases-subpage' --> 'testcases' -- 'strange-usage-category' --> 'Wikipedia pages with strange ((documentation)) usage' -- -- /testcases pages in the module namespace are not categorised, as they may have -- {{documentation}} transcluded automatically. --]] local title = env.title local subjectSpace = env.subjectSpace if not title or not subjectSpace then return nil end local subpage = title.subpageText local ret = '' if message('display-strange-usage-category', nil, 'boolean') and ( subpage == message('doc-subpage') or subjectSpace ~= 828 and subpage == message('testcases-subpage') ) then ret = ret .. makeCategoryLink(message('strange-usage-category')) end return ret end return p 0e23eec0d3c20c23afcd28849e240b9083dbcf88 Module:Documentation/config 828 26 402 243 2023-06-06T09:19:35Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:Documentation/config]]: w Scribunto text/plain ---------------------------------------------------------------------------------------------------- -- -- Configuration for Module:Documentation -- -- Here you can set the values of the parameters and messages used in Module:Documentation to -- localise it to your wiki and your language. Unless specified otherwise, values given here -- should be string values. ---------------------------------------------------------------------------------------------------- local _format = require('Module:TNT').format local function format(id) return _format('I18n/Documentation', id) end local cfg = {} -- Do not edit this line. cfg['templatestyles-scr'] = 'Module:Documentation/styles.css' ---------------------------------------------------------------------------------------------------- -- Protection template configuration ---------------------------------------------------------------------------------------------------- -- cfg['protection-template'] -- The name of the template that displays the protection icon (a padlock on enwiki). cfg['protection-template'] = 'pp-template' -- cfg['protection-reason-edit'] -- The protection reason for edit-protected templates to pass to -- [[Module:Protection banner]]. cfg['protection-reason-edit'] = 'template' --[[ -- cfg['protection-template-args'] -- Any arguments to send to the protection template. This should be a Lua table. -- For example, if the protection template is "pp-template", and the wikitext template invocation -- looks like "{{pp-template|docusage=yes}}", then this table should look like "{docusage = 'yes'}". --]] cfg['protection-template-args'] = {docusage = 'yes'} --[[ ---------------------------------------------------------------------------------------------------- -- Sandbox notice configuration -- -- On sandbox pages the module can display a template notifying users that the current page is a -- sandbox, and the location of test cases pages, etc. The module decides whether the page is a -- sandbox or not based on the value of cfg['sandbox-subpage']. The following settings configure the -- messages that the notices contains. ---------------------------------------------------------------------------------------------------- --]] -- cfg['sandbox-notice-image'] -- The image displayed in the sandbox notice. cfg['sandbox-notice-image'] = '[[Image:Edit In Sandbox Icon - Color.svg|40px|alt=|link=]]' --[[ -- cfg['sandbox-notice-pagetype-template'] -- cfg['sandbox-notice-pagetype-module'] -- cfg['sandbox-notice-pagetype-other'] -- The page type of the sandbox page. The message that is displayed depends on the current subject -- namespace. This message is used in either cfg['sandbox-notice-blurb'] or -- cfg['sandbox-notice-diff-blurb']. --]] cfg['sandbox-notice-pagetype-template'] = format('sandbox-notice-pagetype-template') cfg['sandbox-notice-pagetype-module'] = format('sandbox-notice-pagetype-module') cfg['sandbox-notice-pagetype-other'] = format('sandbox-notice-pagetype-other') --[[ -- cfg['sandbox-notice-blurb'] -- cfg['sandbox-notice-diff-blurb'] -- cfg['sandbox-notice-diff-display'] -- Either cfg['sandbox-notice-blurb'] or cfg['sandbox-notice-diff-blurb'] is the opening sentence -- of the sandbox notice. The latter has a diff link, but the former does not. $1 is the page -- type, which is either cfg['sandbox-notice-pagetype-template'], -- cfg['sandbox-notice-pagetype-module'] or cfg['sandbox-notice-pagetype-other'] depending what -- namespace we are in. $2 is a link to the main template page, and $3 is a diff link between -- the sandbox and the main template. The display value of the diff link is set by -- cfg['sandbox-notice-compare-link-display']. --]] cfg['sandbox-notice-blurb'] = format('sandbox-notice-blurb') cfg['sandbox-notice-diff-blurb'] = format('sandbox-notice-diff-blurb') cfg['sandbox-notice-compare-link-display'] = format('sandbox-notice-compare-link-display') --[[ -- cfg['sandbox-notice-testcases-blurb'] -- cfg['sandbox-notice-testcases-link-display'] -- cfg['sandbox-notice-testcases-run-blurb'] -- cfg['sandbox-notice-testcases-run-link-display'] -- cfg['sandbox-notice-testcases-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit. $1 is a link to the test cases page. -- cfg['sandbox-notice-testcases-link-display'] is the display value for that link. -- cfg['sandbox-notice-testcases-run-blurb'] is a sentence notifying the user that there is a test cases page -- corresponding to this sandbox that they can edit, along with a link to run it. $1 is a link to the test -- cases page, and $2 is a link to the page to run it. -- cfg['sandbox-notice-testcases-run-link-display'] is the display value for the link to run the test -- cases. --]] cfg['sandbox-notice-testcases-blurb'] = format('sandbox-notice-testcases-blurb') cfg['sandbox-notice-testcases-link-display'] = format('sandbox-notice-testcases-link-display') cfg['sandbox-notice-testcases-run-blurb'] = format('sandbox-notice-testcases-run-blurb') cfg['sandbox-notice-testcases-run-link-display'] = format('sandbox-notice-testcases-run-link-display') -- cfg['sandbox-category'] -- A category to add to all template sandboxes. cfg['sandbox-category'] = 'Template sandboxes' ---------------------------------------------------------------------------------------------------- -- Start box configuration ---------------------------------------------------------------------------------------------------- -- cfg['documentation-icon-wikitext'] -- The wikitext for the icon shown at the top of the template. cfg['documentation-icon-wikitext'] = '[[File:Test Template Info-Icon - Version (2).svg|50px|link=|alt=Documentation icon]]' ---------------------------------------------------------------------------------------------------- -- Link box (end box) configuration ---------------------------------------------------------------------------------------------------- -- cfg['transcluded-from-blurb'] -- Notice displayed when the docs are transcluded from another page. $1 is a wikilink to that page. cfg['transcluded-from-blurb'] = format('transcluded-from-blurb') --[[ -- cfg['create-module-doc-blurb'] -- Notice displayed in the module namespace when the documentation subpage does not exist. -- $1 is a link to create the documentation page with the preload cfg['module-preload'] and the -- display cfg['create-link-display']. --]] cfg['create-module-doc-blurb'] = format('create-module-doc-blurb') ---------------------------------------------------------------------------------------------------- -- Experiment blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['experiment-blurb-template'] -- cfg['experiment-blurb-module'] -- The experiment blurb is the text inviting editors to experiment in sandbox and test cases pages. -- It is only shown in the template and module namespaces. With the default English settings, it -- might look like this: -- -- Editors can experiment in this template's sandbox (edit | diff) and testcases (edit) pages. -- -- In this example, "sandbox", "edit", "diff", "testcases", and "edit" would all be links. -- -- There are two versions, cfg['experiment-blurb-template'] and cfg['experiment-blurb-module'], depending -- on what namespace we are in. -- -- Parameters: -- -- $1 is a link to the sandbox page. If the sandbox exists, it is in the following format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-edit-link-display'] | cfg['compare-link-display']) -- -- If the sandbox doesn't exist, it is in the format: -- -- cfg['sandbox-link-display'] (cfg['sandbox-create-link-display'] | cfg['mirror-link-display']) -- -- The link for cfg['sandbox-create-link-display'] link preloads the page with cfg['template-sandbox-preload'] -- or cfg['module-sandbox-preload'], depending on the current namespace. The link for cfg['mirror-link-display'] -- loads a default edit summary of cfg['mirror-edit-summary']. -- -- $2 is a link to the test cases page. If the test cases page exists, it is in the following format: -- -- cfg['testcases-link-display'] (cfg['testcases-edit-link-display']) -- -- If the test cases page doesn't exist, it is in the format: -- -- cfg['testcases-link-display'] (cfg['testcases-create-link-display']) -- -- If the test cases page doesn't exist, the link for cfg['testcases-create-link-display'] preloads the -- page with cfg['template-testcases-preload'] or cfg['module-testcases-preload'], depending on the current -- namespace. --]] cfg['experiment-blurb-template'] = format('experiment-blurb-template') cfg['experiment-blurb-module'] = format('experiment-blurb-module') ---------------------------------------------------------------------------------------------------- -- Sandbox link configuration ---------------------------------------------------------------------------------------------------- -- cfg['sandbox-subpage'] -- The name of the template subpage typically used for sandboxes. cfg['sandbox-subpage'] = 'sandbox' -- cfg['template-sandbox-preload'] -- Preload file for template sandbox pages. cfg['template-sandbox-preload'] = 'Template:Documentation/preload-sandbox' -- cfg['module-sandbox-preload'] -- Preload file for Lua module sandbox pages. cfg['module-sandbox-preload'] = 'Template:Documentation/preload-module-sandbox' -- cfg['sandbox-link-display'] -- The text to display for "sandbox" links. cfg['sandbox-link-display'] = format('sandbox-link-display') -- cfg['sandbox-edit-link-display'] -- The text to display for sandbox "edit" links. cfg['sandbox-edit-link-display'] = format('sandbox-edit-link-display') -- cfg['sandbox-create-link-display'] -- The text to display for sandbox "create" links. cfg['sandbox-create-link-display'] = format('sandbox-create-link-display') -- cfg['compare-link-display'] -- The text to display for "compare" links. cfg['compare-link-display'] = format('compare-link-display') -- cfg['mirror-edit-summary'] -- The default edit summary to use when a user clicks the "mirror" link. $1 is a wikilink to the -- template page. cfg['mirror-edit-summary'] = 'Create sandbox version of $1' -- cfg['mirror-link-display'] -- The text to display for "mirror" links. cfg['mirror-link-display'] = format('mirror-link-display') -- cfg['mirror-link-preload'] -- The page to preload when a user clicks the "mirror" link. cfg['mirror-link-preload'] = 'Template:Documentation/mirror' ---------------------------------------------------------------------------------------------------- -- Test cases link configuration ---------------------------------------------------------------------------------------------------- -- cfg['testcases-subpage'] -- The name of the template subpage typically used for test cases. cfg['testcases-subpage'] = 'testcases' -- cfg['template-testcases-preload'] -- Preload file for template test cases pages. cfg['template-testcases-preload'] = 'Template:Documentation/preload-testcases' -- cfg['module-testcases-preload'] -- Preload file for Lua module test cases pages. cfg['module-testcases-preload'] = 'Template:Documentation/preload-module-testcases' -- cfg['testcases-link-display'] -- The text to display for "testcases" links. cfg['testcases-link-display'] = format('testcases-link-display') -- cfg['testcases-edit-link-display'] -- The text to display for test cases "edit" links. cfg['testcases-edit-link-display'] = format('testcases-edit-link-display') -- cfg['testcases-create-link-display'] -- The text to display for test cases "create" links. cfg['testcases-create-link-display'] = format('testcases-create-link-display') ---------------------------------------------------------------------------------------------------- -- Add categories blurb configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['add-categories-blurb'] -- Text to direct users to add categories to the /doc subpage. Not used if the "content" or -- "docname fed" arguments are set, as then it is not clear where to add the categories. $1 is a -- link to the /doc subpage with a display value of cfg['doc-link-display']. --]] cfg['add-categories-blurb'] = format('add-categories-blurb') -- cfg['doc-link-display'] -- The text to display when linking to the /doc subpage. cfg['doc-link-display'] = '/doc' ---------------------------------------------------------------------------------------------------- -- Subpages link configuration ---------------------------------------------------------------------------------------------------- --[[ -- cfg['subpages-blurb'] -- The "Subpages of this template" blurb. $1 is a link to the main template's subpages with a -- display value of cfg['subpages-link-display']. In the English version this blurb is simply -- the link followed by a period, and the link display provides the actual text. --]] cfg['subpages-blurb'] = format('subpages-blurb') --[[ -- cfg['subpages-link-display'] -- The text to display for the "subpages of this page" link. $1 is cfg['template-pagetype'], -- cfg['module-pagetype'] or cfg['default-pagetype'], depending on whether the current page is in -- the template namespace, the module namespace, or another namespace. --]] cfg['subpages-link-display'] = format('subpages-link-display') -- cfg['template-pagetype'] -- The pagetype to display for template pages. cfg['template-pagetype'] = format('template-pagetype') -- cfg['module-pagetype'] -- The pagetype to display for Lua module pages. cfg['module-pagetype'] = format('module-pagetype') -- cfg['default-pagetype'] -- The pagetype to display for pages other than templates or Lua modules. cfg['default-pagetype'] = format('default-pagetype') ---------------------------------------------------------------------------------------------------- -- Doc link configuration ---------------------------------------------------------------------------------------------------- -- cfg['doc-subpage'] -- The name of the subpage typically used for documentation pages. cfg['doc-subpage'] = 'doc' -- cfg['file-docpage-preload'] -- Preload file for documentation page in the file namespace. cfg['file-docpage-preload'] = 'Template:Documentation/preload-filespace' -- cfg['docpage-preload'] -- Preload file for template documentation pages in all namespaces. cfg['docpage-preload'] = 'Template:Documentation/preload' -- cfg['module-preload'] -- Preload file for Lua module documentation pages. cfg['module-preload'] = 'Template:Documentation/preload-module-doc' ---------------------------------------------------------------------------------------------------- -- Print version configuration ---------------------------------------------------------------------------------------------------- -- cfg['print-subpage'] -- The name of the template subpage used for print versions. cfg['print-subpage'] = 'Print' -- cfg['print-link-display'] -- The text to display when linking to the /Print subpage. cfg['print-link-display'] = '/Print' -- cfg['print-blurb'] -- Text to display if a /Print subpage exists. $1 is a link to the subpage with a display value of cfg['print-link-display']. cfg['print-blurb'] = format('print-blurb') -- cfg['display-print-category'] -- Set to true to enable output of cfg['print-category'] if a /Print subpage exists. -- This should be a boolean value (either true or false). cfg['display-print-category'] = true -- cfg['print-category'] -- Category to output if cfg['display-print-category'] is set to true, and a /Print subpage exists. cfg['print-category'] = 'Templates with print versions' ---------------------------------------------------------------------------------------------------- -- HTML and CSS configuration ---------------------------------------------------------------------------------------------------- -- cfg['main-div-id'] -- The "id" attribute of the main HTML "div" tag. cfg['main-div-id'] = 'template-documentation' -- cfg['main-div-classes'] -- The CSS classes added to the main HTML "div" tag. cfg['main-div-class'] = 'ts-doc-doc' cfg['header-div-class'] = 'ts-doc-header' cfg['heading-div-class'] = 'ts-doc-heading' cfg['content-div-class'] = 'ts-doc-content' cfg['footer-div-class'] = 'ts-doc-footer plainlinks' cfg['sandbox-class'] = 'ts-doc-sandbox' -- cfg['start-box-linkclasses'] -- The CSS classes used for the [view][edit][history] or [create] links in the start box. cfg['start-box-linkclasses'] = 'ts-tlinks-tlinks mw-editsection-like plainlinks' -- cfg['start-box-link-id'] -- The HTML "id" attribute for the links in the start box. cfg['start-box-link-id'] = 'doc_editlinks' ---------------------------------------------------------------------------------------------------- -- Tracking category configuration ---------------------------------------------------------------------------------------------------- -- cfg['display-strange-usage-category'] -- Set to true to enable output of cfg['strange-usage-category'] if the module is used on a /doc subpage -- or a /testcases subpage. This should be a boolean value (either true or false). cfg['display-strange-usage-category'] = false -- cfg['strange-usage-category'] -- Category to output if cfg['display-strange-usage-category'] is set to true and the module is used on a -- /doc subpage or a /testcases subpage. cfg['strange-usage-category'] = 'Pages with strange ((documentation)) usage' --[[ ---------------------------------------------------------------------------------------------------- -- End configuration -- -- Don't edit anything below this line. ---------------------------------------------------------------------------------------------------- --]] return cfg 224f3664a83268936f1b9935eafc0055a97071ac Module:TNT 828 27 404 54 2023-06-06T09:19:36Z Otonashi Ayana 2 1 revision imported from [[:meta:Module:TNT]]: w Scribunto text/plain -- -- INTRO: (!!! DO NOT RENAME THIS PAGE !!!) -- This module allows any template or module to be copy/pasted between -- wikis without any translation changes. All translation text is stored -- in the global Data:*.tab pages on Commons, and used everywhere. -- -- SEE: https://www.mediawiki.org/wiki/Multilingual_Templates_and_Modules -- -- ATTENTION: -- Please do NOT rename this module - it has to be identical on all wikis. -- This code is maintained at https://www.mediawiki.org/wiki/Module:TNT -- Please do not modify it anywhere else, as it may get copied and override your changes. -- Suggestions can be made at https://www.mediawiki.org/wiki/Module_talk:TNT -- -- DESCRIPTION: -- The "msg" function uses a Commons dataset to translate a message -- with a given key (e.g. source-table), plus optional arguments -- to the wiki markup in the current content language. -- Use lang=xx to set language. Example: -- -- {{#invoke:TNT | msg -- | I18n/Template:Graphs.tab <!-- https://commons.wikimedia.org/wiki/Data:I18n/Template:Graphs.tab --> -- | source-table <!-- uses a translation message with id = "source-table" --> -- | param1 }} <!-- optional parameter --> -- -- -- The "doc" function will generate the <templatedata> parameter documentation for templates. -- This way all template parameters can be stored and localized in a single Commons dataset. -- NOTE: "doc" assumes that all documentation is located in Data:Templatedata/* on Commons. -- -- {{#invoke:TNT | doc | Graph:Lines }} -- uses https://commons.wikimedia.org/wiki/Data:Templatedata/Graph:Lines.tab -- if the current page is Template:Graph:Lines/doc -- local p = {} local i18nDataset = 'I18n/Module:TNT.tab' -- Forward declaration of the local functions local sanitizeDataset, loadData, link, formatMessage function p.msg(frame) local dataset, id local params = {} local lang = nil for k, v in pairs(frame.args) do if k == 1 then dataset = mw.text.trim(v) elseif k == 2 then id = mw.text.trim(v) elseif type(k) == 'number' then params[k - 2] = mw.text.trim(v) elseif k == 'lang' and v ~= '_' then lang = mw.text.trim(v) end end return formatMessage(dataset, id, params, lang) end -- Identical to p.msg() above, but used from other lua modules -- Parameters: name of dataset, message key, optional arguments -- Example with 2 params: format('I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.format(dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('format', 1, dataset, 'string') checkType('format', 2, key, 'string') return formatMessage(dataset, key, {...}) end -- Identical to p.msg() above, but used from other lua modules with the language param -- Parameters: language code, name of dataset, message key, optional arguments -- Example with 2 params: formatInLanguage('es', I18n/Module:TNT', 'error_bad_msgkey', 'my-key', 'my-dataset') function p.formatInLanguage(lang, dataset, key, ...) local checkType = require('libraryUtil').checkType checkType('formatInLanguage', 1, lang, 'string') checkType('formatInLanguage', 2, dataset, 'string') checkType('formatInLanguage', 3, key, 'string') return formatMessage(dataset, key, {...}, lang) end -- Obsolete function that adds a 'c:' prefix to the first param. -- "Sandbox/Sample.tab" -> 'c:Data:Sandbox/Sample.tab' function p.link(frame) return link(frame.args[1]) end function p.doc(frame) local dataset = 'Templatedata/' .. sanitizeDataset(frame.args[1]) return frame:extensionTag('templatedata', p.getTemplateData(dataset)) .. formatMessage(i18nDataset, 'edit_doc', {link(dataset)}) end function p.getTemplateData(dataset) -- TODO: add '_' parameter once lua starts reindexing properly for "all" languages local data = loadData(dataset) local names = {} for _, field in ipairs(data.schema.fields) do table.insert(names, field.name) end local numOnly = true local params = {} local paramOrder = {} for _, row in ipairs(data.data) do local newVal = {} local name = nil for pos, columnName in ipairs(names) do if columnName == 'name' then name = row[pos] else newVal[columnName] = row[pos] end end if name then if ( (type(name) ~= "number") and ( (type(name) ~= "string") or not string.match(name, "^%d+$") ) ) then numOnly = false end params[name] = newVal table.insert(paramOrder, name) end end -- Work around json encoding treating {"1":{...}} as an [{...}] if numOnly then params['zzz123']='' end local json = mw.text.jsonEncode({ params=params, paramOrder=paramOrder, description=data.description, }) if numOnly then json = string.gsub(json,'"zzz123":"",?', "") end return json end -- Local functions sanitizeDataset = function(dataset) if not dataset then return nil end dataset = mw.text.trim(dataset) if dataset == '' then return nil elseif string.sub(dataset,-4) ~= '.tab' then return dataset .. '.tab' else return dataset end end loadData = function(dataset, lang) dataset = sanitizeDataset(dataset) if not dataset then error(formatMessage(i18nDataset, 'error_no_dataset', {})) end -- Give helpful error to thirdparties who try and copy this module. if not mw.ext or not mw.ext.data or not mw.ext.data.get then error(string.format([['''Missing JsonConfig extension, or not properly configured; Cannot load https://commons.wikimedia.org/wiki/Data:%s. See https://www.mediawiki.org/wiki/Extension:JsonConfig#Supporting_Wikimedia_templates''']], dataset)) end local data = mw.ext.data.get(dataset, lang) if data == false then if dataset == i18nDataset then -- Prevent cyclical calls error('Missing Commons dataset ' .. i18nDataset) else error(formatMessage(i18nDataset, 'error_bad_dataset', {link(dataset)})) end end return data end -- Given a dataset name, convert it to a title with the 'commons:data:' prefix link = function(dataset) return 'c:Data:' .. mw.text.trim(dataset or '') end formatMessage = function(dataset, key, params, lang) for _, row in pairs(loadData(dataset, lang).data) do local id, msg = unpack(row) if id == key then local result = mw.message.newRawMessage(msg, unpack(params or {})) return result:plain() end end if dataset == i18nDataset then -- Prevent cyclical calls error('Invalid message key "' .. key .. '"') else error(formatMessage(i18nDataset, 'error_bad_msgkey', {key, link(dataset)})) end end return p e8ec673cd9d57a37a2bc326979c7980f1657fc3a Template:Infobox character 10 2 405 314 2023-06-06T09:21:07Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> {{documentation}} 4d6921423c2a987f31e46b685f3b1fb6d898b5f8 407 405 2023-06-06T09:27:08Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} | header1 = Character Information {{#var:given}} | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> {{documentation}} 37fff5960967031db754dc32b894c3c3679cbb78 408 407 2023-06-06T09:29:05Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} {{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}} | header1 = Character Information {{#var:given}} | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> {{documentation}} 91a352fcabe09139a4c4fa577e13630a2917b40a 409 408 2023-06-06T09:29:54Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{{given name|}}} {{{family name|}}} {{DISPLAYTITLE:{{{family name|}}} {{{given name|}}} }} }}'''<br>{{{jname|}}} {{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> {{documentation}} 1cc9281ac9799cb90ae69c9ec763005eadfbd5a8 411 409 2023-06-06T09:41:51Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}</onlyinclude> {{documentation}} dcfeaf749f81306d653c22f132c3eb9cf4f13794 412 411 2023-06-06T09:42:29Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude> {{documentation}} 21af6dcdc33c2d3230cb5b1403ca5b0c528ec5d7 413 412 2023-06-06T09:43:50Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}}</onlyinclude> {{documentation}} 08f9c696b8b05ec3400326cca50046d9eed31e33 414 413 2023-06-06T09:44:11Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}}}}</onlyinclude> {{documentation}} 335695dfc29cb52f7733bc4a1c03206bac7b9015 415 414 2023-06-06T09:44:41Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude><includeonly>{{DISPLAYTITLE:{{character name}}}}</includeonly> {{documentation}} 4ec80812d12f6d841426d584969b093eacefc743 417 415 2023-06-06T09:48:04Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{#vardefine:given|{{{given name|}}}}} {{#vardefine:family|{{{family name|}}}}}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}</onlyinclude>{{DISPLAYTITLE:{{character name}}}} {{documentation}} 08359d3e7d75ccec65a39a632c14d5109fbfba1f 418 417 2023-06-06T09:51:44Z Otonashi Ayana 2 wikitext text/x-wiki <onlyinclude>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}} }}</onlyinclude> {{documentation}} d08555c97a2dec20117e845aca0658b4d6d03326 419 418 2023-06-06T09:52:56Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}} }}</includeonly> {{documentation}} 7bcdcf5a5ffdf814ad5b7cd8915fff6f40c6d47f 420 419 2023-06-06T09:53:49Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 68a03a13d06cf403edae07ad23b89f2e4ae1c0eb Template:Infobox character/doc 10 169 406 2023-06-06T09:21:52Z Otonashi Ayana 2 Created page with "<pre> {{infobox character | name = | given name = | family name = | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre>" wikitext text/x-wiki <pre> {{infobox character | name = | given name = | family name = | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> 8543f3542ba55b80acc478a33a659152e1de8eb9 421 406 2023-06-06T09:54:29Z Otonashi Ayana 2 wikitext text/x-wiki <pre> {{infobox character | given name = | family name = | jname = | image = | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> 0e8e9f89510f80f2ba5d10a7c32870c7ec431194 Template:Character name 10 170 410 2023-06-06T09:37:54Z Otonashi Ayana 2 Created page with "<span class="given-name">{{#var:given}}</span> <span class="family-name">{{#var:family}}</span>" wikitext text/x-wiki <span class="given-name">{{#var:given}}</span> <span class="family-name">{{#var:family}}</span> 539f9f28d382db763cfd3d37fd6395aab4481f81 416 410 2023-06-06T09:46:16Z Otonashi Ayana 2 wikitext text/x-wiki <span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span> 20bc781f8c3d4ca1127d7ea0ce01714b77ad279d 422 416 2023-06-06T09:57:02Z Otonashi Ayana 2 wikitext text/x-wiki <span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> 2c49e49c0d5f7b1e6f2175b0af2788db97b8878c 423 422 2023-06-06T09:57:27Z Otonashi Ayana 2 wikitext text/x-wiki <span style="display:flex; gap:1em"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> 679587cb9b25f9e964b3dfa9a81a62d51ca4b9de 424 423 2023-06-06T10:00:11Z Otonashi Ayana 2 wikitext text/x-wiki <span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> c6f268839a856abf7d96d110b09d4f07dcfd223f 426 424 2023-06-06T10:02:49Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character-name" style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> be185467dc281cc4a9c49bf8d4aae262fbeeb48f 431 426 2023-06-06T10:06:59Z Otonashi Ayana 2 wikitext text/x-wiki <span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> c6f268839a856abf7d96d110b09d4f07dcfd223f MediaWiki:Gadgets-definition 8 46 425 122 2023-06-06T10:01:45Z Otonashi Ayana 2 wikitext text/x-wiki * name-order | name-order.css == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css 0555cfd677601e9e94871e9045271f6a732f2c85 429 425 2023-06-06T10:05:01Z Otonashi Ayana 2 wikitext text/x-wiki * name-order | default | name-order.css == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css ed4e7b3d8cb90296835be32ab88c7e3dda278b39 430 429 2023-06-06T10:05:59Z Otonashi Ayana 2 wikitext text/x-wiki * name-order [default] | name-order.css == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css 4f818277583f3521aaf59a8b31736fe95fcf2f85 MediaWiki:Gadget-name-order.css 8 171 427 2023-06-06T10:03:22Z Otonashi Ayana 2 Created page with ".character-name{ flex-direction:row-reverse; }" css text/css .character-name{ flex-direction:row-reverse; } 7be89c893ff7b48e18c1a71cc7bcf0533aa009d4 432 427 2023-06-06T10:07:47Z Otonashi Ayana 2 css text/css .given-name{ order: 1; } .family-name{ order: 2; } 60da10cc360b4ceca69533c5a56b1d5c21b8a82e 433 432 2023-06-06T10:09:41Z Otonashi Ayana 2 Blanked the page css text/css da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Gadget-name-order 8 172 428 2023-06-06T10:03:52Z Otonashi Ayana 2 Created page with "Use Western name order" wikitext text/x-wiki Use Western name order 148747f02732a55f40f67686a1f6b2c505a486b5 Template:Character name 10 170 434 431 2023-06-06T10:10:30Z Otonashi Ayana 2 wikitext text/x-wiki <span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span> 4f453885871df2c5e0d37275b9619556774f16b6 435 434 2023-06-06T10:11:06Z Otonashi Ayana 2 wikitext text/x-wiki <span style="display:flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> c6f268839a856abf7d96d110b09d4f07dcfd223f 436 435 2023-06-06T10:12:05Z Otonashi Ayana 2 wikitext text/x-wiki <span style="display:inline-flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> edb0c8a4582692dc2432bc43264d177a928b8905 437 436 2023-06-06T10:12:39Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character name" style="display:inline-flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> 6ab5377afae25d3a1e5159be22e31d9c71f2b85d 439 437 2023-06-06T10:13:25Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character-name" style="display:inline-flex"><span class="family-name">{{#var:family}}</span> <span class="given-name">{{#var:given}}</span></span> ddb01a7b749d580e13c3b857296133d72be08e71 442 439 2023-06-06T10:24:59Z Kinzo 4 wikitext text/x-wiki {{ charname | {{#var:family}} | {{#var:given}} }} 59b33a0f53ba0326815a72326434d6d34ae2ceb8 443 442 2023-06-06T10:25:41Z Kinzo 4 wikitext text/x-wiki {{charname|{{#var:family}}|{{#var:given}}}} 6f0e1c5d8ef6d8c292ae5d8840961896a8a02475 449 443 2023-06-06T10:39:29Z Otonashi Ayana 2 wikitext text/x-wiki {{charname|{{#var:given}}|{{#var:family}}}} bb32ea62d62c6cb747710fe8c624a7a9c0843be1 MediaWiki:Gadget-name-order.css 8 171 438 433 2023-06-06T10:13:01Z Otonashi Ayana 2 css text/css .character-name{ flex-direction:row-reverse; } 7be89c893ff7b48e18c1a71cc7bcf0533aa009d4 440 438 2023-06-06T10:18:32Z Otonashi Ayana 2 css text/css .character-name{ display: flex; flex-direction: row-reverse; } 1bf352086eec81dc123a25cea14772bee4e27d72 447 440 2023-06-06T10:38:14Z Otonashi Ayana 2 css text/css .character-name{ display: flex; flex-direction: row !important; } 4589accf69364054905e79cf65fb4d1cf9e80beb 450 447 2023-06-06T10:39:55Z Otonashi Ayana 2 Undo revision 447 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) css text/css .character-name{ display: flex; flex-direction: row-reverse; } 1bf352086eec81dc123a25cea14772bee4e27d72 Template:Charname 10 173 441 2023-06-06T10:24:10Z Kinzo 4 Created page with "<span class="character-name" style="display:inline-flex"><span class="family-name">{{{1}}}</span> <span class="given-name">{{{2|}}}</span></span>" wikitext text/x-wiki <span class="character-name" style="display:inline-flex"><span class="family-name">{{{1}}}</span> <span class="given-name">{{{2|}}}</span></span> 8406f8085531ee647e94f174f5ef07765df2d337 444 441 2023-06-06T10:26:28Z Kinzo 4 wikitext text/x-wiki <span class="character-name" style="display:inline-flex"><span class="family-name">{{{1}}}</span> <span class="given-name">{{{2|}}}</span></span> cd50b865091a342de15cddceade8ea08e2bc0010 448 444 2023-06-06T10:39:08Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character-name" style="display:inline-flex"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span> 64694ae0169cab89790415227fd7147d7a961c32 MediaWiki:Gadgets-definition 8 46 445 430 2023-06-06T10:32:01Z Otonashi Ayana 2 wikitext text/x-wiki * name-order [default] | western-order == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css 2599897acf2a87a1d54f5514010322e39ed69640 446 445 2023-06-06T10:36:11Z Otonashi Ayana 2 Undo revision 445 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki * name-order [default] | name-order.css == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css 4f818277583f3521aaf59a8b31736fe95fcf2f85 451 446 2023-06-06T10:44:09Z Otonashi Ayana 2 wikitext text/x-wiki * name-order | name-order.css == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css 0555cfd677601e9e94871e9045271f6a732f2c85 MediaWiki:Gadget-name-order 8 172 452 428 2023-06-06T10:44:30Z Otonashi Ayana 2 wikitext text/x-wiki Use Japanese name order b02a126cd3f0aeb0e53b2de05a285ce81f2713ce Template:Infobox character 10 2 453 420 2023-06-06T10:49:15Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{subst:character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 00f598e8a4950f2600e3c7de9b84d2cf0cb151b9 454 453 2023-06-06T10:50:16Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{subst:character name}}</includeonly> <noinclude>{{documentation}}</noinclude> f07a5896428295ccb2ca39166f40eb5d8a524271 455 454 2023-06-06T10:52:00Z Otonashi Ayana 2 Undo revision 454 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{safesubst:character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 7cb6837958777e41e8272d73ab5a95fb4b9a4e7d 456 455 2023-06-06T10:52:41Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information {{safesubst:character name}} | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{safesubst:character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 9128ad08eaf6f0e2070b245bdd25ee67d64caf88 457 456 2023-06-06T10:55:26Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information {{safesubst:character name}} | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:test }}</includeonly> <noinclude>{{documentation}}</noinclude> 400d1fd86ee5864bd38b55bbac22e5f72c703fce 458 457 2023-06-06T10:59:01Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information {{safesubst:character name}} | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{|safesubst:character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 667b9e0e5eb99eb7985384fa8624872c71356b4e 459 458 2023-06-06T10:59:18Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information {{safesubst:character name}} | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{safesubst:character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 9128ad08eaf6f0e2070b245bdd25ee67d64caf88 460 459 2023-06-06T11:12:32Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 68a03a13d06cf403edae07ad23b89f2e4ae1c0eb Template:N 10 174 461 2023-06-06T11:14:27Z Otonashi Ayana 2 Created page with "[[{{{1}}} {{{2}}}]]" wikitext text/x-wiki [[{{{1}}} {{{2}}}]] 4de9e4ca756a8dc68a96f281ee09ecd703e145d8 462 461 2023-06-06T11:15:31Z Otonashi Ayana 2 wikitext text/x-wiki [[{{{given}}} {{{family}}}]] ddd5d40c88fcd9e6a3749671987b9d46f0c6f576 463 462 2023-06-06T11:16:12Z Otonashi Ayana 2 Undo revision 462 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki [[{{{1}}} {{{2}}}]] 4de9e4ca756a8dc68a96f281ee09ecd703e145d8 464 463 2023-06-06T11:16:39Z Otonashi Ayana 2 wikitext text/x-wiki [[{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}]] e9f98f790f2c7896bc4d2918289a8ab88526c046 465 464 2023-06-06T11:16:51Z Otonashi Ayana 2 wikitext text/x-wiki [[{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}]] 24b617b3462b7070ea0f183d6e746d576b7aa33a Template:Kns characters 10 138 466 322 2023-06-06T11:20:21Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = uncollapsed | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> 76779e2d6c8ff1e5f6b9daf162b9150ca2e8cb2a File:Cover kara no shoujo.png 6 175 467 2023-06-06T11:35:57Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Cover kara no shoujo 2.jpg 6 176 468 2023-06-06T11:36:19Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Cover kara no shoujo 3.png 6 177 469 2023-06-06T11:36:32Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Cover cartagra.png 6 178 470 2023-06-06T11:36:48Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Common.css 8 7 471 13 2023-06-06T11:40:41Z Otonashi Ayana 2 css text/css .main-page-display{ width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 17a16a534b8e06a3961f6d433a01bfff1a105bb9 472 471 2023-06-06T11:41:26Z Otonashi Ayana 2 css text/css .main-page-display{ display: flex; flex-direction: column; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 0ed1dafddd4c860d180d22beeac06cb03d0f4baa 473 472 2023-06-06T11:43:20Z Otonashi Ayana 2 css text/css .main-page-display{ display: flex; flex-direction: column; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display img{ object-fit: cover; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 966b0541ed867943e69de50dd28692c3423621d2 474 473 2023-06-06T11:44:11Z Otonashi Ayana 2 css text/css .main-page-display{ display: flex; flex-direction: column; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display img{ object-fit: contain; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 4a9cd1de50f36caead8bc4ebbda352e8845abb30 476 474 2023-06-06T11:51:49Z Otonashi Ayana 2 css text/css .main-page-display{ display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display img{ object-fit: contain; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ ccaecb0240b89ea65edc32eb90ecb8ea8ad8f2cb 478 476 2023-06-06T11:52:21Z Otonashi Ayana 2 css text/css .main-page-display{ display: flex; flex-direction: column; justify-content: center; align-items:center; gap: 1em; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display img{ object-fit: contain; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 4d1ad95c300d429158fe828a54ed52be27fdc987 479 478 2023-06-06T11:54:21Z Otonashi Ayana 2 css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; gap: 1em; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 929965b6c2c71b918703b33ff013002d5b4966a6 480 479 2023-06-06T11:54:55Z Otonashi Ayana 2 css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ d01ce86134ed875628181f04275700e595b6ef37 483 480 2023-06-06T11:59:08Z Otonashi Ayana 2 css text/css /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ db112051df4a651c718e6bb55829dc832e41d60f Main Page 0 1 475 1 2023-06-06T11:46:43Z Otonashi Ayana 2 wikitext text/x-wiki == Games == <div style="display:flex;flex-direction:row;gap:50px"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 462e839f4a07b716886097ae49cb8299794af444 477 475 2023-06-06T11:51:55Z Otonashi Ayana 2 wikitext text/x-wiki == Games == <div style="display:flex"> <div class="main-page-display"> <span>[[File:cover cartagra.png]]</span> <span>Cartagra</span> </div> <div class="main-page-display"> <span>[[File:cover kara no shoujo.png]]</span> <span>Kara no Shōjo</span> </div> <div class="main-page-display"> <span>[[File:cover kara no shoujo 2.jpg]]</span> <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> <span>[[File:cover kara no shoujo 3.png]]</span> <span>Kara no Shōjo: The Last Episode</span> </div> </div> dd18927e1e9f5cdcf794807191f91fc59353ee58 481 477 2023-06-06T11:55:00Z Otonashi Ayana 2 Undo revision 477 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki == Games == <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 5d2291721418c3c8a81fa41bbbc734d23b3d08ff 482 481 2023-06-06T11:56:50Z Otonashi Ayana 2 wikitext text/x-wiki = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 4dde36993e0c348fb15277efd6f8dde1b5802d6e Template:Main Page/styles.css 10 179 484 2023-06-06T12:00:14Z Otonashi Ayana 2 Created page with ".main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; }" wikitext text/x-wiki .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; } e3387635046df60f5500382a65b76cfa18604fad 485 484 2023-06-06T12:00:49Z Otonashi Ayana 2 Otonashi Ayana changed the content model of the page [[Main Page/styles.css]] from "wikitext" to "Sanitized CSS": w sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; } e3387635046df60f5500382a65b76cfa18604fad 489 485 2023-06-06T12:07:28Z Otonashi Ayana 2 Otonashi Ayana moved page [[Main Page/styles.css]] to [[Template:Main Page/styles.css]] without leaving a redirect sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > *{ height:100%; width:100%; } e3387635046df60f5500382a65b76cfa18604fad 491 489 2023-06-06T12:09:08Z Otonashi Ayana 2 sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } 46800b91ee833240439b94ce4de7845b3dedf1e2 492 491 2023-06-06T12:11:10Z Otonashi Ayana 2 sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display img{ max-width:100%; max-height:100%; } 21a11f5c09ef10886a0b9cc7d9fa697b54088e9b 493 492 2023-06-06T12:12:37Z Otonashi Ayana 2 sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } db21871c2fa8c9066cdcd4bfeaa4141acb15a6dc 496 493 2023-06-06T12:22:47Z Otonashi Ayana 2 sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p, .main-page-display a{ height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } 9f7daac6553ed7c4c4de73af6a07bb9d5d8fbf6e 497 496 2023-06-06T12:29:51Z Otonashi Ayana 2 sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 350px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } 251849b395ab63b2f7c3ff0d6f42a630b5b761b4 498 497 2023-06-06T12:31:17Z Otonashi Ayana 2 sanitized-css text/css .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } 7b74253bc6b8674100c99feda160c7e9c8a824b3 500 498 2023-06-06T12:33:31Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; gap:1em; margin: auto 0; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } e65c5c9d61710076b54d310a2990a099fff8d1ce 501 500 2023-06-06T12:36:20Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; margin: auto 0; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } 947447f18df0a33bfb7fb4b8ebb923a78b2d4cce 502 501 2023-06-06T12:36:49Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } 03c3e608d1fe157f974c3cc4067a7883cb4d8078 505 502 2023-06-06T12:40:25Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ z-index: 2; color: white; background-color: rgba(0,0,0,0.5); } 0d52948891175653df22b13d36f6c50c389138af 506 505 2023-06-06T12:42:45Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; width: 100%; text-align: center; color: white; background-color: rgba(0,0,0,0.5); } 8943c8e3a3b0300f2629634979bd1554c8e39792 510 506 2023-06-06T12:58:14Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; width: 100%; text-align: center; font-size: large; color: white; background-color: rgba(0,0,0,0.5); } fe15f03b8a0a372abe19d483c1b49147072d9331 511 510 2023-06-06T12:59:30Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; width: 100%; height: 0; text-align: center; font-size: large; color: white; background-color: rgba(0,0,0,0.5); transition: height 1s ease; } .item-title:hover{ height: auto; } c833854b0fbea8de384e1e82d95a2737c65f062d 512 511 2023-06-06T13:00:56Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; width: 100%; height: 0; text-align: center; font-size: large; color: white; background-color: rgba(0,0,0,0.5); transition: height 1s ease; } .main-page-display:hover .item-title{ height: auto; } 1d2d172f118fcdc45e6dca40a49c4d65a9227a46 514 512 2023-06-06T13:05:34Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; width: 100%; height: 0; text-align: center; font-size: large; color: white; background-color: rgba(0,0,0,0.5); transition: height 1s ease; } .main-page-display:hover .item-title{ height: auto; } e39d222e2af65845679f27233fe5dc2de6ea15a7 516 514 2023-06-06T13:06:20Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 1s ease; } .main-page-display:hover .item-title{ opacity: 100; } 9ad38319a650998b4fe2e0ab09dd459b8969cb27 517 516 2023-06-06T13:07:01Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } 59b6009cfb6d37d8499950bee220301fba28ba34 518 517 2023-06-06T13:12:48Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: xx-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } 4174c0824c52c122da5fede01928c41499e4e705 519 518 2023-06-06T13:13:02Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: x-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } c2165a10fc72ded9f3d392400513b9e66f71e3b3 520 519 2023-06-06T13:16:07Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; transition: height 0.5s ease, width 0.5s ease; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: x-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } .main-page-display:hover img{ transform: scale(1.5); } aef52d187345396d92b874d13b01a5e017de6841 521 520 2023-06-06T13:19:19Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; transition: transform 0.5s ease; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: x-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } .main-page-display:hover img{ transform: scale(1.19); } 26e46869967575efe849f2d48dd7d3b69daefe86 522 521 2023-06-06T13:24:47Z Otonashi Ayana 2 sanitized-css text/css .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; transition: transform 0.5s ease; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: x-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } .main-page-display:hover img{ transform: scale(1.05); } 3cd849c9be1ea2dfadaf98b616751db3dcdcc67a Main Page 0 1 486 482 2023-06-06T12:02:35Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 02c7e48be3bfebfbfbd3f542a1a9de9e721ee694 487 486 2023-06-06T12:06:53Z Otonashi Ayana 2 Replaced content with "{{Main Page}}" wikitext text/x-wiki {{Main Page}} 80a17bbac1e39c330a04b3c5eda035540bbcbdb8 490 487 2023-06-06T12:07:59Z Otonashi Ayana 2 Protected "[[Main Page]]" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) wikitext text/x-wiki {{Main Page}} 80a17bbac1e39c330a04b3c5eda035540bbcbdb8 Template:Main Page 10 180 488 2023-06-06T12:07:01Z Otonashi Ayana 2 Created page with "<templatestyles src="Main Page/styles.css /> = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display">..." wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 02c7e48be3bfebfbfbd3f542a1a9de9e721ee694 494 488 2023-06-06T12:18:21Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png|center]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> e95901c06fdbfed257c5b05d82a3074ad51f52a7 495 494 2023-06-06T12:20:54Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div style="display:flex;flex-direction:row;gap:1em"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 02c7e48be3bfebfbfbd3f542a1a9de9e721ee694 499 495 2023-06-06T12:32:27Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <span>Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span>Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span>Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span>Kara no Shōjo: The Last Episode</span> </div> </div> 713439e347a6bbe1096383a1db545990bd4afbff 503 499 2023-06-06T12:38:56Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <span class="item title">Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span class="item title">Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span class="item title">Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span class="item title">Kara no Shōjo: The Last Episode</span> </div> </div> cbc67eee910b907b962036fbf090195d4e90d70c 504 503 2023-06-06T12:39:19Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <span class="item-title">Cartagra</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <span class="item-title">Kara no Shōjo</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <span class="item-title">Kara no Shōjo: The Second Episode</span> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <span class="item-title">Kara no Shōjo: The Last Episode</span> </div> </div> fbb756d34a508b3a9cb34cd1a74379da272a8229 507 504 2023-06-06T12:50:30Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <div class="item-title"> <span>Cartagra</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <div class="item-title"> <span>Kara no Shōjo</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <div class="item-title"> <span>Kara no Shōjo: The Second Episode</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <div class="item-title"> <span>Kara no Shōjo: The Last Episode</span> </div> </div> </div> 5e71eaf9593aec6f6e7cd27f099f6c4e2bdefca5 508 507 2023-06-06T12:52:53Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <div class="item-title"> <span>Cartagra</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <div class="item-title"> <span>Kara no Shōjo</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <div class="item-title"> <span>Kara no Shōjo — The Second Episode</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <div class="item-title"> <span>Kara no Shōjo — The Last Episode</span> </div> </div> </div> 87b00b11d55a4ba15a6f22bfdf2074f0496efd11 509 508 2023-06-06T12:53:45Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <div class="item-title"> <span>Cartagra</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <div class="item-title"> <span>Kara no Shōjo</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <div class="item-title"> <span>Kara no Shōjo<br>The Second Episode</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <div class="item-title"> <span>Kara no Shōjo<br>The Last Episode</span> </div> </div> </div> 64a8f366f25435c4707309ed2b6e35fcd7c840b1 513 509 2023-06-06T13:04:07Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <div class="item-title"> Cartagra </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <div class="item-title"> <span>Kara no Shōjo</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <div class="item-title"> <span>Kara no Shōjo<br>The Second Episode</span> </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <div class="item-title"> <span>Kara no Shōjo<br>The Last Episode</span> </div> </div> </div> 7bc051df5e5b81fb41ff079b933b868120d9e3c0 515 513 2023-06-06T13:05:37Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png]] <div class="item-title"> Cartagra </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png]] <div class="item-title"> Kara no Shōjo </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg]] <div class="item-title"> Kara no Shōjo<br>The Second Episode </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png]] <div class="item-title"> Kara no Shōjo<br>The Last Episode </div> </div> </div> 9e352df8bb44dcc0019c3b93787334aa2e7498d8 526 515 2023-06-06T13:34:43Z Otonashi Ayana 2 /* Games */ wikitext text/x-wiki <templatestyles src="Main Page/styles.css /> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png|link=Cartagra]] <div class="item-title"> Cartagra </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png|link=Kara no Shoujo]] <div class="item-title"> Kara no Shōjo </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]] <div class="item-title"> Kara no Shōjo<br>The Second Episode </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]] <div class="item-title"> Kara no Shōjo<br>The Last Episode </div> </div> </div> 1162421465162032f69b716b849dec8d46dc33be MediaWiki:Common.css 8 7 523 483 2023-06-06T13:25:42Z Otonashi Ayana 2 css text/css .item-title{ pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 7cb02af93617a4311264f88c9090a44cdd582dce Kara no Shoujo 0 181 524 2023-06-06T13:29:59Z Otonashi Ayana 2 Created page with "{{DISPLAYTITLE:Kara no Shōjo}} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. It was first released on July 4, 2008." wikitext text/x-wiki {{DISPLAYTITLE:Kara no Shōjo}} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. It was first released on July 4, 2008. df49267f6d7f2eff562ec2ee512df452f14f885b 525 524 2023-06-06T13:30:26Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. It was first released on July 4, 2008. 21a31916193e0a5a008ba45c9d361857dce5d923 Kara no Shoujo - The Second Episode 0 182 527 2023-06-06T13:35:34Z Otonashi Ayana 2 Created page with "{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}" wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}} 00bf2f6d9f7b3ff7727c2b60c5935610fe5af336 Template:Italic title 10 184 530 529 2023-06-06T13:37:00Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Italic_title]]: w wikitext text/x-wiki <includeonly>{{#invoke:Italic title|main}}</includeonly><noinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis to Wikidata. --> </noinclude> aa77d0fbc6bb86266d633b290b7ab258cc69c8b8 Template:T 10 185 532 531 2023-06-06T13:37:11Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:T]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Rcat shell| {{R from template shortcut}} }} <!-- Used as Template:tl throughout English Wikipedia; demo template referenced only on meta --> bb10dbc83695404528dbc095ea267429142c7f05 Template:Template link general 10 186 534 533 2023-06-06T13:37:12Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link_general]]: w wikitext text/x-wiki {{{{{|safesubst:}}}#Invoke:Template link general|main}}<noinclude> {{Documentation}} </noinclude> 9871d2f490eaedd832a0ae8016adbf807ddf7b71 Template:Tlg 10 187 536 535 2023-06-06T13:37:12Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tlg]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link general]] {{Redirect category shell| {{R from move}} }} 707ce913a3ffa8193c9377c3ded7db7b72407500 Template:Tlp 10 188 538 537 2023-06-06T13:37:13Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tlp]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link with parameters]] {{R from move}} 3867e4ef4fe637ce8530859b5486b23e916d0b8a Template:Template link with parameters 10 189 540 539 2023-06-06T13:37:14Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link_with_parameters]]: w wikitext text/x-wiki <includeonly>{{#Invoke:Template link general|main|nowrap=yes}}</includeonly><noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlp}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 8fe73a6eea633360a927820d10469b7292bfc1c2 Module:Transclusion count/data/I 828 190 542 541 2023-06-06T13:37:18Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Transclusion_count/data/I]]: w Scribunto text/plain return { ["IAAF_name"] = 2200, ["IAST"] = 5900, ["IBDB_name"] = 9100, ["ICD10"] = 4600, ["ICD9"] = 4400, ["ICS"] = 2900, ["IDN"] = 3300, ["IMDb_episode"] = 9800, ["IMDb_episodes"] = 2500, ["IMDb_name"] = 152000, ["IMDb_title"] = 187000, ["IMO_Number"] = 4100, ["IMSLP"] = 8200, ["INA"] = 2100, ["IND"] = 7400, ["INR"] = 6200, ["INRConvert"] = 5500, ["INRConvert/CurrentRate"] = 5400, ["INRConvert/USD"] = 5400, ["INRConvert/out"] = 5400, ["IOC_profile"] = 5600, ["IP"] = 2600, ["IPA"] = 140000, ["IPA-all"] = 3500, ["IPA-de"] = 8000, ["IPA-es"] = 7800, ["IPA-fr"] = 44000, ["IPA-it"] = 5800, ["IPA-nl"] = 3700, ["IPA-pl"] = 4000, ["IPA-pt"] = 3600, ["IPA-ru"] = 2600, ["IPA-sh"] = 2700, ["IPA-sl"] = 6900, ["IPA-th"] = 2900, ["IPA_audio_link"] = 19000, ["IPA_link"] = 3400, ["IPAc-cmn"] = 2600, ["IPAc-en"] = 48000, ["IPAc-pl"] = 52000, ["IPC_athlete"] = 2600, ["IPSummary"] = 77000, ["IP_summary"] = 78000, ["IPsock"] = 9300, ["IPtalk"] = 22000, ["IPuser"] = 6900, ["IPvandal"] = 2900, ["IRC"] = 6500, ["IRI"] = 2200, ["IRL"] = 5400, ["IRN"] = 3500, ["ISBN"] = 461000, ["ISBNT"] = 38000, ["ISBN_missing"] = 2300, ["ISFDB_name"] = 4100, ["ISFDB_title"] = 4500, ["ISL"] = 2100, ["ISO_15924/script-example-character"] = 2800, ["ISO_15924/wp-article"] = 2800, ["ISO_15924/wp-article/format"] = 2800, ["ISO_15924/wp-article/label"] = 2700, ["ISO_3166_code"] = 509000, ["ISO_3166_name"] = 16000, ["ISO_639_name"] = 7900, ["ISP"] = 5400, ["ISR"] = 4700, ["ISSN"] = 12000, ["ISSN_link"] = 30000, ["ISTAT"] = 8100, ["ISU_figure_skater"] = 2500, ["ITA"] = 17000, ["ITF"] = 6100, ["ITF_profile"] = 9000, ["ITIS"] = 4300, ["ITN_talk"] = 9800, ["ITN_talk/date"] = 9800, ["IUCN_banner"] = 15000, ["I_sup"] = 4500, ["Iaaf_name"] = 7400, ["Ice_hockey"] = 19000, ["Ice_hockey_stats"] = 16000, ["Icehockeystats"] = 12000, ["Icon"] = 572000, ["If"] = 265000, ["If_all"] = 6000, ["If_between"] = 3700, ["If_both"] = 8250000, ["If_empty"] = 3670000, ["If_first_display_both"] = 73000, ["If_in_page"] = 8800, ["If_last_display_both"] = 30000, ["If_preview"] = 57000, ["If_then_show"] = 278000, ["Ifempty"] = 4000, ["Ifeq"] = 16000, ["Iferror_then_show"] = 3200, ["Ifexist_not_redirect"] = 1110000, ["Ifnotempty"] = 14000, ["Ifnumber"] = 34000, ["Ifsubst"] = 97000, ["Ih"] = 7500, ["Ill"] = 109000, ["Illm"] = 6800, ["Image_frame"] = 3800, ["Image_label"] = 4500, ["Image_label_begin"] = 3800, ["Image_label_end"] = 3500, ["Image_label_small"] = 2600, ["Image_needed"] = 4500, ["Image_other"] = 279000, ["Image_requested"] = 170000, ["Image_requested/Category_helper"] = 163000, ["Imbox"] = 915000, ["Imdb_name"] = 5300, ["Imdb_title"] = 4200, ["Import_style"] = 11000, ["Import_style/inputbox.css"] = 11000, ["Importance"] = 5530000, ["Importance/colour"] = 5550000, ["Importance_mask"] = 8610000, ["Improve_categories"] = 6800, ["Improve_documentation"] = 2000, ["In_class"] = 5600, ["In_lang"] = 352000, ["In_progress"] = 3100, ["In_string"] = 71000, ["In_title"] = 19000, ["Inactive_WikiProject_banner"] = 216000, ["Inactive_userpage_blanked"] = 4900, ["Include-USGov"] = 29000, ["Incomplete_list"] = 22000, ["Inconclusive"] = 2100, ["Increase"] = 42000, ["Incumbent_pope"] = 4300, ["Indent"] = 4200, ["IndexFungorum"] = 2300, ["Indian_English"] = 4200, ["Indian_Rupee"] = 10000, ["Indian_railway_code"] = 3100, ["Inflation"] = 18000, ["Inflation-fn"] = 5300, ["Inflation-year"] = 4400, ["Inflation/IN/startyear"] = 5500, ["Inflation/UK"] = 4300, ["Inflation/UK/dataset"] = 4300, ["Inflation/UK/startyear"] = 4300, ["Inflation/US"] = 11000, ["Inflation/US/dataset"] = 11000, ["Inflation/US/startyear"] = 11000, ["Inflation/fn"] = 6100, ["Inflation/year"] = 23000, ["Info"] = 7200, ["Infobox"] = 3190000, ["Infobox/Columns"] = 2300, ["Infobox/mobileviewfix.css"] = 141000, ["Infobox3cols"] = 16000, ["Infobox_AFL_biography"] = 14000, ["Infobox_Aircraft_Begin"] = 5400, ["Infobox_Aircraft_Type"] = 4700, ["Infobox_Athletics_Championships"] = 2700, ["Infobox_Australian_place"] = 15000, ["Infobox_CFL_biography"] = 2200, ["Infobox_COA_wide"] = 3100, ["Infobox_Canada_electoral_district"] = 2400, ["Infobox_Canadian_Football_League_biography"] = 5800, ["Infobox_Canadian_Football_League_biography/position"] = 5700, ["Infobox_Chinese"] = 20000, ["Infobox_Chinese/Chinese"] = 2700, ["Infobox_Chinese/Footer"] = 8700, ["Infobox_Chinese/Header"] = 8700, ["Infobox_Chinese/Korean"] = 17000, ["Infobox_Christian_leader"] = 18000, ["Infobox_Election"] = 2200, ["Infobox_French_commune"] = 38000, ["Infobox_GAA_player"] = 2900, ["Infobox_Gaelic_games_player"] = 5000, ["Infobox_German_location"] = 13000, ["Infobox_German_place"] = 14000, ["Infobox_Grand_Prix_race_report"] = 2000, ["Infobox_Greece_place"] = 2800, ["Infobox_Greek_Dimos"] = 2800, ["Infobox_Hindu_temple"] = 2400, ["Infobox_Indian_constituency"] = 4500, ["Infobox_Indian_constituency/defaultdata"] = 4500, ["Infobox_Italian_comune"] = 8100, ["Infobox_Korean_name"] = 15000, ["Infobox_Korean_name/categories"] = 15000, ["Infobox_MLB_yearly"] = 3100, ["Infobox_NASCAR_race_report"] = 2100, ["Infobox_NCAA_team_season"] = 18000, ["Infobox_NFL_biography"] = 28000, ["Infobox_NFL_player"] = 8000, ["Infobox_NFL_season"] = 2500, ["Infobox_NFL_team_season"] = 3900, ["Infobox_NRHP"] = 72000, ["Infobox_NRHP/conv"] = 18000, ["Infobox_NRHP/locmapin2region"] = 66000, ["Infobox_Officeholder"] = 4900, ["Infobox_Olympic_event"] = 7300, ["Infobox_Olympic_event/games_text"] = 7300, ["Infobox_Paralympic_event"] = 2600, ["Infobox_Paralympic_event/games_text"] = 2600, ["Infobox_Politician"] = 2200, ["Infobox_Romanian_subdivision"] = 3100, ["Infobox_Russian_district"] = 2000, ["Infobox_Russian_inhabited_locality"] = 4400, ["Infobox_SCOTUS_case"] = 3700, ["Infobox_Site_of_Special_Scientific_Interest"] = 2000, ["Infobox_Swiss_town"] = 2800, ["Infobox_Switzerland_municipality"] = 2900, ["Infobox_Turkey_place"] = 12000, ["Infobox_U.S._county"] = 3000, ["Infobox_U.S._county/district"] = 3000, ["Infobox_UK_constituency"] = 2100, ["Infobox_UK_constituency/year"] = 2100, ["Infobox_UK_legislation"] = 2900, ["Infobox_UK_place"] = 25000, ["Infobox_UK_place/NoDialCode"] = 7900, ["Infobox_UK_place/NoPostCode"] = 3000, ["Infobox_UK_place/area"] = 2300, ["Infobox_UK_place/dist"] = 2500, ["Infobox_UK_place/local"] = 25000, ["Infobox_UK_place/styles.css"] = 25000, ["Infobox_UN_resolution"] = 2300, ["Infobox_US_Supreme_Court_case"] = 3800, ["Infobox_US_Supreme_Court_case/courts"] = 3800, ["Infobox_Wikipedia_user"] = 9500, ["Infobox_YouTube_personality"] = 2600, ["Infobox_YouTube_personality/styles.css"] = 2600, ["Infobox_academic"] = 13000, ["Infobox_aircraft_begin"] = 14000, ["Infobox_aircraft_occurrence"] = 2200, ["Infobox_aircraft_type"] = 12000, ["Infobox_airline"] = 4600, ["Infobox_airport"] = 15000, ["Infobox_airport/datatable"] = 15000, ["Infobox_album"] = 161000, ["Infobox_album/color"] = 189000, ["Infobox_album/link"] = 161000, ["Infobox_anatomy"] = 4400, ["Infobox_ancient_site"] = 5300, ["Infobox_animanga/Footer"] = 6700, ["Infobox_animanga/Header"] = 6700, ["Infobox_animanga/Print"] = 5400, ["Infobox_animanga/Video"] = 4600, ["Infobox_architect"] = 3600, ["Infobox_artist"] = 28000, ["Infobox_artist_discography"] = 5900, ["Infobox_artwork"] = 11000, ["Infobox_athlete"] = 3000, ["Infobox_automobile"] = 8400, ["Infobox_award"] = 13000, ["Infobox_badminton_player"] = 3200, ["Infobox_baseball_biography"] = 28000, ["Infobox_baseball_biography/style"] = 28000, ["Infobox_baseball_biography/styles.css"] = 28000, ["Infobox_basketball_biography"] = 20000, ["Infobox_basketball_biography/style"] = 20000, ["Infobox_basketball_club"] = 3000, ["Infobox_beauty_pageant"] = 2400, ["Infobox_bilateral_relations"] = 4300, ["Infobox_body_of_water"] = 18000, ["Infobox_book"] = 51000, ["Infobox_boxer"] = 5700, ["Infobox_bridge"] = 6000, ["Infobox_building"] = 27000, ["Infobox_character"] = 7700, ["Infobox_chess_biography"] = 3600, ["Infobox_chess_player"] = 3000, ["Infobox_church"] = 14000, ["Infobox_church/denomination"] = 14000, ["Infobox_church/font_color"] = 14000, ["Infobox_civil_conflict"] = 2300, ["Infobox_civilian_attack"] = 5300, ["Infobox_college_coach"] = 11000, ["Infobox_college_football_game"] = 2100, ["Infobox_college_sports_team_season"] = 39000, ["Infobox_college_sports_team_season/link"] = 39000, ["Infobox_college_sports_team_season/name"] = 39000, ["Infobox_college_sports_team_season/succession"] = 39000, ["Infobox_college_sports_team_season/team"] = 39000, ["Infobox_comic_book_title"] = 2900, ["Infobox_comics_character"] = 3600, ["Infobox_comics_creator"] = 3500, ["Infobox_comics_creator/styles.css"] = 3500, ["Infobox_company"] = 83000, ["Infobox_computing_device"] = 2300, ["Infobox_concert"] = 3200, ["Infobox_constituency"] = 5000, ["Infobox_country"] = 6300, ["Infobox_country/formernext"] = 5900, ["Infobox_country/imagetable"] = 5100, ["Infobox_country/multirow"] = 8100, ["Infobox_country/status_text"] = 2700, ["Infobox_country/styles.css"] = 6300, ["Infobox_country_at_games"] = 14000, ["Infobox_country_at_games/core"] = 14000, ["Infobox_country_at_games/see_also"] = 12000, ["Infobox_court_case"] = 4600, ["Infobox_court_case/images"] = 2400, ["Infobox_cricket_tournament"] = 2300, ["Infobox_cricketer"] = 32000, ["Infobox_cricketer/career"] = 32000, ["Infobox_cricketer/national_side"] = 7400, ["Infobox_criminal"] = 6200, ["Infobox_curler"] = 2600, ["Infobox_cycling_race_report"] = 4400, ["Infobox_cyclist"] = 16000, ["Infobox_dam"] = 5500, ["Infobox_designation_list"] = 19000, ["Infobox_designation_list/entry"] = 17000, ["Infobox_dim"] = 6900, ["Infobox_dim/core"] = 6900, ["Infobox_diocese"] = 3800, ["Infobox_drug"] = 9400, ["Infobox_drug/chemical_formula"] = 9500, ["Infobox_drug/data_page_link"] = 9400, ["Infobox_drug/formatATC"] = 9300, ["Infobox_drug/formatCASnumber"] = 9500, ["Infobox_drug/formatChEBI"] = 9500, ["Infobox_drug/formatChEMBL"] = 9500, ["Infobox_drug/formatChemDBNIAID"] = 9500, ["Infobox_drug/formatChemSpider"] = 9500, ["Infobox_drug/formatCompTox"] = 9500, ["Infobox_drug/formatDrugBank"] = 9500, ["Infobox_drug/formatIUPHARBPS"] = 9500, ["Infobox_drug/formatJmol"] = 9500, ["Infobox_drug/formatKEGG"] = 9500, ["Infobox_drug/formatPDBligand"] = 8800, ["Infobox_drug/formatPubChemCID"] = 9500, ["Infobox_drug/formatPubChemSID"] = 9500, ["Infobox_drug/formatUNII"] = 9500, ["Infobox_drug/legal_status"] = 9600, ["Infobox_drug/licence"] = 9500, ["Infobox_drug/maintenance_categories"] = 9500, ["Infobox_drug/non-ref-space"] = 3900, ["Infobox_drug/pregnancy_category"] = 9500, ["Infobox_drug/title"] = 9500, ["Infobox_election"] = 29000, ["Infobox_election/row"] = 29000, ["Infobox_election/shortname"] = 27000, ["Infobox_enzyme"] = 5100, ["Infobox_ethnic_group"] = 7100, ["Infobox_event"] = 5200, ["Infobox_family"] = 2100, ["Infobox_figure_skater"] = 4200, ["Infobox_film"] = 154000, ["Infobox_film/short_description"] = 150000, ["Infobox_film_awards"] = 2600, ["Infobox_film_awards/link"] = 2600, ["Infobox_film_awards/style"] = 2600, ["Infobox_food"] = 6800, ["Infobox_football_biography"] = 204000, ["Infobox_football_club"] = 27000, ["Infobox_football_club_season"] = 20000, ["Infobox_football_league"] = 2500, ["Infobox_football_league_season"] = 19000, ["Infobox_football_match"] = 5800, ["Infobox_football_tournament_season"] = 8000, ["Infobox_former_subdivision"] = 3300, ["Infobox_former_subdivision/styles.css"] = 3300, ["Infobox_galaxy"] = 2000, ["Infobox_game"] = 2400, ["Infobox_game_score"] = 3400, ["Infobox_gene"] = 13000, ["Infobox_given_name"] = 4000, ["Infobox_golfer"] = 4400, ["Infobox_golfer/highest_ranking"] = 4400, ["Infobox_government_agency"] = 10000, ["Infobox_government_cabinet"] = 2500, ["Infobox_gridiron_football_person"] = 2600, ["Infobox_gridiron_football_person/position"] = 5700, ["Infobox_gymnast"] = 3400, ["Infobox_handball_biography"] = 4900, ["Infobox_historic_site"] = 11000, ["Infobox_horseraces"] = 2600, ["Infobox_hospital"] = 6200, ["Infobox_hospital/care_system"] = 6200, ["Infobox_hospital/lists"] = 6200, ["Infobox_ice_hockey_biography"] = 20000, ["Infobox_ice_hockey_player"] = 19000, ["Infobox_ice_hockey_team"] = 3000, ["Infobox_ice_hockey_team_season"] = 2000, ["Infobox_international_football_competition"] = 5600, ["Infobox_islands"] = 8700, ["Infobox_islands/area"] = 9100, ["Infobox_islands/density"] = 9100, ["Infobox_islands/length"] = 8700, ["Infobox_islands/styles.css"] = 8700, ["Infobox_journal"] = 9700, ["Infobox_journal/Abbreviation_search"] = 9600, ["Infobox_journal/Bluebook_check"] = 9300, ["Infobox_journal/Former_check"] = 9300, ["Infobox_journal/ISO_4_check"] = 9300, ["Infobox_journal/ISSN-eISSN"] = 9400, ["Infobox_journal/Indexing_search"] = 9500, ["Infobox_journal/MathSciNet_check"] = 9300, ["Infobox_journal/NLM_check"] = 9300, ["Infobox_journal/frequency"] = 8500, ["Infobox_lake"] = 4400, ["Infobox_language"] = 9500, ["Infobox_language/family-color"] = 11000, ["Infobox_language/genetic"] = 6500, ["Infobox_language/linguistlist"] = 9500, ["Infobox_language/ref"] = 7100, ["Infobox_legislature"] = 3600, ["Infobox_library"] = 2100, ["Infobox_lighthouse"] = 2600, ["Infobox_lighthouse/light"] = 2600, ["Infobox_locomotive"] = 4800, ["Infobox_magazine"] = 7500, ["Infobox_manner_of_address"] = 3300, ["Infobox_mapframe"] = 78000, ["Infobox_martial_artist"] = 5600, ["Infobox_martial_artist/record"] = 5600, ["Infobox_medal_templates"] = 418000, ["Infobox_medical_condition"] = 10000, ["Infobox_medical_condition_(new)"] = 8200, ["Infobox_military_conflict"] = 21000, ["Infobox_military_installation"] = 9600, ["Infobox_military_person"] = 44000, ["Infobox_military_unit"] = 26000, ["Infobox_mine"] = 2100, ["Infobox_model"] = 2300, ["Infobox_mountain"] = 28000, ["Infobox_multi-sport_competition_event"] = 2200, ["Infobox_museum"] = 10000, ["Infobox_musical_artist"] = 121000, ["Infobox_musical_artist/color"] = 121000, ["Infobox_musical_artist/hCard_class"] = 310000, ["Infobox_musical_composition"] = 2800, ["Infobox_name"] = 7400, ["Infobox_name_module"] = 6600, ["Infobox_newspaper"] = 9500, ["Infobox_nobility"] = 2400, ["Infobox_noble"] = 7200, ["Infobox_officeholder"] = 213000, ["Infobox_officeholder/office"] = 218000, ["Infobox_official_post"] = 7900, ["Infobox_organization"] = 35000, ["Infobox_pageant_titleholder"] = 2800, ["Infobox_park"] = 7200, ["Infobox_person"] = 464000, ["Infobox_person/Wikidata"] = 5000, ["Infobox_person/height"] = 101000, ["Infobox_person/length"] = 7000, ["Infobox_person/weight"] = 66000, ["Infobox_philosopher"] = 3300, ["Infobox_planet"] = 4700, ["Infobox_play"] = 3800, ["Infobox_political_party"] = 14000, ["Infobox_power_station"] = 3000, ["Infobox_prepared_food"] = 3100, ["Infobox_professional_wrestler"] = 4200, ["Infobox_professional_wrestling_event"] = 2600, ["Infobox_protected_area"] = 14000, ["Infobox_protein_family"] = 2100, ["Infobox_publisher"] = 2400, ["Infobox_racehorse"] = 5500, ["Infobox_racing_driver"] = 3600, ["Infobox_radio_station"] = 22000, ["Infobox_rail"] = 2900, ["Infobox_rail_line"] = 7200, ["Infobox_rail_line/tracking"] = 7200, ["Infobox_rail_service"] = 2900, ["Infobox_rail_service/doc"] = 2900, ["Infobox_reality_competition_season"] = 3400, ["Infobox_record_label"] = 4000, ["Infobox_recurring_event"] = 6300, ["Infobox_religious_biography"] = 5000, ["Infobox_religious_building"] = 12000, ["Infobox_religious_building/color"] = 17000, ["Infobox_restaurant"] = 2400, ["Infobox_river"] = 30000, ["Infobox_river/calcunit"] = 30000, ["Infobox_river/discharge"] = 30000, ["Infobox_river/row-style"] = 30000, ["Infobox_river/source"] = 30000, ["Infobox_road"] = 24000, ["Infobox_road/meta/mask/category"] = 23000, ["Infobox_road/meta/mask/country"] = 24000, ["Infobox_road/styles.css"] = 25000, ["Infobox_road_small"] = 2300, ["Infobox_rockunit"] = 6400, ["Infobox_royalty"] = 21000, ["Infobox_royalty/short_description"] = 13000, ["Infobox_rugby_biography"] = 15000, ["Infobox_rugby_biography/correct_date"] = 15000, ["Infobox_rugby_biography/depcheck"] = 15000, ["Infobox_rugby_league_biography"] = 9900, ["Infobox_rugby_league_biography/PLAYER"] = 9800, ["Infobox_rugby_team"] = 2600, ["Infobox_sailboat_specifications"] = 2200, ["Infobox_saint"] = 4900, ["Infobox_school"] = 38000, ["Infobox_school/short_description"] = 38000, ["Infobox_school_district"] = 5600, ["Infobox_school_district/styles.css"] = 5600, ["Infobox_scientist"] = 48000, ["Infobox_service_record"] = 2600, ["Infobox_settlement"] = 557000, ["Infobox_settlement/areadisp"] = 232000, ["Infobox_settlement/columns"] = 93000, ["Infobox_settlement/columns/styles.css"] = 93000, ["Infobox_settlement/densdisp"] = 430000, ["Infobox_settlement/impus"] = 81000, ["Infobox_settlement/lengthdisp"] = 168000, ["Infobox_settlement/link"] = 93000, ["Infobox_settlement/metric"] = 207000, ["Infobox_settlement/pref"] = 288000, ["Infobox_settlement/styles.css"] = 557000, ["Infobox_ship_begin"] = 41000, ["Infobox_ship_career"] = 37000, ["Infobox_ship_characteristics"] = 40000, ["Infobox_ship_class_overview"] = 4100, ["Infobox_ship_image"] = 40000, ["Infobox_shopping_mall"] = 3400, ["Infobox_short_story"] = 2300, ["Infobox_skier"] = 2500, ["Infobox_soap_character"] = 2900, ["Infobox_software"] = 14000, ["Infobox_software/simple"] = 14000, ["Infobox_song"] = 75000, ["Infobox_song/color"] = 75000, ["Infobox_song/link"] = 75000, ["Infobox_spaceflight"] = 3500, ["Infobox_spaceflight/styles.css"] = 3500, ["Infobox_sport_event"] = 2100, ["Infobox_sports_competition_event"] = 16000, ["Infobox_sports_competition_event/medalrow"] = 11000, ["Infobox_sports_league"] = 4900, ["Infobox_sports_season"] = 5300, ["Infobox_sports_team"] = 2200, ["Infobox_sportsperson"] = 105000, ["Infobox_stadium"] = 3600, ["Infobox_station"] = 55000, ["Infobox_station/doc"] = 54000, ["Infobox_station/services"] = 55000, ["Infobox_station/styles.css"] = 55000, ["Infobox_street"] = 3300, ["Infobox_swimmer"] = 9300, ["Infobox_television"] = 56000, ["Infobox_television/Short_description"] = 54000, ["Infobox_television_channel"] = 6200, ["Infobox_television_episode"] = 12000, ["Infobox_television_episode/styles.css"] = 12000, ["Infobox_television_season"] = 9300, ["Infobox_television_station"] = 3700, ["Infobox_tennis_biography"] = 10000, ["Infobox_tennis_event"] = 2400, ["Infobox_tennis_tournament_event"] = 18000, ["Infobox_tennis_tournament_year"] = 9000, ["Infobox_tennis_tournament_year/color"] = 27000, ["Infobox_tennis_tournament_year/footer"] = 27000, ["Infobox_train"] = 2300, ["Infobox_union"] = 2100, ["Infobox_university"] = 26000, ["Infobox_user"] = 2600, ["Infobox_venue"] = 18000, ["Infobox_video_game"] = 27000, ["Infobox_video_game/styles.css"] = 27000, ["Infobox_volleyball_biography"] = 5200, ["Infobox_weapon"] = 7200, ["Infobox_website"] = 7700, ["Infobox_writer"] = 38000, ["Information"] = 105000, ["Information/styles.css"] = 105000, ["Inprogress"] = 2300, ["Input_link"] = 32000, ["Instagram"] = 10000, ["Interlanguage_link"] = 146000, ["Interlanguage_link_multi"] = 20000, ["Internet_Archive_author"] = 18000, ["Internet_Archive_film"] = 2500, ["Intitle"] = 12000, ["Invalid_SVG"] = 3700, ["Invalid_SVG/styles.css"] = 3700, ["Ipsock"] = 7900, ["Iptalk"] = 21000, ["IranCensus2006"] = 50000, ["IranNCSGN"] = 3200, ["Iran_Census_2006"] = 50000, ["Irc"] = 2100, ["Irish_place_name"] = 2600, ["IsIPAddress"] = 41000, ["IsValidPageName"] = 138000, ["Is_country_in_Central_America"] = 13000, ["Is_country_in_the_Caribbean"] = 14000, ["Is_interwiki_link"] = 6100, ["Is_italic_taxon"] = 469000, ["Is_redirect"] = 26000, ["Isbn"] = 7300, ["Isfdb_name"] = 3800, ["Isfdb_title"] = 4400, ["Isnumeric"] = 204000, ["Iso2continent"] = 35000, ["Iso2country"] = 23000, ["Iso2country/article"] = 23000, ["Iso2country/data"] = 23000, ["Iso2nationality"] = 220000, ["Issubst"] = 71000, ["Isu_name"] = 2300, ["Italic_dab2"] = 5100, ["Italic_title"] = 284000, ["Italic_title_prefixed"] = 8600, ["Italics_colon"] = 3500, ["Italictitle"] = 4300, ["Ivm"] = 5700, ["Ivm/styles.css"] = 5700, ["Ivmbox"] = 122000, ["Ivory_messagebox"] = 138000, ["Module:I18n/complex_date"] = 65000, ["Module:IP"] = 129000, ["Module:IPA_symbol"] = 4700, ["Module:IPA_symbol/data"] = 4700, ["Module:IPAc-en"] = 48000, ["Module:IPAc-en/data"] = 48000, ["Module:IPAc-en/phonemes"] = 48000, ["Module:IPAc-en/pronunciation"] = 48000, ["Module:IPAddress"] = 190000, ["Module:ISO_3166"] = 1020000, ["Module:ISO_3166/data/AT"] = 2500, ["Module:ISO_3166/data/BA"] = 3400, ["Module:ISO_3166/data/CA"] = 2500, ["Module:ISO_3166/data/CN"] = 2100, ["Module:ISO_3166/data/DE"] = 14000, ["Module:ISO_3166/data/ES"] = 3600, ["Module:ISO_3166/data/FR"] = 38000, ["Module:ISO_3166/data/GB"] = 6400, ["Module:ISO_3166/data/GR"] = 3100, ["Module:ISO_3166/data/IN"] = 28000, ["Module:ISO_3166/data/IR"] = 4600, ["Module:ISO_3166/data/National"] = 1020000, ["Module:ISO_3166/data/PL"] = 5100, ["Module:ISO_3166/data/RS"] = 3200, ["Module:ISO_3166/data/RU"] = 24000, ["Module:ISO_3166/data/US"] = 84000, ["Module:ISO_639_name"] = 20000, ["Module:ISOdate"] = 65000, ["Module:Icon"] = 573000, ["Module:Icon/data"] = 573000, ["Module:If_empty"] = 3670000, ["Module:If_in_page"] = 8800, ["Module:If_preview"] = 542000, ["Module:If_preview/configuration"] = 542000, ["Module:If_preview/styles.css"] = 542000, ["Module:Import_style"] = 11000, ["Module:In_lang"] = 352000, ["Module:Indent"] = 4200, ["Module:Infobox"] = 4050000, ["Module:Infobox/dates"] = 66000, ["Module:Infobox/styles.css"] = 4310000, ["Module:Infobox3cols"] = 294000, ["Module:InfoboxImage"] = 4350000, ["Module:Infobox_body_of_water_tracking"] = 18000, ["Module:Infobox_cyclist_tracking"] = 16000, ["Module:Infobox_gene"] = 13000, ["Module:Infobox_mapframe"] = 398000, ["Module:Infobox_military_conflict"] = 21000, ["Module:Infobox_military_conflict/styles.css"] = 21000, ["Module:Infobox_multi-lingual_name"] = 20000, ["Module:Infobox_multi-lingual_name/data"] = 20000, ["Module:Infobox_power_station"] = 3000, ["Module:Infobox_road"] = 25000, ["Module:Infobox_road/browselinks"] = 25000, ["Module:Infobox_road/errors"] = 24000, ["Module:Infobox_road/length"] = 25000, ["Module:Infobox_road/locations"] = 24000, ["Module:Infobox_road/map"] = 24000, ["Module:Infobox_road/route"] = 25000, ["Module:Infobox_road/sections"] = 24000, ["Module:Infobox_television"] = 56000, ["Module:Infobox_television_disambiguation_check"] = 63000, ["Module:Infobox_television_episode"] = 12000, ["Module:Infobox_television_season_disambiguation_check"] = 8800, ["Module:Infobox_television_season_name"] = 9300, ["Module:Internet_Archive"] = 18000, ["Module:IrelandByCountyCatNav"] = 2900, ["Module:Is_infobox_in_lead"] = 375000, ["Module:Is_instance"] = 332000, ["Module:Italic_title"] = 1100000, ["Module:Italic_title2"] = 5100, } ba90772744fe880e403a431fb72b58155e842d3a Template:When on basepage 10 191 544 543 2023-06-06T13:37:18Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:When_on_basepage]]: w wikitext text/x-wiki {{#switch: <!--If no or empty "page" parameter then detect basepage/subpage/subsubpage--> {{#if:{{{page|}}} | {{#if:{{#titleparts:{{{page}}}|0|3}} | subsubpage <!--Subsubpage or lower--> | {{#if:{{#titleparts:{{{page}}}|0|2}} | subpage | basepage }} }} | {{#if:{{#titleparts:{{FULLPAGENAME}}|0|3}} | subsubpage <!--Subsubpage or lower--> | {{#if:{{#titleparts:{{FULLPAGENAME}}|0|2}} | subpage | basepage }} }} }} | basepage = {{{1|}}} | subpage = {{{2|}}} | subsubpage = {{{3| {{{2|}}} }}} <!--Respecting empty parameter on purpose--> }}<!--End switch--><noinclude> {{Documentation}} </noinclude> cf4dc92df647a26ab0ce149772a1fe3ac6c3dfc0 Template:Correct title examples 10 192 546 545 2023-06-06T13:37:19Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Correct_title_examples]]: w wikitext text/x-wiki {| class="wikitable" style="background: transparent;" |+ Title changing or correcting templates + magic word {{Navbar|Correct title examples|plain=1|brackets=y}} |- ! scope="col" style="width: 20%;" | Wiki markup <br /><span style="font-weight: normal; font-size: 90%">[[Help:Transclusion|Transclusion]] from template:</span> ! scope="col" 40% | Involves ! scope="col" style="width: 20%;" | Correct name ! scope="col" style="width: 20%;" | Actual article name |- ! scope="row" | {{tlp|Italic title}} | Title in italics | ''To Kill a Mockingbird'' | [[To Kill a Mockingbird]] |- ! scope="row" | {{tlp|Italic title|all{{=}}yes}} | Complete title in italics, including parentheses | ''Randall and Hopkirk (Deceased)'' | [[Randall and Hopkirk (Deceased)]] |- ! scope="row" | {{tlp|Italic title|string{{=}}Ally McBeal}} | Phrase of {{para|string}} in italics | List of ''Ally McBeal'' episodes | [[List of Ally McBeal episodes]] |- ! scope="row" | {{tlp|Italic title|all{{=}}yes|string{{=}}Fringe}} | Phrase of {{para|string}} in italics; also looks in parentheses | Peter (''Fringe'' episode) | [[Peter (Fringe episode)]] |- ! scope="row" | {{tlp|Italic disambiguation}} | Disambiguation in italics | The End (''Lost'') | [[The End (Lost)]] |- ! scope="row" | {{tlp|Lowercase title}} | Lowercase first character | eBay | [[EBay]] |- ! scope="row" | {{tlp|Lowercase title|italic{{=}}yes}} | Lowercase first character and place title in italics, not including disambiguation | ''iCarly'' (soundtrack) | [[ICarly (soundtrack)]] |- ! scope="row" | {{tlp|Lowercase title|italic{{=}}yes|force{{=}}yes}} | Lowercase first character and place title in italics, including disambiguation | | |- ! scope="row" | {{tlp|Lowercase title|dab{{=}}yes}} | Lowercase first character and place disambiguation in italics | iSpy (''Modern Family'') | [[ISpy (Modern Family)]] |- ! scope="row" | {{tlp|Correct title|reason{{=}}bracket}} | [[bracket|< > [ ] { }]] | Benzo[''a'']pyrene | [[Benzo(a)pyrene]] |- ! scope="row" | {{tlp|Correct title|reason{{=}}#}} | [[Number sign|#]] | Pilot #5 || [[Pilot No. 5]] |- ! scope="row" | {{tlp|Correct title|reason{{=}}:}} | [[colon (punctuation)|:]] | DK: King of Swing | [[DK King of Swing]] |- ! scope="row" style="background: #EAECF1;" | <span style="font-weight: normal; font-size: 92%;">[[Help:Magic words|Magic word:]]</span> ! scope="row" colspan="3" style="background: #EAECF1;" | |- ! scope="row" | {{[[meta:Help:Magic words#Miscellany|DISPLAYTITLE]]}} | Various | _NSAKEY | [[NSAKEY]] |}<noinclude> {{Documentation|content= [[Category:Correct title templates|Examples]] }} </noinclude> 8245a1def0c8a75905f4159317fed38f23ad7ce3 Template:Italic title/doc 10 193 548 547 2023-06-06T13:37:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Italic_title/doc]]: w wikitext text/x-wiki {{Documentation subpage}} <!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]) --> {{High-use}} {{Template shortcut|Italic|Italics}} {{lua|Module:Italic title}} '''Template:Italic title''' italicizes page titles. Article titles cannot contain wiki formatting, such as <code><nowiki>''</nowiki></code>, so article titles cannot be italicized in the normal way. This template has the following effects: * Titles with no [[parentheses]] <code>()</code> are fully italicised: ** {{Nowrap|<code>Foo</code>}} &rarr; {{Nowrap|'''''Foo'''''}} ** {{Nowrap|<code>Talk:Foo</code>}} &rarr; {{Nowrap|'''Talk:''Foo'''''}} * Titles which contain parentheses are italicised before the first opening parenthesis: ** {{Nowrap|<code>Foo (bar)</code>}} &rarr; {{Nowrap|'''''Foo'' (bar)'''}} ** {{Nowrap|<code>Talk:Foo (bar)</code>}} &rarr; {{Nowrap|'''Talk:''Foo'' (bar)'''}} * Italicization can be forced on parenthesized text with the {{para|all|yes}} parameter. This template should only be used in articles that meet the criteria for italic titles given in the [[Wikipedia:Article titles#Italics and other formatting|Article titles]] policy. Meta templates which use this template should place {{Tl|Auto italic title}} in their documentation. ==Location on page== If the page has a {{t|Short description}} template, this template should go immediately underneath it, normally as the second item on the page. If there is no {{t|Short description}} template, add this template at the very top of the page, above everything else. There ought to be no blank line after {{tlg|Italic title|nolink=1}} because that will cause an extra blank line in the page's rendered appearance. ==Usage== ===Basic usage=== {{tlx|Italic title}} ===All parameters=== {{tlx|Italic title|noerror|string{{=}}text in title|all{{=}}yes}} == Parameters == * {{para|1}}: if this is set to {{para|1|noerror}}, error messages are suppressed. See [[#Errors]] for more details. * {{para|all}}: if this is set to {{para|all|yes}}, text in parentheses is italicized. * {{para|string}}: instead of italicizing the whole title, italicize only some specific text. For example, using {{para|string|Ally McBeal}} on the page {{nowrap|"List of Ally McBeal episodes"}} would result in {{nowrap|"List of ''Ally McBeal'' episodes"}}. <code><nowiki>{{</nowiki>[[Wikipedia:Page name#Changing the displayed title|DISPLAYTITLE]]:Desired Title<nowiki>}}</nowiki></code> can be used instead in cases not covered by the parameters, e.g. two substrings with italics, or italics combined with lowercase first character. == Errors == Sometimes you may see red error messages like this at the top of the page: <span class="error"><nowiki>Warning: Display title "<i>Article title (disambiguation)</i>" overrides earlier display title "<i>Article title</i> (disambiguation)".</nowiki></span> This usually means that there is another instance of {{tl|Italic title}} on the page, usually added by one of the infoboxes. Certain infoboxes, for example {{tl|Infobox album}}, add {{tl|Italic title}} by default. Check the template documentation for any infobox used on the page; it may have instructions about how to deal with italic titles. You may be able to adjust the italics from the infobox instead of using {{tl|Italic title}} at the top of the article. Or if that doesn't work, you may be able to disable the infobox's italics code altogether. If you are still having problems, try putting {{tl|Italic title}} after the infobox. You can suppress the error message by using the code <code><nowiki>{{Italic title|noerror}}</nowiki></code>. Technical details: this template uses the [[Wikipedia:Magic words#Behavior switches|DISPLAYTITLE magic word]] to italicize the title. Error messages can be produced by any two templates which use this magic word, and are not limited to this template. If you are unsure why you are getting a particular error message, you can ask about it at [[Wikipedia:Village pump (technical)]]. == Tracking categories == If the {{para|string}} parameter is used but that string is not found in the title, the page is added to [[:Category:Pages using italic title with no matching string]]. == TemplateData == {{TemplateDataHeader}} <templatedata> { "description": "A template to italicize article titles", "params": { "1": { "label": "Error options", "description": "If set to \"noerror\", suppresses error messages. Using this is a last-ditch fix - see the template documentation for other options.", "type": "string" }, "all": { "label": "All", "description": "If set to \"yes\", italicization is forced on parenthesized text.", "type": "string", "required": false }, "string": { "label": "String", "description": "Specify a string in the title to italicize, rather than italicizing the entire title.", "type": "string", "required": false } } } </templatedata> ==See also== * [[WP:ITALICTITLE]] * {{Tlx|Italic title prefixed}} * {{Tlx|Italics correction}} {{Correct title examples}} {{When on basepage |<!-- Categories go below this line, please; interwikis go to Wikidata, thank you! --> [[Category:Correct title templates]] [[Category:Lua-based templates]] }} 0f6069dab29a8a2cce34923da916a69b26bd6ed1 Cartagra 0 194 549 2023-06-06T13:38:40Z Otonashi Ayana 2 Created page with "{{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has been retroactively deemed a predecessor to the ''Kara no Shōjo'' series." wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has been retroactively deemed a predecessor to the ''Kara no Shōjo'' series. 4d91b00d4e7cf743f2f796b5760b033c7114b41a 560 549 2023-06-06T13:39:43Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. 73fda6fd8f22df0881e146ea550e989fc5b0cf96 561 560 2023-06-06T13:42:36Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, [[Shugo Takashiro]], as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. 4c05a36f2129fd924bf2fb23d3b67a95eb2e8df6 567 561 2023-06-06T13:54:11Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. ff417d2dd6a63214ac99207ea168718cd8d5dcbc 573 567 2023-06-06T14:07:29Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Endings == ''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. * Neutral End (Hatsune) —  * Neutral End (Kazuna) — * True End — Obtainable only after completing Kazuna's neutral End. * Bad Ends: ** {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ** {{o|Kaori|Fukamizu}} Ending (Nun Ending) ** {{o|Nana|Takashiro}} Ending ** Koyuki & Seri Ending 9c14ed6ceb0584235c6046aad8d8f4afc5866e5a 574 573 2023-06-06T14:10:31Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Endings == ''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending 4c0a95faef310102849779973eda67b2d7cc1594 575 574 2023-06-06T14:10:47Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Endings == ''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending [[Category:Cartagra]] 73fd7250d3e09df66d2e09294bee2c88c5cda15e Module:Italic title 828 195 551 550 2023-06-06T13:39:08Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Italic_title]]: w Scribunto text/plain -- This module implements {{italic title}}. require('strict') local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local checkTypeForNamedArg = libraryUtil.checkTypeForNamedArg local yesno = require('Module:Yesno') -------------------------------------------------------------------------------- -- ItalicTitle class -------------------------------------------------------------------------------- local ItalicTitle = {} do ---------------------------------------------------------------------------- -- Class attributes and functions -- Things that belong to the class are here. Things that belong to each -- object are in the constructor. ---------------------------------------------------------------------------- -- Keys of title parts that can be italicized. local italicizableKeys = { namespace = true, title = true, dab = true, } ---------------------------------------------------------------------------- -- ItalicTitle constructor -- This contains all the dynamic attributes and methods. ---------------------------------------------------------------------------- function ItalicTitle.new() local obj = {} -- Function for checking self variable in methods. local checkSelf = libraryUtil.makeCheckSelfFunction( 'ItalicTitle', 'obj', obj, 'ItalicTitle object' ) -- Checks a key is present in a lookup table. -- Param: name - the function name. -- Param: argId - integer position of the key in the argument list. -- Param: key - the key. -- Param: lookupTable - the table to look the key up in. local function checkKey(name, argId, key, lookupTable) if not lookupTable[key] then error(string.format( "bad argument #%d to '%s' ('%s' is not a valid key)", argId, name, key ), 3) end end -- Set up object structure. local parsed = false local categories = {} local italicizedKeys = {} local italicizedSubstrings = {} -- Parses a title object into its namespace text, title, and -- disambiguation text. -- Param: options - a table of options with the following keys: -- title - the title object to parse -- ignoreDab - ignore any disambiguation parentheses -- Returns the current object. function obj:parseTitle(options) checkSelf(self, 'parseTitle') checkType('parseTitle', 1, options, 'table') checkTypeForNamedArg('parseTitle', 'title', options.title, 'table') local title = options.title -- Title and dab text local prefix, parentheses if not options.ignoreDab then prefix, parentheses = mw.ustring.match( title.text, '^(.+) %(([^%(%)]+)%)$' ) end if prefix and parentheses then self.title = prefix self.dab = parentheses else self.title = title.text end -- Namespace local namespace = mw.site.namespaces[title.namespace].name if namespace and #namespace >= 1 then self.namespace = namespace end -- Register the object as having parsed a title. parsed = true return self end -- Italicizes part of the title. -- Param: key - the key of the title part to be italicized. Possible -- keys are contained in the italicizableKeys table. -- Returns the current object. function obj:italicize(key) checkSelf(self, 'italicize') checkType('italicize', 1, key, 'string') checkKey('italicize', 1, key, italicizableKeys) italicizedKeys[key] = true return self end -- Un-italicizes part of the title. -- Param: key - the key of the title part to be un-italicized. Possible -- keys are contained in the italicizableKeys table. -- Returns the current object. function obj:unitalicize(key) checkSelf(self, 'unitalicize') checkType('unitalicize', 1, key, 'string') checkKey('unitalicize', 1, key, italicizableKeys) italicizedKeys[key] = nil return self end -- Italicizes a substring in the title. This only affects the main part -- of the title, not the namespace or the disambiguation text. -- Param: s - the substring to be italicized. -- Returns the current object. function obj:italicizeSubstring(s) checkSelf(self, 'italicizeSubstring') checkType('italicizeSubstring', 1, s, 'string') italicizedSubstrings[s] = true return self end -- Un-italicizes a substring in the title. This only affects the main -- part of the title, not the namespace or the disambiguation text. -- Param: s - the substring to be un-italicized. -- Returns the current object. function obj:unitalicizeSubstring(s) checkSelf(self, 'unitalicizeSubstring') checkType('unitalicizeSubstring', 1, s, 'string') italicizedSubstrings[s] = nil return self end -- Renders the object into a page name. If no title has yet been parsed, -- the current title is used. -- Returns string function obj:renderTitle() checkSelf(self, 'renderTitle') -- Italicizes a string -- Param: s - the string to italicize -- Returns string. local function italicize(s) assert(type(s) == 'string', 's was not a string') assert(s ~= '', 's was the empty string') return string.format('<i>%s</i>', s) end -- Escape characters in a string that are magic in Lua patterns. -- Param: pattern - the pattern to escape -- Returns string. local function escapeMagicCharacters(s) assert(type(s) == 'string', 's was not a string') return s:gsub('%p', '%%%0') end -- If a title hasn't been parsed yet, parse the current title. if not parsed then self:parseTitle{title = mw.title.getCurrentTitle()} end -- Italicize the different parts of the title and store them in a -- titleParts table to be joined together later. local titleParts = {} -- Italicize the italicizable keys. for key in pairs(italicizableKeys) do if self[key] then if italicizedKeys[key] then titleParts[key] = italicize(self[key]) else titleParts[key] = self[key] end end end -- Italicize substrings. If there are any substrings to be -- italicized then start from the raw title, as this overrides any -- italicization of the main part of the title. if next(italicizedSubstrings) then titleParts.title = self.title for s in pairs(italicizedSubstrings) do local pattern = escapeMagicCharacters(s) local italicizedTitle, nReplacements = titleParts.title:gsub( pattern, italicize ) titleParts.title = italicizedTitle -- If we didn't make any replacements then it means that we -- have been passed a bad substring or that the page has -- been moved to a bad title, so add a tracking category. if nReplacements < 1 then categories['Pages using italic title with no matching string'] = true end end end -- Assemble the title together from the parts. local ret = '' if titleParts.namespace then ret = ret .. titleParts.namespace .. ':' end ret = ret .. titleParts.title if titleParts.dab then ret = ret .. ' (' .. titleParts.dab .. ')' end return ret end -- Returns an expanded DISPLAYTITLE parser function called with the -- result of obj:renderTitle, plus any other optional arguments. -- Returns string function obj:renderDisplayTitle(...) checkSelf(self, 'renderDisplayTitle') return mw.getCurrentFrame():callParserFunction( 'DISPLAYTITLE', self:renderTitle(), ... ) end -- Returns an expanded DISPLAYTITLE parser function called with the -- result of obj:renderTitle, plus any other optional arguments, plus -- any tracking categories. -- Returns string function obj:render(...) checkSelf(self, 'render') local ret = self:renderDisplayTitle(...) for cat in pairs(categories) do ret = ret .. string.format( '[[Category:%s]]', cat ) end return ret end return obj end end -------------------------------------------------------------------------------- -- Exports -------------------------------------------------------------------------------- local p = {} local function getArgs(frame, wrapper) assert(type(wrapper) == 'string', 'wrapper was not a string') return require('Module:Arguments').getArgs(frame, { wrappers = wrapper }) end -- Main function for {{italic title}} function p._main(args) checkType('_main', 1, args, 'table') local italicTitle = ItalicTitle.new() italicTitle:parseTitle{ title = mw.title.getCurrentTitle(), ignoreDab = yesno(args.all, false) } if args.string then italicTitle:italicizeSubstring(args.string) else italicTitle:italicize('title') end return italicTitle:render(args[1]) end function p.main(frame) return p._main(getArgs(frame, 'Template:Italic title')) end function p._dabonly(args) return ItalicTitle.new() :italicize('dab') :render(args[1]) end function p.dabonly(frame) return p._dabonly(getArgs(frame, 'Template:Italic dab')) end return p 9b49016c8f526f680e9ecdaf36ec4ceafda2a2f8 Template:Module other 10 167 553 386 2023-06-06T13:39:15Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Module_other]]: w wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:Module}} | module | other }} }} | module = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> 5a2444103b3cffc028f4dc0de2e8a278f87c7129 Template:Module rating 10 196 555 554 2023-06-06T13:39:16Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Module_rating]]: w wikitext text/x-wiki <includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox | type = notice | image = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]] | alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]] | beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]] | release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]] | protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]] | semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]] }} | style = | textstyle = | text = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }} }} | alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }} }} | beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }} }} | release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }} }} | protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | #default = {{error|Module rating is invalid or not specified.}} }} }}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude> {{module rating|release|nocat=true|demospace=module}} {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go in Wikidata. --> </noinclude> bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc Template:High-risk 10 197 557 556 2023-06-06T13:39:16Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:High-risk]]: w wikitext text/x-wiki #REDIRECT [[Template:High-use]] {{Rcat shell| {{R with Wikidata item}} {{R from merge}} {{R from template shortcut}} }} 52c9a8c75748fd2b20183ed6c60e1f3c3a435cc9 Module:Italic title/doc 828 198 559 558 2023-06-06T13:39:17Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Italic_title/doc]]: w wikitext text/x-wiki {{High-risk| approximately 844000 }} {{module rating|protected}} {{Lua|Module:Yesno|Module:Arguments}} This module implements {{tl|italic title}} and {{tl|italic dab}}. Please see the template pages for documentation. 5dea766bbc5c3c2d91e2b8df9e54d506aef23b35 MediaWiki:Common.css 8 7 562 523 2023-06-06T13:48:10Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Courgette&display=swap'); :root{ --handwriting:Courgette; } .item-title{ pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 537b3094aebe7b30dc3a4f2ed213e167eadb55ed 563 562 2023-06-06T13:50:05Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Courgette&display=swap'); :root{ --handwriting:Courgette; } .item-title{ font-family:var(--handwriting); pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 1b21fe807112898a5f10d1c5a800be3ded151b8f 564 563 2023-06-06T13:51:32Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting:Courgette; } .item-title{ font-family:var(--handwriting); pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 54c7e5333d3d594eab57e7d02281b6d3991a0849 565 564 2023-06-06T13:52:01Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting:Merienda; } .item-title{ font-family:var(--handwriting); pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 260d07602415c68c41e6c699c85f069399dd401b Kara no Shoujo 0 181 566 525 2023-06-06T13:53:48Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. 1428a49cad657b2e5a8ebb340eafc957c99cd067 Template:O 10 199 568 2023-06-06T14:02:10Z Otonashi Ayana 2 Created page with "{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}" wikitext text/x-wiki {{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}} 0ef653b6e49a11716c9343d1e0b61fb34a387cd0 569 568 2023-06-06T14:02:59Z Otonashi Ayana 2 Otonashi Ayana moved page [[Template:Nl]] to [[Template:O]] without leaving a redirect wikitext text/x-wiki {{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}} 0ef653b6e49a11716c9343d1e0b61fb34a387cd0 572 569 2023-06-06T14:05:37Z Otonashi Ayana 2 wikitext text/x-wiki {{charname|{{{1}}}|{{{2}}}}} d9d0a5256357f8d951a7d8b30ce7ce6168081688 Template:N 10 174 570 465 2023-06-06T14:03:22Z Otonashi Ayana 2 wikitext text/x-wiki [[{{o}}]] 39f7e2a6d9a6daf5aa6ab09aa4b7c4dab28244aa 571 570 2023-06-06T14:04:18Z Otonashi Ayana 2 wikitext text/x-wiki [[{{{1}}} {{{2}}}|{{charname|{{{1}}}|{{{2}}}}}]] 24b617b3462b7070ea0f183d6e746d576b7aa33a Category:Cartagra 14 200 576 2023-06-06T14:10:58Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Cartagra characters 10 201 577 2023-06-06T14:21:45Z Otonashi Ayana 2 Created page with "{{Navbox | name = cartagra characters | title = {{cartagra}} | state = autocollapse | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Nana|Takashiro}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} [[Category:Cartagra]] [[Category:Characters]] </includeonly>" wikitext text/x-wiki {{Navbox | name = cartagra characters | title = {{cartagra}} | state = autocollapse | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Nana|Takashiro}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} [[Category:Cartagra]] [[Category:Characters]] </includeonly> ef8b16c81d3ac3cd97a0520fa1bd7c7d0959f93a 578 577 2023-06-06T14:22:51Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = {{cartagra}} | state = autocollapse | listclass = hlist | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} | group2 = Police | list2 = * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} }} [[Category:Cartagra]] [[Category:Characters]] </includeonly> 69cf08da01e9838f5b6c8216c77db7a3ebb586d1 579 578 2023-06-06T14:24:40Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = {{cartagra}} | state = autocollapse | listclass = hlist | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} | group2 = Police | list2 = * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} }}<includeonly> [[Category:Cartagra]] [[Category:Characters]] </includeonly> fd4a4bbfc8c3f896a8f76f4dc552d64a1718fa51 Shugo Takashiro 0 62 580 326 2023-06-06T14:25:29Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * {{spoiler|[[Kazuna Kozuki]] (love interest)}} * [[Kazuna Takashiro]] (wife) }} }} {{cartagra characters}} {{kns characters}} ac390ee3764cbbe2f155ba4fcaa7609649ce05a4 585 580 2023-06-06T14:37:50Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = {{plainlist| * {{spoiler|[[Kazuna Kozuki]] (love interest)}} * [[Kazuna Takashiro]] (wife) }} }} {{cartagra characters}} {{kns characters|state=collapsed}} 0a8b07b6017955d8c5b1d1de1695c4f55a1952a9 Template:Kns characters 10 138 581 466 2023-06-06T14:25:58Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = autocollapse | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> ca4fd2618a0fca44e3e6146b3e8fb0509ad1e828 584 581 2023-06-06T14:37:24Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> e4b72464658da61aad8989fec69eaf9f187971d6 Template:C 10 202 582 2023-06-06T14:33:12Z Otonashi Ayana 2 Redirected page to [[Template:Character name]] wikitext text/x-wiki #REDIRECT [[Template:Character name]] 16cc49e743d5c36e941e82df59c0ce4db9eb66a3 Ryoichi Yaginuma 0 203 583 2023-06-06T14:35:05Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Ryoichi | family name = Yaginuma | jname = | image = | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement." wikitext text/x-wiki {{infobox character | given name = Ryoichi | family name = Yaginuma | jname = | image = | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement. e849a3436cdb173f03ebfc2f83b348f2c7e4c5e5 Template:Tree chart 10 204 587 586 2023-06-06T14:40:52Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tree_chart]]: w wikitext text/x-wiki <includeonly>{{#invoke:Tree chart|main}}</includeonly><noinclude>{{documentation}} </noinclude> 4936e8a8e590be91372b7d234aeea78bd418bf0e Template:Chart bottom 10 205 589 588 2023-06-06T14:41:03Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Chart_bottom]]: w wikitext text/x-wiki <includeonly>|}</includeonly><noinclude> {{documentation|Template:Chart top/doc}} </noinclude> 8656d1ab679f4008937f20349c95b51e5b78781e Template:Chart top 10 206 591 590 2023-06-06T14:41:04Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Chart_top]]: w wikitext text/x-wiki {| class="collapsible {{#ifeq:{{Yesno-no|{{{collapsed|{{{collapse|}}}}}}}}|yes|collapsed|expanded}}" style="{{#switch:{{{align|}}}{{{float|}}} | left = margin: 0.3em 1em 0.3em 0; float:left; clear:{{{clear|left}}}; min-width:{{{min-width|{{{width|33em}}}}}}; | right = margin: 0.3em 0 0.3em 1em; float:right; clear:{{{clear|right}}}; min-width:{{{min-width|{{{width|33em}}}}}}; | #default = margin: 0.3em auto auto; clear:{{{clear|none}}}; min-width:{{{min-width|{{{width|60em}}}}}}; }} width:{{{width|auto}}}; font-size:85%; border:1px solid #aaa" ! style="padding:0.2em 0.3em 0.2em {{#if:{{{template_name|}}}|0.3em|4.3em}};{{#if:{{{background|}}}|background:{{{background|}}}|background:none}}; width:{{{width|auto}}}" | {{#if:{{{template_name|}}} |{{Navbar-collapsible|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}|{{{template_name}}}}} |{{{title|{{{1|Family of {{PAGENAME}}}}}}}} }} |- | style="text-align:{{{text-align|center}}}" | {{#invoke:Check for unknown parameters|check|unknown=[[Category:Pages using chart top with unknown parameters|_VALUE_{{PAGENAME}}]]|preview=Page using [[Template:Chart top]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | align | background | clear | collapse | collapsed | float | min-width | template_name | text-align | title | width }}<noinclude> |} {{documentation}}</noinclude> ad95734f767d68a3d7d70174fbc23ed2e147382e Template:Tree chart/end 10 207 593 592 2023-06-06T14:41:04Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tree_chart/end]]: w wikitext text/x-wiki <noinclude><table></noinclude></table><noinclude>{{Documentation|Template:Chart/end/doc}}</noinclude> 15c4ecebd8444b7398759d8fbcb9ac702f8ce07f Template:Tree chart/start 10 208 595 594 2023-06-06T14:41:05Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tree_chart/start]]: w wikitext text/x-wiki <table style="border-spacing: 0px; border-collapse: separate; {{#switch: {{{align|}}} |left = float: left; |right = float: right; |center = margin: 0 auto; |#default = }} {{{style|}}}"><noinclude> {{chart/end}} {{Documentation}} </noinclude> e115d0e78fc595436e4e549d91432415a671fded Module:Tree chart 828 209 597 596 2023-06-06T14:41:05Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Tree_chart]]: w Scribunto text/plain require('strict') local p = {} local cells = mw.loadData('Module:Tree chart/data') function p._main(cell_args) local ret = mw.html.create() local top = ret:tag('tr') :css{ height = '1px', ['text-align'] = 'center' } local bottom = ret:tag('tr') :css{ height = '1px', ['text-align'] = 'center' } for _, v in ipairs(cell_args) do if type(v) == 'string' then top:wikitext(cells[v].t) bottom:wikitext(cells[v].b) else top:tag('td') :attr{ colspan = v.colspan or cell_args.colspan or 6, rowspan = v.rowspan or cell_args.rowspan or 2 } :css{ padding = '0.2em', border = (v.border or cell_args.border or '2') .. 'px solid black' } :cssText(v.boxstyle or cell_args.boxstyle) :wikitext(v.text) end end return tostring(ret) end function p.main(frame) local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:Tree chart', trim = false, removeBlanks = false}) local cell_args = { colspan = args.colspan, rowspan = args.rowspan, border = args.border, boxstyle = args.boxstyle } for _, val in ipairs(args) do local trimmedVal = val:match('^%s*(.-)%s*$') if trimmedVal == '' then trimmedVal = '$' end if cells[trimmedVal] then table.insert(cell_args, trimmedVal) else -- Unnamed params behave weirdly -- white space at the front counts for param_{{{1}}}, but not whitespace at the end, so remove it local rightTrimmedVal = val:gsub('%s+$','') table.insert(cell_args, { text = args[trimmedVal] or ('{{{'..trimmedVal..'}}}'), colspan = args['colspan_'..rightTrimmedVal], rowspan = args['rowspan_'..rightTrimmedVal], border = args['border_'..rightTrimmedVal], boxstyle = args['boxstyle_'..rightTrimmedVal] }) end end return p._main(cell_args) end return p 6ae1652b12114e8af9fa123efd3bd2abc164e6fd Module:Tree chart/data 828 210 599 598 2023-06-06T14:41:05Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Tree_chart/data]]: w Scribunto text/plain local SLD = '1px solid black' local DSH = '1px dashed black' local DOT = '1px dotted black' local data = { ['!'] = { t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['%'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ["'"] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['('] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, [')'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['*'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['+'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, [','] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['-'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['.'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['7'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, [':'] = { t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['A'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['C'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['D'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['E'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['F'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['G'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['G2'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['H'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['J'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['K'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['L'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['M'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['P'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['Q'] = { t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['R'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['S'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['T3'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['T2'] = { b = { { style ={ ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['T'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['U'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['V'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } }, ['W'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['X'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['X2'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['Y'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['Z'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['^'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['$'] = { t = { { attr = { colspan = '2', rowspan = '2'}, style = { width = '2em', height = '2em' } } } }, ['`'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['a2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['a'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['b2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['b3'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['b'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['c'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['d'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['di'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['dj'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['e'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['f'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['fh'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] =DSH, width = '1em', height = '1em' } } } }, ['fy'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['h'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['he'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['i'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['ic'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['j'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['jc'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['k2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['k3'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['k'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DOT, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['kq'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['kr'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['kq2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['kr2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['l2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['l3'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['l4'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['l'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['m2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['m'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DOT, width = '2em', height = '1em' } } } }, ['mp'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['mp2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['n2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['n'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['np'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['np2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['o2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = DSH, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['o'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { attr = { rowspan = '2' }, style = { ['border-right'] = SLD, width = '1em', height = '2em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['om'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['om2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['on'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['on2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DOT, width = '1em', height = '1em' } } } }, ['p2'] = { b = { { style = { ['border-right'] = DSH, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DSH, ['border-bottom'] = '1px dotted #000001', width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['p'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DOT, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['q2'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = '1px dashed #000001', width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['q'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } } } }, ['ql'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['ql2'] = { b = { { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = DOT, ['border-bottom'] =DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['r2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } }, ['r'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['rl'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = SLD, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['rl2'] = { b = { { style = { ['border-right'] = DOT, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['t'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { style = { ['border-right'] = SLD, ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } } } }, ['v'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = SLD, width = '2em', height = '1em' } } } }, ['x'] = {}, ['y'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } }, { style = { width = '1em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } }, ['ye'] = { b = { { style = { ['border-right'] = SLD, width = '1em', height = '1em' } } }, t = { { style = { ['border-bottom'] = DSH, width = '1em', height = '1em' } }, { attr = { rowspan = '2' }, style = { width = '1em', height = '2em' } } } }, ['~'] = { b = { { attr = { colspan = '2' }, style = { width = '2em', height = '1em' } } }, t = { { attr = { colspan = '2' }, style = { ['border-bottom'] = DSH, width = '2em', height = '1em' } } } } } local retval = {} for k,v in pairs(data) do retval[k] = {} for k2,v2 in pairs(v) do local renderedCells = mw.html.create() for k3,v3 in ipairs(v2) do renderedCells:tag('td'):css(v3.style or {}):attr(v3.attr or {}) end retval[k][k2] = tostring(renderedCells) end end return retval 872003fd8ebaf82fdff91a68b5505e5ee25ae350 Template:User other 10 211 601 600 2023-06-06T14:41:06Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:User_other]]: w wikitext text/x-wiki {{#switch: <!--If no or empty "demospace" parameter then detect namespace--> {{#if:{{{demospace|}}} | {{lc: {{{demospace}}} }} <!--Use lower case "demospace"--> | {{#ifeq:{{NAMESPACE}}|{{ns:User}} | user | other }} }} | user = {{{1|}}} | other | #default = {{{2|}}} }}<!--End switch--><noinclude> {{documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> </noinclude> f5acc28ea326bedc6c0df1b8fb14cfe5fa940a7f Template:Large 10 212 603 602 2023-06-06T14:41:07Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Large]]: w wikitext text/x-wiki <span style="font-size:120%">{{{1}}}</span><noinclude> {{Documentation}} </noinclude> 8ba6ec8c3178e22dc1f05aa239df8a2b052be668 Template:Warnsign 10 213 605 604 2023-06-06T14:41:08Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Warnsign]]: w wikitext text/x-wiki {{Respond|Ambox warning pn.svg|{{{{{|safesubst:}}}ucfirst:{{{1|Warning}}}}}|alt=red-outlined triangle containing exclamation point}}<noinclude> {{Documentation}} <!--Please add this template's categories to the /doc subpage, not here - thanks!--> </noinclude> 77a823d5d0311de0e5fda3654918a744a3fa4033 Template:Graph, chart and plot templates 10 214 607 606 2023-06-06T14:41:10Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Graph,_chart_and_plot_templates]]: w wikitext text/x-wiki {{Navbox | name = Graph, chart and plot templates |title=[[:Category:Graph, chart and plot templates|Graph, chart and plot templates]] |state = {{{state<includeonly>|expanded</includeonly>}}} |bodyclass = hlist |group5 = Many types |list5 = [[Template:Graph:Chart]], [[Module:Chart]] |group10 = [[mw:Extension:Graph|Graph Extension]] |list10 = [[Template:Graph:Chart]], [[Template:Graph:Lines]], [[Template:Graph:Stacked]], [[Template:Graph:Street map with marks]] |group20 = Bar |list20 = [[Template:Bar chart]], [[Template:Bar box]] |group30 = Line |list30 = [[Template:Graph:Lines]] |group40 = [[Scatter plot]] |list40 = [[Template:Dot chart]] |group50 = [[Pie chart]] |list50 = [[Template:Pie chart]] |group60 = Tree |list60 = * [[Template:Tree chart]] * [[Template:Ahnentafel]] |group70 = Stacked |list70 = [[Template:Stacked bar]] |group80 = [[Cartogram]] |list80 = [[Template:Graph:Map]], [[Template:Global Heat Maps by Year]] |group90 = Color legends |list90 = [[Template:Legend]], [[Template:Legend-line]], [[Template:BrewerColorLegends]] }}{{Template other |<includeonly>{{sandbox other||[[Category:Graph, chart and plot templates]]}}</includeonly>}}<noinclude>{{documentation|content= {{collapsible option|default=expanded}} [[Category:Graph, chart and plot templates| ]] }}</noinclude> 9669c735c207d7384b95b7e4b32c85cffcc929f2 Template:Tree chart/doc 10 215 609 608 2023-06-06T14:41:12Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tree_chart/doc]]: w wikitext text/x-wiki {{Lua|Module:Tree chart}} {{distinguish|Template:Graph:Chart}}<noinclude> {{documentation subpage}}</noinclude><!--PLEASE ADD METADATA TO THE <includeonly> SECTION AT THE BOTTOM OF THIS PAGE ↓↓↓ EDIT TEMPLATE DOCUMENTATION BELOW THIS LINE ↓↓↓--> ==Usage== This template produces one row in a "family tree"-like chart consisting of boxes and connecting lines based loosely on an [[ASCII art]]-like syntax. It is meant to be used in conjunction with {{tl|Tree chart/start}} and {{tl|Tree chart/end}}. The chart is displayed as [[HTML]] tables using [[Cascading Style Sheets|CSS]] attributes, and may contain arbitrary [[wiki markup]] within the boxes. This implementation was based on the now-deprecated {{tl|family tree}} template. ==Basic example== This code: <syntaxhighlight lang="wikitext"> {{Tree chart/start|align=center|summary=An example family tree}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} </syntaxhighlight> produces this: {{Tree chart/start|align=center|summary=An example family tree}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad; and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy. The code above produces a table of size 9 rows x 18 columns as shown below. [[File:Chart template table structure.png|center|500px|The table structure created using the example above]] ==Collapsible basic example== This code uses {{tl|chart top}}: <syntaxhighlight lang="wikitext"> {{chart top|An example family tree}} {{Tree chart/start|align=center}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} {{chart bottom}} </syntaxhighlight> produces this: {{chart top|An example family tree}} {{Tree chart/start|align=center}} {{Tree chart| | | |GrMa |~|y|~| GRP | |GrMa=Grandma|GRP=Grandpa}} {{Tree chart| | | | | | | |)|-|-|-|.| }} {{Tree chart| | | MOM |y| DAD | |DAISY|MOM=Mom|DAD=Dad|DAISY=[[Aunt Daisy]]}} {{Tree chart| |,|-|-|-|+|-|-|-|.| | | }} {{Tree chart| JOE | | ME | | SIS | | |JOE=My brother Joe|ME='''Me!'''|SIS=My little sister}} {{Tree chart/end}} {{chart bottom}} This chart visually displays the information that I have a brother Joe and a little sister; my mom married my dad; and my dad's parents were Grandma and Grandpa; and my dad's parents had another child, Aunt Daisy. ==Parameters== The template accepts any number of unnamed parameters with each parameter specifying a '''tile''' or a '''box'''. * '''Boxes''' can contain arbitrary [[wiki markup]]. The content of each box is specified using additional named parameters appended to the template call. Each box is '''three tiles wide''' and normally has a black border two pixels wide. Boxes can have any name that is a valid template parameter name, subject to a minimum of two alphabetical characters. * '''Tiles''' are line drawing symbols used to connect the boxes. They consist of various styles of horizontal and vertical lines along with corners and crossings as needed. Tiles are specified using their one- or two-character name: for the most common tiles, that character is more or less approximate to the tile's appearance. A special case of a tile is the '''empty tile''', specified by a single space character. A table of available tiles is given below. {| style="float: left; margin-left: 1em;" |+ '''Solid lines:''' |- | {{large|<code>!</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|!}}{{Tree chart/end}} || &nbsp; | {{large|<code>,</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|,}}{{Tree chart/end}} || &nbsp; | {{large|<code>v</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|v}}{{Tree chart/end}} || &nbsp; | {{large|<code>.</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|.}}{{Tree chart/end}} || &nbsp; |- | {{large|<code>-</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|-}}{{Tree chart/end}} || &nbsp; | {{large|<code>)</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|)}}{{Tree chart/end}} || &nbsp; | {{large|<code>+</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|+}}{{Tree chart/end}} || &nbsp; | {{large|<code>(</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|(}}{{Tree chart/end}} || &nbsp; |- | || || | {{large|<code>`</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|`}}{{Tree chart/end}} || &nbsp; | {{large|<code>^</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|^}}{{Tree chart/end}} || &nbsp; | {{large|<code>'</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|'}}{{Tree chart/end}} || &nbsp; |} {| style="float: left; margin-left: 1em;" |+ '''Dashed lines:''' |- | {{large|<code>:</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|:}}{{Tree chart/end}} || &nbsp; | {{large|<code>F</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|F}}{{Tree chart/end}} || &nbsp; | {{large|<code>V</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|V}}{{Tree chart/end}} || &nbsp; | {{large|<code>7</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|7}}{{Tree chart/end}} || &nbsp; |- | {{large|<code>~</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|~}}{{Tree chart/end}} || &nbsp; | {{large|<code>D</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|D}}{{Tree chart/end}} || &nbsp; | {{large|<code>%</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|%}}{{Tree chart/end}} || &nbsp; | {{large|<code>C</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|C}}{{Tree chart/end}} || &nbsp; |- | || || | {{large|<code>L</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|L}}{{Tree chart/end}} || &nbsp; | {{large|<code>A</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|A}}{{Tree chart/end}} || &nbsp; | {{large|<code>J</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|J}}{{Tree chart/end}} || &nbsp; |} {| style="float: left; margin-left: 1em;" |+ '''Dotted lines:''' |- | {{large|<code>Q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Q}}{{Tree chart/end}} || &nbsp; | {{large|<code>S</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|S}}{{Tree chart/end}} || &nbsp; | {{large|<code>M</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|M}}{{Tree chart/end}} || &nbsp; | {{large|<code>T</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|T}}{{Tree chart/end}} || &nbsp; |- | {{large|<code>P</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|P}}{{Tree chart/end}} || &nbsp; | {{large|<code>H</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|H}}{{Tree chart/end}} || &nbsp; | {{large|<code>R</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|R}}{{Tree chart/end}} || &nbsp; | {{large|<code>G</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|G}}{{Tree chart/end}} || &nbsp; |- | || || | {{large|<code>Y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Y}}{{Tree chart/end}} || &nbsp; | {{large|<code>W</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|W}}{{Tree chart/end}} || &nbsp; | {{large|<code>Z</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|Z}}{{Tree chart/end}} || &nbsp; |} {| style="float: left; margin-left: 1em;" |+'''Dashes hrzntl solid vrtcl:''' | {{large|<code>fy</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fy}}{{Tree chart/end}} | {{large|<code>y</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|y}}{{Tree chart/end}} | {{large|<code>ye</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ye}}{{Tree chart/end}} |- | {{large|<code>f</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|f}}{{Tree chart/end}} | {{large|<code>t</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|t}}{{Tree chart/end}} | {{large|<code>e</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|e}}{{Tree chart/end}} |- | {{large|<code>fh</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|fh}}{{Tree chart/end}} | {{large|<code>h</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|h}}{{Tree chart/end}} | {{large|<code>he</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|he}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Solid hrzntl dashes vrtcl:''' | {{large|<code>dj</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|dj}}{{Tree chart/end}} | {{large|<code>j</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|j}}{{Tree chart/end}} | {{large|<code>jc</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|jc}}{{Tree chart/end}} |- | {{large|<code>d</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|d}}{{Tree chart/end}} | {{large|<code>*</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|*}}{{Tree chart/end}} | {{large|<code>c</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|c}}{{Tree chart/end}} |- | {{large|<code>di</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|di}}{{Tree chart/end}} | {{large|<code>i</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|i}}{{Tree chart/end}} | {{large|<code>ic</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ic}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+'''Solid hrzntl dot vrtcl:''' | {{large|<code>kr</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr}}{{Tree chart/end}} | {{large|<code>r</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r}}{{Tree chart/end}} | {{large|<code>rl</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl}}{{Tree chart/end}} |- | {{large|<code>k</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k}}{{Tree chart/end}} | {{large|<code>a</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a}}{{Tree chart/end}} | {{large|<code>l</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l}}{{Tree chart/end}} |- | {{large|<code>kq</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq}}{{Tree chart/end}} | {{large|<code>q</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q}}{{Tree chart/end}} | {{large|<code>ql</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Dashed hrzntl dot vrtcl:''' | {{large|<code>kr2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kr2}}{{Tree chart/end}} | {{large|<code>r2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|r2}}{{Tree chart/end}} | {{large|<code>rl2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|rl2}}{{Tree chart/end}} |- | {{large|<code>k2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|k2}}{{Tree chart/end}} | {{large|<code>a2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|a2}}{{Tree chart/end}} | {{large|<code>l2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|l2}}{{Tree chart/end}} |- |{{large|<code>kq2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|kq2}}{{Tree chart/end}} | {{large|<code>q2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|q2}}{{Tree chart/end}} | {{large|<code>ql2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|ql2}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Dots hrzntl solid vrtcl:''' | {{large|<code>om</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om}}{{Tree chart/end}} | {{large|<code>m</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m}}{{Tree chart/end}} | {{large|<code>mp</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp}}{{Tree chart/end}} |- | {{large|<code>o</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o}}{{Tree chart/end}} | {{large|<code>b</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b}}{{Tree chart/end}} | {{large|<code>p</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p}}{{Tree chart/end}} |- | {{large|<code>on</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on}}{{Tree chart/end}} | {{large|<code>n</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n}}{{Tree chart/end}} | {{large|<code>np</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np}}{{Tree chart/end}} |} {| style="float: left; margin-left: 1em;" |+ '''Dots hrzntl dashes vrtcl:''' | {{large|<code>om2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|om2}}{{Tree chart/end}} | {{large|<code>m2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|m2}}{{Tree chart/end}} | {{large|<code>mp2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|mp2}}{{Tree chart/end}} |- | {{large|<code>o2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|o2}}{{Tree chart/end}} | {{large|<code>b2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|b2}}{{Tree chart/end}} | {{large|<code>p2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|p2}}{{Tree chart/end}} |- | {{large|<code>on2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|on2}}{{Tree chart/end}} | {{large|<code>n2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|n2}}{{Tree chart/end}} | {{large|<code>np2</code>}} || style="border: 1px solid gray;" | {{Tree chart/start}}{{Tree chart|np2}}{{Tree chart/end}} |} {{clear}} {| |+ '''Miscellaneous''' (grey background not available in, or changed from, familytree):<!-- This subset is an insufficient set or questionable, but some map onto tiles that exist in {{familytree}}: --> |- | {{large|<code>k3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|k3}}{{Tree chart/end}} | {{large|<code>T2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|T2}}{{Tree chart/end}} | {{large|<code>l3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l3}}{{Tree chart/end}} | {{large|<code>l4</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|l4}}{{Tree chart/end}} |- | {{large|<code>G2</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|G2}}{{Tree chart/end}} | || | || | {{large|<code>b3</code>}} ||style="border:1px solid gray; background:lightgray;"| {{Tree chart/start}}{{Tree chart|b3}}{{Tree chart/end}} |- | {{large|<code>E</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|E}}{{Tree chart/end}} | {{large|<code>K</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|K}}{{Tree chart/end}} | || | {{large|<code>U</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|U}}{{Tree chart/end}} |- | {{large|<code>X</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X}}{{Tree chart/end}} | {{large|<code>X2</code>}} ||style="border:1px solid gray"| {{Tree chart/start}}{{Tree chart|X2}}{{Tree chart/end}} | || | || |} ==Style attributes== The appearance of the boxes in a row may be controlled by the following optional template parameters: * ''border'' specifies the width of the box border in pixels, * ''boxstyle'' can be used to append arbitrary [[Cascading Style Sheets|CSS]] declarations directly to the box style attributes. For example, the following code: <syntaxhighlight lang="wikitext"> {{Tree chart/start}} {{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}} {{Tree chart| | |,|-|^|-|.| | }} {{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}} {{Tree chart/end}} </syntaxhighlight> produces this chart: {{Tree chart/start}} {{Tree chart|border=1|boxstyle=color:white; background:green; | | FOO |y| BAR | |FOO=Box 1|BAR=Box 2}} {{Tree chart| | |,|-|^|-|.| | }} {{Tree chart|border=3|boxstyle=background:yellow; | | FOO | | BAR | |FOO=Box 3|BAR=Box 4}} {{Tree chart/end}} Style attributes can even be set for individual boxes within each row, as in the example below: <syntaxhighlight lang="wikitext"> {{Tree chart/start}} {{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}} {{Tree chart| |,|-|-|'|!|`|-|-|.| }} {{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box |boxstyle_RED =color:white; background-color: red; |boxstyle_GREEN=color:yellow; background-color: green; |boxstyle_BLUE =color:white; background-color: blue; }} {{Tree chart/end}} </syntaxhighlight> which produces this: {{Tree chart/start}} {{Tree chart| | | | |CLEAR| | | | |CLEAR=Clear box}} {{Tree chart| |,|-|-|'|!|`|-|-|.| }} {{Tree chart|RED |~|GREEN|~|BLUE |RED=Red box|GREEN=Green box|BLUE=Blue box |boxstyle_RED =color:white; background-color: red; |boxstyle_GREEN=color:yellow; background-color: green; |boxstyle_BLUE =color:white; background-color: blue; }} {{Tree chart/end}} {{Warnsign|'''Note:'''}} When specifying style attributes for individual named boxes, make sure the box names are aligned to the '''left''' side of the area reserved for them in the template call (as in "<code>|RED&nbsp;&nbsp;|</code>" instead of "<code>|&nbsp;RED&nbsp;|</code>" in the example above), otherwise the template will end up looking for a style parameter with spaces in its name. The {{tl|Tree chart/start}} template also accepts an optional {{para|style}} parameter that can be used to set CSS styles for the entire diagram, and an optional {{para|align}} parameter to set the chart alignment. == See also == * [[Help:Family trees]] for other methods. * [[User:Daduxing/familytree.js|familytree.js]], a tool for the easy creation or updating of diagrams using these templates. * [[:Category:Family tree templates]] * [[Template:Nerva–Antonine family tree]], a large example. * [[Template:Tree list]] * [[Template:Ahnentafel]] {{Template:Graph, chart and plot templates}} <includeonly>{{Sandbox other| | {{When on user page | | <!-- Categories below this line, please:--> [[Category:Chart formatting templates| ]] [[Category:Graph, chart and plot templates]] [[Category:Genealogy formatting templates]] [[Category:Templates with partial table wikitext]] }} }}</includeonly> 4a820df0fef291101e336a1af6ecf39a8c1ac3f2 Template:When on user page 10 216 611 610 2023-06-06T14:41:12Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:When_on_user_page]]: w wikitext text/x-wiki #redirect [[Template:User other]] [[Category:User namespace templates]] [[Category:Namespace manipulation templates]] 2cfc08fbeab39bc369817a2250cc3c2d2ae29fb1 Template:Respond 10 217 613 612 2023-06-06T14:41:13Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Respond]]: w wikitext text/x-wiki <includeonly>[[File:{{{{{|safesubst:}}}#switch:{{{1|{{{icon|}}}}}} |blackcheck = Black check.svg |bluebrokenplus = Symbol unsupport2 vote.svg |bluecheck2 = Cornflower blue check.svg |bluecheck = Artículo bueno-blue.svg |blueclock = Pictogram voting wait blue.svg |blueplus = Symbol support2 vote.svg |deferred = Symbol deferred.svg |greencheck2 = Yes check.svg |greencheck = Symbol confirmed.svg |greenclock = Pictogram voting wait green.svg |greenplus = Symbol support vote.svg |greybrokenplus = Symbol unsupport vote.svg |greyexclamation = Pictogram voting comment.svg |info=Symbol information vote.svg |minus = Symbol declined.svg |neutral = Symbol neutral vote.svg |orangeclock = Pictogram voting wait orange.svg |orangeexclamation = Ambox important.svg |redexclamation = Ambox important red.svg |pinkclock = Pictogram voting wait pink.svg |question2 = Symbol question.svg |question = Pictogram voting question.svg |wait = Symbol_wait.svg |xmark2 = X mark.svg |xmark = Symbol unrelated.svg |yellowcheck = Yellow check.svg |yellowclock = Pictogram voting wait.svg |{{{1|{{{icon|Pictogram voting question.svg}}}}}}}}|{{{size|18px}}}|alt={{{alt|}}}]]&nbsp;'''{{{2|{{{text|Response}}}}}}'''</includeonly><noinclude> {{Documentation}} </noinclude> b11f14454f435e825639a46c4fe356254a552b63 File:Ssyu0101a.png 6 61 614 118 2023-06-06T15:14:19Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Ssyu0101a.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Snat0101a.png 6 218 615 2023-06-06T15:14:43Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Charbox 10 219 616 2023-06-06T15:17:18Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 620 616 2023-06-06T15:30:23Z Otonashi Ayana 2 wikitext text/x-wiki <div class="charbox"> [[File:{{{img|}}}]] {{{name|}}} </div> 502a959ef312966b8d8f53fb0edd5cf485077a17 621 620 2023-06-06T15:31:12Z Otonashi Ayana 2 wikitext text/x-wiki <div class="charbox"> [[File:{{{1}}}]] {{{2}}} </div> 64b59f59415a1365f01fe90c34185146b4005a6f 622 621 2023-06-06T15:31:32Z Otonashi Ayana 2 wikitext text/x-wiki <div class="charbox"> [[File:head_{{{1}}}.png]] {{{2}}} </div> a9b17836ab8909b3a9402765c149841de102bbbe 623 622 2023-06-06T15:31:43Z Otonashi Ayana 2 wikitext text/x-wiki <div class="charbox"> [[File:head_{{{1}}}.png]] {{{1}}} </div> f3d0fd1d0929d46947b0e7a2116adb2718513108 627 623 2023-06-06T15:36:45Z Otonashi Ayana 2 wikitext text/x-wiki <div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{!}{{{2|}}}}}]] {{{1}}} </div> 64b76f78a95ead3d7b8f5a1b23b50b0075ae2407 628 627 2023-06-06T15:38:10Z Otonashi Ayana 2 wikitext text/x-wiki <div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] {{{1}}} </div> b92827ae97893703e3f6ab6e76ae4330dfa7ac03 629 628 2023-06-06T15:39:42Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox"><div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] {{{1}}} </div> 47b67b32536115f2656432696481b8c366501395 630 629 2023-06-06T15:39:51Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox" /><div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] {{{1}}} </div> 8155766840ca5a0cac872f1c59e5a499a8c729e4 631 630 2023-06-06T15:40:08Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" /><div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] {{{1}}} </div> e1e6184f5164093a3303f8c5630e21324c9e852f 633 631 2023-06-06T15:41:25Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" /><div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] <span class="name">{{{1}}}</span> </div> 7248694853f00793acef6e7f817e5f179e0f2b3f 639 633 2023-06-06T16:00:29Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" /><div class="charbox"> {{#if{{{3|}}}|<div class="bg"></div>}} [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] <span class="name">{{{1}}}</span> </div> 518b3ed08e9338c4320781af4f5e158b132fc686 640 639 2023-06-06T16:00:45Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" /><div class="charbox"> {{#if:{{{3|}}}|<div class="bg"></div>}} [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}]] <span class="name">{{{1}}}</span> </div> ea99d7931f5ca066e2c14d7c3f66751ecbbbee50 646 640 2023-06-06T16:10:12Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" /><div class="charbox"> {{#if:{{{3|}}}|<div class="bg"></div>}} [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]] <span class="name">{{{1}}}</span> </div> 418cc539ebb820350f5bc4080ea90b9b56b6ebe2 647 646 2023-06-06T16:10:33Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" /><div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]] <span class="name">{{{1}}}</span> </div> 4d18a16a41ccb790592392dcbc2ae74fd2b916c2 File:Head Nana.png 6 220 617 2023-06-06T15:28:57Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 625 617 2023-06-06T15:32:56Z Otonashi Ayana 2 Otonashi Ayana moved page [[File:Head nana.png]] to [[File:Head Nana.png]] without leaving a redirect wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Natsume.png 6 221 618 2023-06-06T15:29:00Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 626 618 2023-06-06T15:33:19Z Otonashi Ayana 2 Otonashi Ayana moved page [[File:Head natsume.png]] to [[File:Head Natsume.png]] without leaving a redirect wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Shugo.png 6 222 619 2023-06-06T15:29:05Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 624 619 2023-06-06T15:32:36Z Otonashi Ayana 2 Otonashi Ayana moved page [[File:Head shugo.png]] to [[File:Head Shugo.png]] without leaving a redirect wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Charbox/styles.css 10 223 632 2023-06-06T15:40:29Z Otonashi Ayana 2 Created page with ".charbox{ } .charbox p{ display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; }" sanitized-css text/css .charbox{ } .charbox p{ display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; } bfbd8cff151ac183861f854db88a77941f2176b8 634 632 2023-06-06T15:42:07Z Otonashi Ayana 2 sanitized-css text/css .charbox{ } .charbox > p{ display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; } .charbox .name{ position: absolute; bottom: 0; text-align: center; } 306ebee1b161b676bbad31784a9b4c84251a0e8b 635 634 2023-06-06T15:43:39Z Otonashi Ayana 2 sanitized-css text/css .charbox{ } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; } .charbox .name{ position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.5); } 0d3c997fd5259e7cc9251f17d3cd8d93c5504a6e 636 635 2023-06-06T15:44:27Z Otonashi Ayana 2 sanitized-css text/css .charbox{ } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; } .charbox .name{ display: block; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.75); } 56a4030d88bcd69f99ca85e77bebbd836c5e4926 637 636 2023-06-06T15:46:11Z Otonashi Ayana 2 sanitized-css text/css .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox img{ height: 140px; width: auto; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } 626e86ec5b49e49149c96d37d0be7899e4fbf6ed 638 637 2023-06-06T15:50:32Z Otonashi Ayana 2 sanitized-css text/css .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } a37d2f5131ae3414bab4316be0440e93419ff3f0 641 638 2023-06-06T16:01:26Z Otonashi Ayana 2 sanitized-css text/css .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ background-color:lightblue; } 90f6a4c9c816213adbe183f5bffd798769b32625 642 641 2023-06-06T16:02:05Z Otonashi Ayana 2 sanitized-css text/css .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ width: 100%; height: 100%; background-color:lightblue; } 5f8a8ba2052a77d1aba4b6a74e5007dde114fef1 643 642 2023-06-06T16:07:32Z Otonashi Ayana 2 sanitized-css text/css .charbpx{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } 08aa9538ea0b83047fa7b17fed327e3bb7ce7246 644 643 2023-06-06T16:08:16Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } 0acce3cd4923f4aca28640ca409b235778ca566b Shugo Takashiro 0 62 645 585 2023-06-06T16:09:06Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }} == Relationships == {{Tree chart/start}} {{Tree chart| | | | | | : | | | |}} {{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px}} |Shg={{charbox|Shugo|119px|y}} |Kzn=Kazuna |Nna={{charbox|Nana|119px}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} 8365c8ed33badeccc8ef892ea49d43d5b46c4b98 648 645 2023-06-06T16:11:07Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }} == Relationships == {{Tree chart/start}} {{Tree chart| | | | | | : | | | |}} {{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn=Kazuna |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} c8cf87ad9cdf1e3e65058266d3336070bca5ba1c 649 648 2023-06-06T16:12:06Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }} == Relationships == {{Tree chart/start|align=center}} {{Tree chart| | | | | | : | | | |}} {{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn=Kazuna |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} d9e78d1a572d2fe01bc1137b10f8c4b2edba842b 650 649 2023-06-06T16:16:35Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == {{Tree chart/start|align=center}} {{Tree chart| | | | | | : | | | |}} {{Tree chart| , | - | -|- |-|+|-| -|- | -|- |-|-|.|}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn=Kazuna |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} cfbcecb32d3b7656dfd172af7070d39c92606570 651 650 2023-06-06T16:23:25Z Otonashi Ayana 2 /* Relationships */ wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == {{Tree chart/start|align=center}} {{Tree chart| | | | | | | : | | | |}} {{Tree chart| | ,|- | -|- |-|+|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn=Kazuna |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} 1b6054024eb6749f3a4265a36ea1b6ae75236705 652 651 2023-06-06T16:25:35Z Otonashi Ayana 2 /* Relationships */ wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == {{Tree chart/start|align=center}} {{Tree chart| | | | | | : | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn=Kazuna |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} 0e13a613e25a58f7450d99717ebd8659d3f323bc Template:Infobox game 10 224 653 2023-06-06T17:13:17Z Otonashi Ayana 2 Created page with "<includeonly>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{title}}}'''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6..." wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''{{{title}}}'''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 63152a7f0a7bf10ab9576c5a197fb44de7943754 657 653 2023-06-06T17:21:21Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:#ccccff;font-weight:normal; | headerstyle = background:#ccccff; | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 7665450a66b5cff5e3db75200e571b6d61c796eb Template:Infobox game/doc 10 225 654 2023-06-06T17:13:24Z Otonashi Ayana 2 Created page with "<pre> {{infobox game | title = | jtitle = | image = | developer = | publisher = | director = | writer = | artist = | composer = | platform = | release = | genre = }} </pre>" wikitext text/x-wiki <pre> {{infobox game | title = | jtitle = | image = | developer = | publisher = | director = | writer = | artist = | composer = | platform = | release = | genre = }} </pre> 9133e3be21e87474f7bd071ea9171e4144c3d544 655 654 2023-06-06T17:13:51Z Otonashi Ayana 2 wikitext text/x-wiki <pre> {{infobox game | title = | jtitle = | image = | developer = | publisher = | director = | writer = | artist = | composer = | platform = | release = | genre = }} </pre> ff644396bf618d131a982c63aa2743dd922f40c8 Kara no Shoujo 0 181 656 566 2023-06-06T17:20:10Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} | genre = Mystery }} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. 63ae11f666c072707209dc01f0622bf5fda82fc4 659 656 2023-06-06T17:25:43Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} '''''Kara no Shōjo''''' is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. bbfb41c0b8cd5cc9fe0d850d2e17049b5471d808 Cartagra 0 194 658 575 2023-06-06T17:25:30Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Endings == ''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending [[Category:Cartagra]] 35b0e18bd1312e09fc80f3a151ffebdfa877dcfb Template:Kns characters 10 138 660 584 2023-06-06T17:28:08Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = {{kns}} Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> ba1a9aceab604323f007f41d6f507868c743856b Template:Kns 10 43 661 112 2023-06-06T17:28:23Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shoujo|Kara no Shōjo]]'' 2fde5e05652cc23c91fd77f7a6fcdab081010adc Template:Kns2 10 58 662 115 2023-06-06T17:28:36Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shoujo: The Second Episode|Kara no Shōjo: The Second Episode]]'' a7e5bee2bfb8a3a0a4d08fbbec349694a4ff3050 Template:Kns3 10 59 663 116 2023-06-06T17:29:05Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shoujo: The Last Episode|Kara no Shōjo: The Last Episode]]'' 78642b653492bd78c8eb1244ef79c2d0b94cef89 Template:Kns characters 10 138 664 660 2023-06-06T17:33:26Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#252525; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> a9f2317ac1ee8daf80fbf973ebbc0e032f19185c 665 664 2023-06-06T17:34:10Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Kara no Shōjo]] [[Category:Characters]] </includeonly> 6b5785362acdf3f36ba310d7eb7941f4535e8ca5 MediaWiki:Common.css 8 7 666 565 2023-06-06T17:36:32Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting:Merienda; --theme-color:#EFA5A5; } .item-title{ font-family:var(--handwriting); pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 161a8537a58418dedd64f6a70f27d9cfb9a75470 674 666 2023-06-06T17:54:11Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting:Merienda; --theme-color:#EFA5A5; } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ c70c60eb97b6a6496c5f7ff93cb13f30b14dc2e1 Template:Infobox character 10 2 667 460 2023-06-06T17:37:09Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }}{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''{{character name}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> df1bc89d020c5f684829630b51d44d09be5298c1 678 667 2023-06-06T18:04:29Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{DISPLAYTITLE:{{character name}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 06acbd8e81fb6aa0e5afa6f31900586f639c93a1 679 678 2023-06-06T18:04:56Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly> <noinclude>{{documentation}}</noinclude> bd7b8cc02ceeb0e7a50b512b576d02e108f83238 Template:Infobox game 10 224 668 657 2023-06-06T17:37:28Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> f1a79a114fed47138d0ef0b64e0cc8fea1e26ab2 File:Head Kazuna.png 6 226 669 2023-06-06T17:41:49Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Shugo Takashiro 0 62 670 652 2023-06-06T17:41:57Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == {{Tree chart/start|align=center}} {{Tree chart| | | | | | : | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} {{cartagra characters}} {{kns characters|state=collapsed}} 4ba44d3825f952ed52a34ce69c9cac7ba52d0c17 673 670 2023-06-06T17:46:14Z Otonashi Ayana 2 /* Relationships */ wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{Tree chart/start|align=center}} {{Tree chart| | | | | | : | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} d04bfd1f3f9f658fc543f58b6fa642cf054ff671 675 673 2023-06-06T17:54:17Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{Tree chart/start|align=center}} {{Tree chart| | | | | | | | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} 6cb9a68a0077d6a2a20480e69544f94005f44207 676 675 2023-06-06T17:54:42Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} 765cb5a801fbcd83836fd24b7e890ce3bd3e4f44 Kazuna Kozuki 0 227 671 2023-06-06T17:42:14Z Otonashi Ayana 2 Redirected page to [[Kazuna Takashiro]] wikitext text/x-wiki #REDIRECT [[Kazuna Takashiro]] f41c0fc8cd906e8309bdb494e7459cccd0c1b877 File:Head Nana.png 6 220 672 625 2023-06-06T17:44:43Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Head Nana.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Cartagra characters 10 201 677 579 2023-06-06T18:02:14Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = autocollapse | listclass = hlist | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * [[Takoyaki vendor]] | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] | group3 = Police | list3 = * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} }}<includeonly> [[Category:Cartagra]] [[Category:Characters]] </includeonly> 41388079881edca9b7e1ca359249d92372966621 File:Tako cartagra.png 6 228 680 2023-06-06T18:07:22Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Infobox character/doc 10 169 681 421 2023-06-06T18:08:05Z Otonashi Ayana 2 wikitext text/x-wiki <pre> {{infobox character | given name = | family name = | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = | relations = }}</pre> 8b96551308f14f2425b0669356179aa4650d19c3 Daisaku Arata 0 229 682 2023-06-06T18:08:18Z Otonashi Ayana 2 Created page with "{{infobox character | name = Takoyaki vendor | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart. {{cartagra characters}}" wikitext text/x-wiki {{infobox character | name = Takoyaki vendor | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart. {{cartagra characters}} d910a608ff5fa71ef112719d88d1df529bba628b Cartagra 0 194 683 658 2023-06-06T18:13:57Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Premise == == Characters == == Endings == ''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending [[Category:Cartagra]] 845fc4bb8cd48b93cb23a9c777501ed38a7faf7a 684 683 2023-06-06T18:14:45Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}'''''Cartagra''''' is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Premise == == Characters == == See also == * [[Cartagra/Endings|Endings]] [[Category:Cartagra]] 721a021be659838bfe230fc95eaeadd48a31ee3c Cartagra/Endings 0 230 685 2023-06-06T18:14:52Z Otonashi Ayana 2 Created page with "''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending" wikitext text/x-wiki ''Cartagra'' has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending 14ff03c831beec221a64a2b2f471ee4de98a48b6 Template:Nihongo 10 231 687 686 2023-06-06T18:16:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Nihongo]]: w wikitext text/x-wiki <includeonly>{{#invoke:Nihongo|nihongo}}</includeonly><noinclude> {{documentation}} <!-- Add categories to the /doc subpage and interwikis to Wikidata. --> </noinclude> d0dcc4933a65afd93128f90aa7ce4ba2c8bd20e7 Template:Literal translation 10 232 689 688 2023-06-06T18:16:20Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Literal_translation]]: w wikitext text/x-wiki {{#if:{{{sortable|}}} |<span style="display:none;">{{{1|}}}</span> }}{{#if:{{{i|}}} |<nowiki/>'' }}{{abbr|style=font-size:85%|{{#switch:{{{lk|}}} |yes|on = [[Literal translation|lit.]] |#default = lit. }}|literal translation}}{{#if:{{{i|}}} |''<nowiki/> }}{{#if:{{{1|}}} | {{thinsp}}<nowiki>'</nowiki>{{{1}}}{{#if:{{str endswith|{{{1}}}|''}}|{{'}}|&#39;}} }}{{#if:{{{2|}}} | {{sp}} or <nowiki>'</nowiki>{{{2}}}{{#if:{{str endswith|{{{2}}}|''}}|{{'}}|&#39;}} }}{{#if:{{{3|}}} | {{sp}} or <nowiki>'</nowiki>{{{3}}}{{#if:{{str endswith|{{{3}}}|''}}|{{'}}|&#39;}} }}{{#if:{{{4|}}} | {{sp}} or <nowiki>'</nowiki>{{{4}}}{{#if:{{str endswith|{{{4}}}|''}}|{{'}}|&#39;}} }}<noinclude> {{Documentation}} </noinclude> 1a7e9904a6e7bb60117c687c5c373fb9cf76c44c Template:Abbr 10 233 691 690 2023-06-06T18:16:21Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Abbr]]: w wikitext text/x-wiki <abbr {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} {{#if:{{{style|}}}|style="{{{style}}}"}} title="{{#tag:nowiki|{{#invoke:String|replace|{{{2|}}}|"|&quot;}}}}">{{{1|}}}</abbr><noinclude>{{Documentation}} </noinclude> 5fd53aa19ba927ce3eea9092a4fa31f881df0a6e Template:Thinsp 10 234 693 692 2023-06-06T18:16:22Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Thinsp]]: w wikitext text/x-wiki #REDIRECT [[Template:Thin space]] {{Redirect category shell| {{R from move}} {{R from modification}} {{R from template shortcut}} }} 2469064d969db6a9cf1e47e2d1ee0a5e2c9eb495 Template:Thin space 10 235 695 694 2023-06-06T18:16:23Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Thin_space]]: w wikitext text/x-wiki <span style="white-space: nowrap;">{{#if:{{{1|}}}|{{#if:{{{2|}}}||&thinsp;}}}}{{{1|}}}&thinsp;<!-- -->{{#if:{{{2|}}}|{{{2}}}}}{{#if:{{{3|}}}|&thinsp;{{{3}}}}}<!-- -->{{#if:{{{4|}}}|&thinsp;{{{4}}}}}{{#if:{{{5|}}}|&thinsp;{{{5}}}}}<!-- -->{{#if:{{{6|}}}|&thinsp;{{{6}}}}}{{#if:{{{7|}}}|&thinsp;{{{7}}}}}<!-- -->{{#if:{{{8|}}}|&thinsp;{{{8}}}}}{{#if:{{{9|}}}|&thinsp;{{{9}}}}}<!-- -->{{#if:{{{10|}}}|&thinsp;{{{10}}}}}</span><noinclude> {{Documentation}} <!-- Please add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 5f135f79d223a744b75485254555580623480420 Template:Str endswith 10 236 697 696 2023-06-06T18:16:24Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Str_endswith]]: w wikitext text/x-wiki {{#ifeq:{{{1|a}}}{{{2|a}}}|{{{1|b}}}{{{2|b}}}|{{#invoke:String|endswith|source={{{1}}}|pattern={{{2}}} }}|yes<!--backward compatibility -->}}<noinclude> {{documentation}} </noinclude> 13dfad2dc8c562869bc85a37524258ffebf9a62f Module:Lang 828 237 699 698 2023-06-06T18:16:25Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Lang]]: w Scribunto text/plain --[=[ Lua support for the {{lang}}, {{lang-xx}}, and {{transl}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_latin() and is_rtl() local yesno = require ('Module:Yesno'); local lang_data = mw.loadData ('Module:Lang/data'); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set( var ) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their html numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ validates |italic= or |italics= assigned values. When |italic= is set and has an acceptible assigned value, return the matching css font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptible assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or transl function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-xx}} depending on the individual template's requirements, 'italic' for {{transl}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-xx}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {['yes'] = 'italic', ['no'] = 'normal', ['unset'] = 'inherit', ['invert'] = 'invert', ['default'] = nil}; local count = 0 for _, arg in pairs {'italic', 'italics', 'i'} do if args[arg] then count = count + 1 end end if count > 1 then -- return nil and an error message if more than one is set return nil, 'only one of |italic=, |italics=, or |i= can be specified'; end return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-xx}} templates is to add categorization when the templates are used in mainspace. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack ]] local function in_array ( needle, haystack ) if needle == nil then return false; end for n,v in ipairs( haystack ) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ prettify ietf tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-xx}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=) returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. see http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1 ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- ietf tag parts if not is_set (source) then return nil, nil, nil, nil, nil, 'missing language tag'; end local pattern = { -- table of tables holding acceptibe ietf tag patterns and short names of the ietf part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured ietf tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named ietf parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, table.concat ({'unrecognized language tag: ', source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, table.concat ({'unrecognized language code: ', code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, table.concat ({'Lang and lang-xx code promoted to ISO 639-1|', code})); table.insert (maint_msgs, table.concat ({'code: ', code, ' promoted to code: ', synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, 'redundant script tag'; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, table.concat ({'unrecognized script: ', script, ' for code: ', code}); -- language code ok, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, table.concat ({'script: ', script, ' not supported for code: ', code}); -- language code ok, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, 'redundant region tag'; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, table.concat ({'unrecognized region: ', region, ' for code: ', code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, 'redundant variant tag'; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-script pair: ', code, '-', script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code-region pair: ', code, '-', region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, table.concat ({'unrecognized variant: ', variant, ' for code: ', code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, table.concat ({'unrecognized private tag: ', private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args, template) local out = {}; local category; if 'Transl' == template then category = 'Transl'; else category = 'Lang and lang-xx' end table.insert (out, table.concat ({'[', args.text or 'undefined', '] '})); -- for error messages output args.text if available table.insert (out, table.concat ({'<span style=\"color:#d33\">Error: {{', template, '}}: '})); table.insert (out, msg); table.insert (out, table.concat ({' ([[:Category:', category, ' template errors|help]])'})); table.insert (out, '</span>'); if (0 == namespace or 10 == namespace) and not args.nocat then -- categorize in article space (and template space to take care of broken usages) table.insert (out, table.concat ({'[[Category:', category, ' template errors]]'})); end return table.concat (out); end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- adds <i> and </i> tags to list-item text or to implied <p>..</p> text. mixed not supported ]] local function div_markup_add (text, style) local implied_p = {}; if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics mediawiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each impled p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each impled p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in html markup. This because the lang= attibute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the html markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default html tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> html tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening html tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> html tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = table.concat ({language, ' text'}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = table.concat ({language, ' collective text'}); -- for collective languages else title_text = table.concat ({language, '-language text'}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] for English: [[Category:Articles containing explicitly cited English-language text]] for ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) local cat = {}; local retval; if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return table.concat ({'[[Category:Articles with text in ', language_name, ']]'}); end table.insert (cat, '[[Category:Articles containing '); if this_wiki_lang_tag == code then table.insert (cat, 'explicitly cited ' .. language_name); -- unique category name for the local language else table.insert (cat, language_name); end table.insert (cat, '-language text]]'); return table.concat (cat); end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string The value |script= is not used in {{transl}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transl}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript) This function is used by both lang_xx() and transl() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style transl() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transl}}, style only applies when a language code is provided ]] local function make_translit (code, language_name, translit, std, tscript, style) local title; local out_t = {}; local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = title_text .. '-language'; -- skip this text (individual and macro languages only) end title_text = title_text .. ' romanization'; -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = title_text .. table.concat ({title_t[std][tscript:lower()], ' (', script_table[tscript], ' script) transliteration'}); -- add the appropriate text to the tool tip else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (transl may not provide a language code) title_text = title_text .. table.concat ({title_t[std][code:lower()], ' (', language_name, ' language) transliteration'}); -- add the appropriate text to the tool tip else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = title_text .. table.concat ({language_name, '-script transliteration'}); -- write a script tool tip elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = title_text .. '-language'; -- skip this text (individual and macro languages only) end title_text = title_text .. ' transliteration'; -- finish the tool tip else title_text = title_text .. ' transliteration'; -- generic tool tip (can we ever get here?) end end end local close_tag; if is_set (code) then -- when a language code is provided (always with {{lang-xx}} templates, not always with {{transl}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style table.insert (out_t, "<i lang=\""); -- so use <i> tag close_tag = '</i>'; -- tag to be used when closing else table.insert (out_t, table.concat ({'<span style=\"font-style: ', style, '\" lang=\"'})); -- non-standard style, construct a span tag for it close_tag = '</span>'; -- tag to be used when closing end table.insert (out_t, code); table.insert (out_t, "-Latn\">"); -- transliterations are always Latin script else table.insert (out_t, "<span>"); -- when no language code: no lang= attribute, not italic ({{transl}} only) close_tag = '</span>'; end table.insert (out_t, translit); -- add the translit text table.insert (out_t, close_tag); -- and add the appropriate </i> or </span> if '' == title_text then -- when there is no need for a tool-tip return table.concat (out_t); -- make a string and done else return title_wrapper_make (title_text, table.concat (out_t), 'span'); -- wrap with a tool-tip span and don end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg ('no text', args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg ('text has malformed markup', args, template); end local style = args.italic; if ('unset' ~= style) and ('invert' ~=style) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg ('text has italic markup', args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ render mainenance messages and categories ]] local function render_maint(nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ for proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and / or inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ looks for a poem strip marker in text; returns true when found; false else auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate html tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns as nil with a second return value of true indicating that some other value has been assigned to |proto= ]] local function validate_proto (proto_param) if 'yes' == proto_param then return true; elseif 'no' == proto_param then return false; elseif is_set (proto_param) then return nil, true; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- common function to return language name from the data set according to IETF tag returns language name if found in data tables; nil else ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to iana active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the iana deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, table.concat ({'Lang and lang-xx using deprecated ISO 639 codes|', code})); table.insert (maint_msgs, table.concat ({'code: ', code, ' is deprecated'})); end return name; -- name from data tables or nil end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- entry point for {{lang}} there should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> parameters are received from the template's frame (parent frame) ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or 'Lang'; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg ('conflicting: {{{1}}} and |code=', args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg ('conflicting: {{{2}}} and |text=', args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg ( msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and unicode.is_Latin (args.text)) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant if 'invert' == args.italic and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- entry point for {{lang}} there should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> parameters are received from the template's frame (parent frame) ]] local function lang (frame) local args = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return _lang (args); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- stand-alone function to create literal translation of main text Also used by {{lang-x2}} ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> html tag if 'no' == args_t.link then table.insert (translation_t, '<abbr title="literal translation">lit.</abbr>'); -- unlinked form else table.insert (translation_t, make_wikilink ('Literal translation', 'lit.')); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> html tag end table.insert (translation_t, table.concat ({'&#39;', args_t.translation, '&#39;'})); -- use html entities to avoid wiki markup confusion return table.concat (translation_t); -- make a big string and done end --[[--------------------------< L A N G _ X X >---------------------------------------------------------------- For the {{lang-xx}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-xx}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-xx}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-xx}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-xx}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args) local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local translit_title; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or 'Lang-xx'; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if args[1] and args.text then return make_error_msg ('conflicting: {{{1}}} and |text=', args, template); else args.text = args[1] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate html tag with text trimmed accordingly if args[2] and args.translit then return make_error_msg ('conflicting: {{{2}}} and |translit=', args, template); else args.translit = args[2] or args.translit -- prefer args.translit end if args[3] and (args.translation or args.lit) then return make_error_msg ('conflicting: {{{3}}} and |lit= or |translation=', args, template); elseif args.translation and args.lit then return make_error_msg ('conflicting: |lit= and |translation=', args, template); else args.translation = args[3] or args.translation or args.lit; -- prefer args.translation end if args.links and args.link then return make_error_msg ('conflicting: |links= and |link=', args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == 'yes'; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- args.italic controls if is_set (subtags.script) then if 'latn' == subtags.script then args.italic = 'italic'; -- |script=Latn; set for font-style:italic else args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (table.concat ({'invalid |proto=: ', args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try ietf tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if 'no' == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[code] then table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (language_name .. ' language', language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if 'invert' == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not unicode.is_Latin (args.text) then -- transliteration (not supported in {{lang}}); not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end translit_title = mw.title.makeTitle (0, table.concat ({'Romanization of ', translit_script_name})); -- make a title object if translit_title.exists and ('no' ~= args.link) then table.insert (out, make_wikilink ('Romanization of ' .. translit_script_name or language_name, 'romanized') .. ':'); -- make a wikilink if there is an article to link to else table.insert (out, 'romanized:'); -- else plain text end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script']) if is_set (translit) then table.insert (out, translit); else return make_error_msg (table.concat ({'invalid translit-std: \'', args['translit-std'] or '[missing]'}), args, template); end end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- common function to get args table from {{lang-??}} templates returns table of args ]] local function lang_xx_args_get (frame) local args = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if 1 == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-xx}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame); initial_style_state = 'italic'; return _lang_xx (args); end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point ffrom another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-xx}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame); initial_style_state = 'inherit'; return _lang_xx (args); end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function. Module entry point from another module ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}} ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the ietf language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the ietf language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = 'yes' == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'}); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[code] then language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (language_name .. ' language', label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}} ]] local function name_from_tag (frame) -- entry point from an {{#invoke:Lang|name_from_tag|<ietf tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the ietf language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = 'language: ' .. args[1] .. ' not found' -- language name not found, error message end else msg = 'missing language name' -- language name not provided, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'}); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}} ]] local function tag_from_name (frame) -- entry point from an {{#invoke:Lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}} ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ T R A N S L >---------------------------------------------------------------- Module entry point from another module ]] local function _transl (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transl|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (table.concat ({'unrecognized transliteration standard: ', args.translit_std}), args, 'Transl'); end else if is_set (args[2]) then -- [2] set when {{transl|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg ('no text', args, 'Transl'); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg ('missing language / script code', args, 'Transl'); end end end if is_set (args[1]) then -- IANA language code used for html lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (table.concat ({'unrecognized language / script code: ', args[1]}), args, 'Transl'); -- invalid language / script code end else return make_error_msg ('missing language / script code', args, 'Transl'); -- missing language / script code so quit end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, 'Transl'); end if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.italic = nil; -- set to nil; end if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (table.concat ({'unrecognized language / script code: ', args.code}), args, 'Transl'); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic); end --[[--------------------------< T R A N S L >------------------------------------------------------------------ Module entry point from an {{#invoke:}} ]] local function transl (frame) return _transl (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else All code combinations supported by {{lang}} and the {{lang-xx}} templates are supported by this function. Module entry point from another module ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = 'yes' == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return table.concat ({'<span style=\"color:#d33\">Error: ', template, msg, '</span>'}); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try ietf tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}} ]] local function category_from_tag (frame) -- entry point from an {{#invoke:Lang|category_from_tag|<ietf tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, lang = lang, -- entry point for {{lang}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns ietf tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates transl = transl, -- entry point for {{transl}} _category_from_tag = _category_from_tag, -- entry points when this module is require()d into other modules _lang = _lang, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _transl = _transl, _translation_make = translation_make, }; 9d4ce44c7c49db6155692a2f959ea14ce5f8df40 Module:Unicode data 828 238 701 700 2023-06-06T18:16:26Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Unicode_data]]: w Scribunto text/plain local p = {} local floor = math.floor local function errorf(level, ...) if type(level) == "number" then return error(string.format(...), level + 1) else -- level is actually the format string. return error(string.format(level, ...), 2) end end local function binary_range_search(codepoint, ranges) local low, mid, high low, high = 1, ranges.length or require "Module:TableTools".length(ranges) while low <= high do mid = floor((low + high) / 2) local range = ranges[mid] if codepoint < range[1] then high = mid - 1 elseif codepoint <= range[2] then return range, mid else low = mid + 1 end end return nil, mid end p.binary_range_search = binary_range_search --[[ local function linear_range_search(codepoint, ranges) for i, range in ipairs(ranges) do if range[1] <= codepoint and codepoint <= range[2] then return range end end end --]] -- Load a module by indexing "loader" with the name of the module minus the -- "Module:Unicode data/" part. For instance, loader.blocks returns -- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be -- returned. local loader = setmetatable({}, { __index = function (self, key) local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key) if not success then data = false end self[key] = data return data end }) -- For the algorithm used to generate Hangul Syllable names, -- see "Hangul Syllable Name Generation" in section 3.12 of the -- Unicode Specification: -- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf local name_hooks = { { 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters { 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters { 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A { 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph { 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables local Hangul_data = loader.Hangul local syllable_index = codepoint - 0xAC00 return ("HANGUL SYLLABLE %s%s%s"):format( Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)], Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count) / Hangul_data.trail_count)], Hangul_data.trails[syllable_index % Hangul_data.trail_count] ) end }, -- High Surrogates, High Private Use Surrogates, Low Surrogates { 0xD800, 0xDFFF, "<surrogate-%04X>" }, { 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use -- CJK Compatibility Ideographs { 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0x17000, 0x187F7, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph { 0x18800, 0x18AFF, function (codepoint) return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF) end }, { 0x18D00, 0x18D08, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement { 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu { 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B { 0x2A700, 0x2B739, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C { 0x2B740, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension D { 0x2B820, 0x2CEA1, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E { 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F -- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane) { 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17) end}, { 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G { 0x31350, 0x323AF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H { 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use { 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use } name_hooks.length = #name_hooks local name_range_cache local function generate_name(data, codepoint) if type(data) == "string" then return data:format(codepoint) else return data(codepoint) end end --[[ -- Checks that the code point is a number and in range. -- Does not check whether code point is an integer. -- Not used local function check_codepoint(funcName, argIdx, val) require 'libraryUtil'.checkType(funcName, argIdx, val, 'number') if codepoint < 0 or 0x10FFFF < codepoint then errorf("Codepoint %04X out of range", codepoint) end end --]] -- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8 function p.lookup_name(codepoint) -- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned -- (Cn) and specifically noncharacters: -- https://www.unicode.org/faq/private_use.html#nonchar4 if 0xFDD0 <= codepoint and (codepoint <= 0xFDEF or floor(codepoint % 0x10000) >= 0xFFFE) then return ("<noncharacter-%04X>"):format(codepoint) end if name_range_cache -- Check if previously used "name hook" applies to this code point. and codepoint >= name_range_cache[1] and codepoint <= name_range_cache[2] then return generate_name(name_range_cache[3], codepoint) end local range = binary_range_search(codepoint, name_hooks) if range then name_range_cache = range return generate_name(range[3], codepoint) end local data = loader[('names/%03X'):format(codepoint / 0x1000)] if data and data[codepoint] then return data[codepoint] -- Unassigned (Cn) consists of noncharacters and reserved characters. -- The character has been established not to be a noncharacter, -- and if it were assigned, its name would already been retrieved, -- so it must be reserved. else return ("<reserved-%04X>"):format(codepoint) end end --[[ -- No image data modules on Wikipedia yet. function p.lookup_image(codepoint) local data = loader[('images/%03X'):format(codepoint / 0x1000)] if data then return data[codepoint] end end --]] local planes = { [ 0] = "Basic Multilingual Plane"; [ 1] = "Supplementary Multilingual Plane"; [ 2] = "Supplementary Ideographic Plane"; [ 3] = "Tertiary Ideographic Plane"; [14] = "Supplementary Special-purpose Plane"; [15] = "Supplementary Private Use Area-A"; [16] = "Supplementary Private Use Area-B"; } -- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable. local blocks local function block_iter(blocks, i) i = i + 1 local data = blocks[i] if data then -- Unpack doesn't work on tables loaded with mw.loadData. return i, data[1], data[2], data[3] end end -- An ipairs-type iterator generator for the list of blocks. function p.enum_blocks() local blocks = loader.blocks return block_iter, blocks, 0 end function p.lookup_plane(codepoint) local i = floor(codepoint / 0x10000) return planes[i] or ("Plane %u"):format(i) end function p.lookup_block(codepoint) local blocks = loader.blocks local range = binary_range_search(codepoint, blocks) if range then return range[3] else return "No Block" end end function p.get_block_info(name) for i, block in ipairs(loader.blocks) do if block[3] == name then return block end end end function p.is_valid_pagename(pagename) local has_nonws = false for cp in mw.ustring.gcodepoint(pagename) do if (cp == 0x0023) -- # or (cp == 0x005B) -- [ or (cp == 0x005D) -- ] or (cp == 0x007B) -- { or (cp == 0x007C) -- | or (cp == 0x007D) -- } or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block or (cp == 0xFFFD) -- REPLACEMENT CHARACTER then return false end local printable, result = p.is_printable(cp) if not printable then return false end if result ~= "space-separator" then has_nonws = true end end return has_nonws end local function manual_unpack(what, from) if what[from + 1] == nil then return what[from] end local result = {} from = from or 1 for i, item in ipairs(what) do if i >= from then table.insert(result, item) end end return unpack(result) end local function compare_ranges(range1, range2) return range1[1] < range2[1] end -- Creates a function to look up data in a module that contains "singles" (a -- code point-to-data map) and "ranges" (an array containing arrays that contain -- the low and high code points of a range and the data associated with that -- range). -- "loader" loads and returns the "singles" and "ranges" tables. -- "match_func" is passed the code point and either the data or the "dots", and -- generates the final result of the function. -- The varargs ("dots") describes the default data to be returned if there wasn't -- a match. -- In case the function is used more than once, "cache" saves ranges that have -- already been found to match, or a range whose data is the default if there -- was no match. local function memo_lookup(data_module_subpage, match_func, ...) local dots = { ... } local cache = {} local singles, ranges return function (codepoint) if not singles then local data_module = loader[data_module_subpage] singles, ranges = data_module.singles, data_module.ranges end if singles[codepoint] then return match_func(codepoint, singles[codepoint]) end local range = binary_range_search(codepoint, cache) if range then return match_func(codepoint, manual_unpack(range, 3)) end local range, index = binary_range_search(codepoint, ranges) if range then table.insert(cache, range) table.sort(cache, compare_ranges) return match_func(codepoint, manual_unpack(range, 3)) end if ranges[index] then local dots_range if codepoint > ranges[index][2] then dots_range = { ranges[index][2] + 1, ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF, unpack(dots) } else -- codepoint < range[index][1] dots_range = { ranges[index - 1] and ranges[index - 1][2] + 1 or 0, ranges[index][1] - 1, unpack(dots) } end table.sort(cache, compare_ranges) end return match_func(codepoint) end end -- Get a code point's combining class value in [[Module:Unicode data/combining]], -- and return whether this value is not zero. Zero is assigned as the default -- if the combining class value is not found in this data module. -- That is, return true if character is combining, or false if it is not. -- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for -- more information. p.is_combining = memo_lookup( "combining", function (codepoint, combining_class) return combining_class and combining_class ~= 0 or false end, 0) function p.add_dotted_circle(str) return (mw.ustring.gsub(str, ".", function(char) if p.is_combining(mw.ustring.codepoint(char)) then return '◌' .. char end end)) end local lookup_control = memo_lookup( "control", function (codepoint, ccc) return ccc or "assigned" end, "assigned") p.lookup_control = lookup_control function p.is_assigned(codepoint) return lookup_control(codepoint) ~= "unassigned" end function p.is_printable(codepoint) local result = lookup_control(codepoint) return (result == "assigned") or (result == "space-separator"), result end function p.is_whitespace(codepoint) local result = lookup_control(codepoint) return (result == "space-separator"), result end p.lookup_category = memo_lookup( "category", function (codepoint, category) return category end, "Cn") local lookup_script = memo_lookup( "scripts", function (codepoint, script_code) return script_code or 'Zzzz' end, "Zzzz") p.lookup_script = lookup_script function p.get_best_script(str) -- Check type of argument, because mw.text.decode coerces numbers to strings! require "libraryUtil".checkType("get_best_script", 1, str, "string") -- Convert HTML character references (including named character references, -- or character entities) to characters. str = mw.text.decode(str, true) local scripts = {} for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) -- Ignore "Inherited", "Undetermined", or "Uncoded" scripts. if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then scripts[script] = true end end -- If scripts does not contain two or more keys, -- return first and only key (script code) in table. if not next(scripts, next(scripts)) then return next(scripts) end -- else return majority script, or else "Zzzz"? end function p.is_Latin(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0340-U+10FFFF. If they are not found and there is at least -- one Latin-script character, the string counts as Latin, because the rest -- of the characters can only be Zyyy, Zinh, and Zzzz. -- The only scripts found below U+0370 (the first code point of the Greek -- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz. -- See the codepage in the [[UTF-8]] article. if not str:find "[\205-\244]" then for codepoint in mw.ustring.gcodepoint(str) do if lookup_script(codepoint) == "Latn" then return true end end end local Latn = false for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) if script == "Latn" then Latn = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false end end return Latn end -- Checks that a string contains only characters belonging to right-to-left -- scripts, or characters of ignorable scripts. function p.is_rtl(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0580-U+10FFFF. If they are not found, the string can only -- have characters from a left-to-right script, because the first code point -- in a right-to-left script is U+0591, in the Hebrew block. if not str:find "[\214-\244]" then return false end local result = false local rtl = loader.scripts.rtl for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) if rtl[script] then result = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false end end return result end --[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------ external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text has <br /> tags. ]] function p.is_rtl_frame (frame) local str = frame.args[1]; -- get the string from the {{#invoke:}} frame str = str:gsub ('%b<>', ''); -- strip any html and html-like tags return p.is_rtl (str); -- return if whatever remains rtl; false else end local function get_codepoint(args, arg) local codepoint_string = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) local codepoint = tonumber(codepoint_string, 16) or errorf(2, "Parameter %s is not a code point in hexadecimal base", tostring(arg)) if not (0 <= codepoint and codepoint <= 0x10FFFF) then errorf(2, "code point in parameter %s out of range", tostring(arg)) end return codepoint end local function get_func(args, arg, prefix) local suffix = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) suffix = mw.text.trim(suffix) local func_name = prefix .. suffix local func = p[func_name] or errorf(2, "There is no function '%s'", func_name) return func end -- This function allows any of the "lookup" functions to be invoked. The first -- parameter is the word after "lookup_"; the second parameter is the code point -- in hexadecimal base. function p.lookup(frame) local func = get_func(frame.args, 1, "lookup_") local codepoint = get_codepoint(frame.args, 2) local result = func(codepoint) if func == p.lookup_name then -- Prevent code point labels such as <control-0000> from being -- interpreted as HTML tags. result = result:gsub("<", "&lt;") end return result end function p.is(frame) local func = get_func(frame.args, 1, "is_") -- is_Latin and is_valid_pagename take strings. if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then return (func(frame.args[2])) else -- The rest take code points. local codepoint = get_codepoint(frame.args, 2) return (func(codepoint)) -- Adjust to one result. end end return p 444a6cd03f4361fb8aa2439f5f5f5dc1f1a4dd59 Module:Lang/data 828 239 703 702 2023-06-06T18:16:28Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Lang/data]]: w Scribunto text/plain local lang_obj = mw.language.getContentLanguage(); local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag --[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------ primary table of tables that decode: lang -> language tags and names script -> ISO 15924 script tags region -> ISO 3166 region tags variant -> iana registered variant tags suppressed -> map of scripts tags and their associated language tags all of these data come from separate modules that are derived from the IANA language-subtag-registry file key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches the first name. ]] local function key_to_lower (module, src_type) local out = {}; local source = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data if 'var_sup' == src_type then for k, v in pairs (source) do out[k:lower()] = v; -- for variant and suppressed everything is needed end elseif 'lang' == src_type and source.active then -- for ~/iana_languages (active) for k, v in pairs (source.active) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end elseif 'lang_dep' == src_type and source.deprecated then -- for ~/iana_languages (deprecated) for k, v in pairs (source.deprecated) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end else -- here for all other sources for k, v in pairs (source) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end end return out; end local lang_name_table_t = { lang = key_to_lower ('Module:Language/data/iana languages', 'lang'), lang_dep = key_to_lower ('Module:Language/data/iana languages', 'lang_dep'), script = key_to_lower ('Module:Language/data/iana scripts'), -- script keys are capitalized; set to lower region = key_to_lower ('Module:Language/data/iana regions'), -- region keys are uppercase; set to lower variant = key_to_lower ('Module:Language/data/iana variants', 'var_sup'), suppressed = key_to_lower ('Module:Language/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower } --[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >-------------------------------- For internationalization; not used at en.wiki The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal. Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki language list for the local language. Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all. When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens add an appropriate entry to the override table below. Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply spelling differences: bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym dv: IANA: Dhivehi MW: Divehi el: IANA: Modern Greek MW: Greek ht: IANA: Haitian MW: Haitian Creole ky: IANA: Kirghiz MW: Kyrgyz li: IANA: Limburgan MW: Limburgish or: IANA: Oriya MW: Odia os: IANA: Ossetian MW: Ossetic "pa: IANA: Panjabi MW: Punjabi "ps: IANA: Pushto MW: Pashto "to: IANA: Tonga MW: Tongan "ug: IANA: Uighur MW: Uyghur use the override table to override language names that are incorrect for your project To see the list of names that MediaWiki has for your language, enter this in the Debug colsole: =mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all')) (replacing <tag> with the language tag for your language) Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true. ]] local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki -- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all if true == media_wiki_override_enable then local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list if lang_name_table_t.lang[tag] then -- if the tag is in the main list lang_name_table_t.lang[tag] = name; -- overwrite exisiting name with the name from MediaWiki end end end --[[--------------------------< O V E R R I D E >-------------------------------------------------------------- Language codes and names in this table override the BCP47 names in lang_name_table. indexes in this table shall always be lower case ]] local override = { ------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------ ["ab"] = "Abkhaz", -- to match en.wiki article name ["ca-valencia"] = "Valencian", ["cu"] = "Church Slavonic", -- 2nd IANA name; ["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names ["de-ch"] = "Swiss Standard German", ["en-au"] = "Australian English", ["en-ca"] = "Canadian English", ["en-emodeng"] = "Early Modern English", ["en-gb"] = "British English", ["en-ie"] = "Irish English", ["en-in"] = "Indian English", ["en-nz"] = "New Zealand English", ["en-us"] = "American English", ["en-za"] = "South African English", ["fy"] = "West Frisian", -- Western Frisian ["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title ["nl-be"] = "Flemish", -- match MediaWiki ["oc-provenc"] = "Provençal", ["ps"] = "Pashto", -- Pushto ["pt-br"] = "Brazilian Portuguese", -- match MediaWiki ["tw-asante"] = "Asante Twi", ["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name -- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages --<begin do-not-edit except to comment out>-- ["av"] = "Avar", -- Avaric ["bo"] = "Standard Tibetan", -- Tibetan ["el"] = "Greek", -- Modern Greek -- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa ["ff"] = "Fula", -- Fulah ["ht"] = "Haitian Creole", -- Haitian ["hz"] = "Otjiherero", -- Herero ["ii"] = "Yi", -- Sichuan Yi ["ki"] = "Gikuyu", -- Kikuyu ["kl"] = "Greenlandic", -- Kalaallisut ["ky"] = "Kyrgyz", -- Kirghiz ["lg"] = "Luganda", -- Ganda ["li"] = "Limburgish", -- Limburgan ["mi"] = "Māori", -- Maori ["na"] = "Nauruan", -- Nauru ["nb"] = "Bokmål", -- Norwegian Bokmål ["nd"] = "Northern Ndebele", -- North Ndebele ["nn"] = "Nynorsk", -- Norwegian Nynorsk ["nr"] = "Southern Ndebele", -- South Ndebele ["ny"] = "Chichewa", -- Nyanja ["oj"] = "Ojibwe", -- Ojibwa ["or"] = "Odia", -- Oriya ["pa"] = "Punjabi", -- Panjabi ["rn"] = "Kirundi", -- Rundi ["sl"] = "Slovene", -- Slovenian ["ss"] = "Swazi", -- Swati ["st"] = "Sotho", -- Southern Sotho ["to"] = "Tongan", -- Tonga --<end do-not-edit except to comment out>-- ------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >---------------------------------------------- ["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash) ["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name ["art"] = "constructed", -- to match en.wiki article; lowercase for category name ["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title ["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title ["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration; ["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat ["bxr"] = "Russian Buryat", -- Russia Buriat; ["bxu"] = "Chinese Buryat", -- China Buriat; ["byr"] = "Yipma", -- Baruya, Yipma ["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic ["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title ["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash) ["frr"] = "North Frisian", -- Northern Frisian ["frs"] = "East Frisian Low Saxon", -- Eastern Frisian ["gsw-fr"] = "Alsatian", -- match MediaWiki ["haa"] = "Hän", -- Han; to match en.wiki article title ["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash) ["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title ["jam"] = "Jamaican Patois", -- Jamaican Creole English ["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco ["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo ["mhr"] = "Meadow Mari", -- Eastern Mari ["mid"] = "Modern Mandaic", -- Mandaic ['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope; ["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash) ["mla"] = "Tamambo", -- Malo ['mte'] = "Mono-Alu", -- Mono (Solomon Islands) ['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope; ["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title ["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title ["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash) ["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title ["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text ["nrf-gg"] = "Guernésiais", -- match MediaWiki ["nrf-je"] = "Jèrriais", -- match MediaWiki ["nzi"] = "Nzema", -- Nzima; to match en.wiki article title ["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash) ["orv"] = "Old East Slavic", -- Old Russian ["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article ["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article ["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title ["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name() ["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article ["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title ["stq"] = "Saterland Frisian", -- Saterfriesisch ["und"] = "undetermined", -- capitalization to match existing category ["wrg"] = "Warrongo", -- Warungu ["xal-ru"] = "Kalmyk", -- to match en.wiki article title ["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño ["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title ["zxx"] = "no linguistic content", -- capitalization -- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages --<begin do-not-edit except to comment out>-- ["ace"] = "Acehnese", -- Achinese ["aec"] = "Sa'idi Arabic", -- Saidi Arabic ["akl"] = "Aklan", -- Aklanon ["alt"] = "Altay", -- Southern Altai ["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache ["bal"] = "Balochi", -- Baluchi -- ["bcl"] = "Central Bicolano", -- Central Bikol ["bin"] = "Edo", -- Bini ["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya ["chg"] = "Chagatay", -- Chagatai ["ckb"] = "Sorani Kurdish", -- Central Kurdish ["cnu"] = "Shenwa", -- Chenoua ["coc"] = "Cocopah", -- Cocopa ["diq"] = "Zazaki", -- Dimli ["fit"] = "Meänkieli", -- Tornedalen Finnish ["fkv"] = "Kven", -- Kven Finnish ["frk"] = "Old Frankish", -- Frankish ["gez"] = "Ge'ez", -- Geez ["gju"] = "Gujari", -- Gujari ["gsw"] = "Alemannic German", -- Swiss German ["gul"] = "Gullah", -- Sea Island Creole English ["hak"] = "Hakka", -- Hakka Chinese ["hbo"] = "Biblical Hebrew", -- Ancient Hebrew ["hnd"] = "Hindko", -- Southern Hindko -- ["ikt"] = "Inuvialuk", -- Inuinnaqtun ["kaa"] = "Karakalpak", -- Kara-Kalpak ["khb"] = "Tai Lü", -- Lü ["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish ["kpo"] = "Kposo", -- Ikposo ["krj"] = "Kinaray-a", -- Kinaray-A ["ktz"] = "Juǀ'hoan", -- Juǀʼhoan ["lez"] = "Lezgian", -- Lezghian ["liv"] = "Livonian", -- Liv ["lng"] = "Lombardic", -- Langobardic ["mia"] = "Miami-Illinois", -- Miami ["miq"] = "Miskito", -- Mískito ["mix"] = "Mixtec", -- Mixtepec Mixtec ["mni"] = "Meitei", -- Manipuri ["mrj"] = "Hill Mari", -- Western Mari ["mww"] = "White Hmong", -- Hmong Daw ["nds-nl"] = "Dutch Low Saxon", -- Low German -- ["new"] = "Nepal Bhasa", -- Newari ["nso"] = "Northern Sotho", -- Pedi -- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari ["ood"] = "O'odham", -- Tohono O'odham ["otk"] = "Old Turkic", -- Old Turkish ["pal"] = "Middle Persian", -- Pahlavi ["pam"] = "Kapampangan", -- Pampanga ["phr"] = "Potwari", -- Pahari-Potwari ["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit -- ["pnb"] = "Punjabi", -- Western Panjabi ["psu"] = "Shauraseni", -- Sauraseni Prākrit ["rap"] = "Rapa Nui", -- Rapanui ["rar"] = "Cook Islands Māori", -- Rarotongan ["rmu"] = "Scandoromani", -- Tavringer Romani ["rom"] = "Romani", -- Romany ["rup"] = "Aromanian", -- Macedo-Romanian ["ryu"] = "Okinawan", -- Central Okinawan ["sdc"] = "Sassarese", -- Sassarese Sardinian ["sdn"] = "Gallurese", -- Gallurese Sardinian ["shp"] = "Shipibo", -- Shipibo-Conibo ["src"] = "Logudorese", -- Logudorese Sardinian ["sro"] = "Campidanese", -- Campidanese Sardinian ["tkl"] = "Tokelauan", -- Tokelau ["tvl"] = "Tuvaluan", -- Tuvalu ["tyv"] = "Tuvan", -- Tuvinian ["vls"] = "West Flemish", -- Vlaams ["wep"] = "Westphalian", -- Westphalien ["xal"] = "Oirat", -- Kalmyk ["xcl"] = "Old Armenian", -- Classical Armenian ["yua"] = "Yucatec Maya", -- Yucateco --<end do-not-edit except to comment out>-- ------------------------------< P R I V A T E _ U S E _ T A G S >---------------------------------------------- ["akk-x-latbabyl"] = "Late Babylonian", ["akk-x-midassyr"] = "Middle Assyrian Akkadian", ["akk-x-midbabyl"] = "Middle Babylonian Akkadian", ["akk-x-neoassyr"] = "Neo-Assyrian Akkadian", ["akk-x-neobabyl"] = "Neo-Babylonian Akkadian", ["akk-x-old"] = "Old Akkadian", ["akk-x-oldassyr"] = "Old Assyrian Akkadian", ["akk-x-oldbabyl"] = "Old Babylonian Akkadian", ["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages ["ca-x-old"] = "Old Catalan", ["cel-x-proto"] = "Proto-Celtic", -- cel in IANA is Celtic languages ["egy-x-demotic"] = "Demotic Egyptian", ["egy-x-late"] = "Late Egyptian", ["egy-x-middle"] = "Middle Egyptian", ["egy-x-old"] = "Old Egyptian", ["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages ["gmw-x-ecg"] = "East Central German", ["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre ["grc-x-attic"] = "Attic Greek", ["grc-x-biblical"] = "Biblical Greek", ["grc-x-byzant"] = "Byzantine Greek", ["grc-x-classic"] = "Classical Greek", ["grc-x-doric"] = "Doric Greek", ["grc-x-hellen"] = "Hellenistic Greek", ["grc-x-ionic"] = "Ionic Greek", ["grc-x-koine"] = "Koinē Greek", ["grc-x-medieval"] = "Medieval Greek", ["grc-x-patris"] = "Patristic Greek", ["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages ["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages ["ine-x-proto"] = "Proto-Indo-European", ["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages ["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages ["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there ["la-x-medieval"] = "Medieval Latin", ["la-x-new"] = "New Latin", ["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect ["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages ["prg-x-old"] = "Old Prussian", ["sem-x-ammonite"] = "Ammonite", ["sem-x-aramaic"] = "Aramaic", ["sem-x-canaan"] = "Canaanite languages", ["sem-x-dumaitic"] = "Dumaitic", ["sem-x-egurage"] = "Eastern Gurage", ["sem-x-hatran"] = "Hatran Aramaic", ["sem-x-oldsoara"] = "Old South Arabian", ["sem-x-palmyren"] = "Palmyrene Aramaic", ["sem-x-proto"] = "Proto-Semitic", ["sem-x-taymanit"] = "Taymanitic", ["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages ["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai ["yuf-x-wal"] = "Walapai", ["yuf-x-yav"] = "Yavapai", } --[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------ for those rare occasions when article titles don't fit with the normal '<language name>-language', this table maps language code to article title. Use of this table should be avoided and the use of redirects preferred as that is the long-standing method of handling article names that don't fit with the normal pattern ]] local article_name = { ['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page ["lij"] = "Ligurian (Romance language)", -- Ligurian; see Template_talk:Lang#Ligurian_dab ['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon) ['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages ['mnr'] = "Mono language (California)", -- Mono (USA) ['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon) ['qwm'] = "Kuman (Russia)", -- Kuman (Russia); to avoid Kuman dab page ["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon) ["xlg"] = "Ligurian (ancient language)", -- see Template_talk:Lang#Ligurian_dab ["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo) } --[=[-------------------------< R T L _ S C R I P T S >-------------------------------------------------------- ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]] last update to this list: 2017-12-24 ]=] local rtl_scripts = { 'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr', 'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb', 'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg', 'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole', }; --[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------ This is a table of tables of transliteration standards and the language codes or language scripts that apply to those standards. This table is used to create the tool-tip text associated with the transliterated text displayed by some of the {{lang-??}} templates. These tables are more-or-less copied directly from {{transl}}. The standard 'NO_STD' is a construct to allow for the cases when no |std= parameter value is provided. ]] local translit_title_table = { ['ahl'] = { ['default'] = 'Academy of the Hebrew Language transliteration', }, ['ala'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['ala-lc'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['batr'] = { ['default'] = 'Bikdash Arabic Transliteration Rules', }, ['bgn/pcgn'] = { ['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration', }, ['din'] = { ['ar'] = 'DIN 31635 Arabic', ['fa'] = 'DIN 31635 Arabic', ['ku'] = 'DIN 31635 Arabic', ['ps'] = 'DIN 31635 Arabic', ['tg'] = 'DIN 31635 Arabic', ['ug'] = 'DIN 31635 Arabic', ['ur'] = 'DIN 31635 Arabic', ['arab'] = 'DIN 31635 Arabic', ['default'] = 'DIN transliteration', }, ['eae'] = { ['default'] = 'Encyclopaedia Aethiopica transliteration', }, ['hepburn'] = { ['default'] = 'Hepburn transliteration', }, ['hunterian'] = { ['default'] = 'Hunterian transliteration', }, ['iast'] = { ['default'] = 'International Alphabet of Sanskrit transliteration', }, ['iso'] = { -- when a transliteration standard is supplied ['ab'] = 'ISO 9 Cyrillic', ['ba'] = 'ISO 9 Cyrillic', ['be'] = 'ISO 9 Cyrillic', ['bg'] = 'ISO 9 Cyrillic', ['kk'] = 'ISO 9 Cyrillic', ['ky'] = 'ISO 9 Cyrillic', ['mn'] = 'ISO 9 Cyrillic', ['ru'] = 'ISO 9 Cyrillic', ['tg'] = 'ISO 9 Cyrillic', ['uk'] = 'ISO 9 Cyrillic', ['bua'] = 'ISO 9 Cyrillic', ['sah'] = 'ISO 9 Cyrillic', ['tut'] = 'ISO 9 Cyrillic', ['xal'] = 'ISO 9 Cyrillic', ['cyrl'] = 'ISO 9 Cyrillic', ['ar'] = 'ISO 233 Arabic', ['ku'] = 'ISO 233 Arabic', ['ps'] = 'ISO 233 Arabic', ['ug'] = 'ISO 233 Arabic', ['ur'] = 'ISO 233 Arabic', ['arab'] = 'ISO 233 Arabic', ['he'] = 'ISO 259 Hebrew', ['yi'] = 'ISO 259 Hebrew', ['hebr'] = 'ISO 259 Hebrew', ['el'] = 'ISO 843 Greek', ['grc'] = 'ISO 843 Greek', ['ja'] = 'ISO 3602 Japanese', ['hira'] = 'ISO 3602 Japanese', ['hrkt'] = 'ISO 3602 Japanese', ['jpan'] = 'ISO 3602 Japanese', ['kana'] = 'ISO 3602 Japanese', ['zh'] = 'ISO 7098 Chinese', ['chi'] = 'ISO 7098 Chinese', ['pny'] = 'ISO 7098 Chinese', ['zho'] = 'ISO 7098 Chinese', -- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani? ['hans'] = 'ISO 7098 Chinese', ['hant'] = 'ISO 7098 Chinese', ['ka'] = 'ISO 9984 Georgian', ['kat'] = 'ISO 9984 Georgian', ['arm'] = 'ISO 9985 Armenian', ['hy'] = 'ISO 9985 Armenian', ['th'] = 'ISO 11940 Thai', ['tha'] = 'ISO 11940 Thai', ['ko'] = 'ISO 11941 Korean', ['kor'] = 'ISO 11941 Korean', ['awa'] = 'ISO 15919 Indic', ['bho'] = 'ISO 15919 Indic', ['bn'] = 'ISO 15919 Indic', ['bra'] = 'ISO 15919 Indic', ['doi'] = 'ISO 15919 Indic', ['dra'] = 'ISO 15919 Indic', ['gon'] = 'ISO 15919 Indic', ['gu'] = 'ISO 15919 Indic', ['hi'] = 'ISO 15919 Indic', ['hno'] = 'ISO 15919 Indic', ['inc'] = 'ISO 15919 Indic', ['kn'] = 'ISO 15919 Indic', ['kok'] = 'ISO 15919 Indic', ['ks'] = 'ISO 15919 Indic', ['mag'] = 'ISO 15919 Indic', ['mai'] = 'ISO 15919 Indic', ['ml'] = 'ISO 15919 Indic', ['mr'] = 'ISO 15919 Indic', ['ne'] = 'ISO 15919 Indic', ['new'] = 'ISO 15919 Indic', ['or'] = 'ISO 15919 Indic', ['pa'] = 'ISO 15919 Indic', ['pnb'] = 'ISO 15919 Indic', ['raj'] = 'ISO 15919 Indic', ['sa'] = 'ISO 15919 Indic', ['sat'] = 'ISO 15919 Indic', ['sd'] = 'ISO 15919 Indic', ['si'] = 'ISO 15919 Indic', ['skr'] = 'ISO 15919 Indic', ['ta'] = 'ISO 15919 Indic', ['tcy'] = 'ISO 15919 Indic', ['te'] = 'ISO 15919 Indic', ['beng'] = 'ISO 15919 Indic', ['brah'] = 'ISO 15919 Indic', ['deva'] = 'ISO 15919 Indic', ['gujr'] = 'ISO 15919 Indic', ['guru'] = 'ISO 15919 Indic', ['knda'] = 'ISO 15919 Indic', ['mlym'] = 'ISO 15919 Indic', ['orya'] = 'ISO 15919 Indic', ['sinh'] = 'ISO 15919 Indic', ['taml'] = 'ISO 15919 Indic', ['telu'] = 'ISO 15919 Indic', ['default'] = 'ISO transliteration', }, ['jyutping'] = { ['default'] = 'Jyutping transliteration', }, ['mlcts'] = { ['default'] = 'Myanmar Language Commission Transcription System', }, ['mr'] = { ['default'] = 'McCune–Reischauer transliteration', }, ['nihon-shiki'] = { ['default'] = 'Nihon-shiki transliteration', }, ['no_std'] = { -- when no transliteration standard is supplied ['akk'] = 'Semitic transliteration', ['sem'] = 'Semitic transliteration', ['phnx'] = 'Semitic transliteration', ['xsux'] = 'Cuneiform transliteration', }, ['pinyin'] = { ['default'] = 'Pinyin transliteration', }, ['rr'] = { ['default'] = 'Revised Romanization of Korean transliteration', }, ['rtgs'] = { ['default'] = 'Royal Thai General System of Transcription', }, ['satts'] = { ['default'] = 'Standard Arabic Technical Transliteration System transliteration', }, ['scientific'] = { ['default'] = 'scientific transliteration', }, ['ukrainian'] = { ['default'] = 'Ukrainian National system of romanization', }, ['ungegn'] = { ['default'] = 'United Nations Group of Experts on Geographical Names transliteration', }, ['wadegile'] = { ['default'] = 'Wade–Giles transliteration', }, ['wehr'] = { ['default'] = 'Hans Wehr transliteration', }, }; return { this_wiki_lang_tag = this_wiki_lang_tag, this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction article_name = article_name, lang_name_table = lang_name_table_t, override = override, rtl_scripts = rtl_scripts, special_tags_table = special_tags_table, translit_title_table = translit_title_table, }; 44981b3b66900e816590946e3e049c421ebecc80 Module:Language/data/iana languages 828 240 705 704 2023-06-06T18:16:28Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Language/data/iana_languages]]: w Scribunto text/plain -- File-Date: 2023-05-11 local active = { ["aa"] = {"Afar"}, ["ab"] = {"Abkhazian"}, ["ae"] = {"Avestan"}, ["af"] = {"Afrikaans"}, ["ak"] = {"Akan"}, ["am"] = {"Amharic"}, ["an"] = {"Aragonese"}, ["ar"] = {"Arabic"}, ["as"] = {"Assamese"}, ["av"] = {"Avaric"}, ["ay"] = {"Aymara"}, ["az"] = {"Azerbaijani"}, ["ba"] = {"Bashkir"}, ["be"] = {"Belarusian"}, ["bg"] = {"Bulgarian"}, ["bh"] = {"Bihari languages"}, ["bi"] = {"Bislama"}, ["bm"] = {"Bambara"}, ["bn"] = {"Bengali", "Bangla"}, ["bo"] = {"Tibetan"}, ["br"] = {"Breton"}, ["bs"] = {"Bosnian"}, ["ca"] = {"Catalan", "Valencian"}, ["ce"] = {"Chechen"}, ["ch"] = {"Chamorro"}, ["co"] = {"Corsican"}, ["cr"] = {"Cree"}, ["cs"] = {"Czech"}, ["cu"] = {"Church Slavic", "Church Slavonic", "Old Bulgarian", "Old Church Slavonic", "Old Slavonic"}, ["cv"] = {"Chuvash"}, ["cy"] = {"Welsh"}, ["da"] = {"Danish"}, ["de"] = {"German"}, ["dv"] = {"Dhivehi", "Divehi", "Maldivian"}, ["dz"] = {"Dzongkha"}, ["ee"] = {"Ewe"}, ["el"] = {"Modern Greek (1453-)"}, ["en"] = {"English"}, ["eo"] = {"Esperanto"}, ["es"] = {"Spanish", "Castilian"}, ["et"] = {"Estonian"}, ["eu"] = {"Basque"}, ["fa"] = {"Persian"}, ["ff"] = {"Fulah"}, ["fi"] = {"Finnish"}, ["fj"] = {"Fijian"}, ["fo"] = {"Faroese"}, ["fr"] = {"French"}, ["fy"] = {"Western Frisian"}, ["ga"] = {"Irish"}, ["gd"] = {"Scottish Gaelic", "Gaelic"}, ["gl"] = {"Galician"}, ["gn"] = {"Guarani"}, ["gu"] = {"Gujarati"}, ["gv"] = {"Manx"}, ["ha"] = {"Hausa"}, ["he"] = {"Hebrew"}, ["hi"] = {"Hindi"}, ["ho"] = {"Hiri Motu"}, ["hr"] = {"Croatian"}, ["ht"] = {"Haitian", "Haitian Creole"}, ["hu"] = {"Hungarian"}, ["hy"] = {"Armenian"}, ["hz"] = {"Herero"}, ["ia"] = {"Interlingua (International Auxiliary Language Association)"}, ["id"] = {"Indonesian"}, ["ie"] = {"Interlingue", "Occidental"}, ["ig"] = {"Igbo"}, ["ii"] = {"Sichuan Yi", "Nuosu"}, ["ik"] = {"Inupiaq"}, ["io"] = {"Ido"}, ["is"] = {"Icelandic"}, ["it"] = {"Italian"}, ["iu"] = {"Inuktitut"}, ["ja"] = {"Japanese"}, ["jv"] = {"Javanese"}, ["ka"] = {"Georgian"}, ["kg"] = {"Kongo"}, ["ki"] = {"Kikuyu", "Gikuyu"}, ["kj"] = {"Kuanyama", "Kwanyama"}, ["kk"] = {"Kazakh"}, ["kl"] = {"Kalaallisut", "Greenlandic"}, ["km"] = {"Khmer", "Central Khmer"}, ["kn"] = {"Kannada"}, ["ko"] = {"Korean"}, ["kr"] = {"Kanuri"}, ["ks"] = {"Kashmiri"}, ["ku"] = {"Kurdish"}, ["kv"] = {"Komi"}, ["kw"] = {"Cornish"}, ["ky"] = {"Kirghiz", "Kyrgyz"}, ["la"] = {"Latin"}, ["lb"] = {"Luxembourgish", "Letzeburgesch"}, ["lg"] = {"Ganda", "Luganda"}, ["li"] = {"Limburgan", "Limburger", "Limburgish"}, ["ln"] = {"Lingala"}, ["lo"] = {"Lao"}, ["lt"] = {"Lithuanian"}, ["lu"] = {"Luba-Katanga"}, ["lv"] = {"Latvian"}, ["mg"] = {"Malagasy"}, ["mh"] = {"Marshallese"}, ["mi"] = {"Maori"}, ["mk"] = {"Macedonian"}, ["ml"] = {"Malayalam"}, ["mn"] = {"Mongolian"}, ["mr"] = {"Marathi"}, ["ms"] = {"Malay (macrolanguage)"}, ["mt"] = {"Maltese"}, ["my"] = {"Burmese"}, ["na"] = {"Nauru"}, ["nb"] = {"Norwegian Bokmål"}, ["nd"] = {"North Ndebele"}, ["ne"] = {"Nepali (macrolanguage)"}, ["ng"] = {"Ndonga"}, ["nl"] = {"Dutch", "Flemish"}, ["nn"] = {"Norwegian Nynorsk"}, ["no"] = {"Norwegian"}, ["nr"] = {"South Ndebele"}, ["nv"] = {"Navajo", "Navaho"}, ["ny"] = {"Nyanja", "Chewa", "Chichewa"}, ["oc"] = {"Occitan (post 1500)"}, ["oj"] = {"Ojibwa"}, ["om"] = {"Oromo"}, ["or"] = {"Oriya (macrolanguage)", "Odia (macrolanguage)"}, ["os"] = {"Ossetian", "Ossetic"}, ["pa"] = {"Panjabi", "Punjabi"}, ["pi"] = {"Pali"}, ["pl"] = {"Polish"}, ["ps"] = {"Pushto", "Pashto"}, ["pt"] = {"Portuguese"}, ["qu"] = {"Quechua"}, ["rm"] = {"Romansh"}, ["rn"] = {"Rundi"}, ["ro"] = {"Romanian", "Moldavian", "Moldovan"}, ["ru"] = {"Russian"}, ["rw"] = {"Kinyarwanda"}, ["sa"] = {"Sanskrit"}, ["sc"] = {"Sardinian"}, ["sd"] = {"Sindhi"}, ["se"] = {"Northern Sami"}, ["sg"] = {"Sango"}, ["sh"] = {"Serbo-Croatian"}, ["si"] = {"Sinhala", "Sinhalese"}, ["sk"] = {"Slovak"}, ["sl"] = {"Slovenian"}, ["sm"] = {"Samoan"}, ["sn"] = {"Shona"}, ["so"] = {"Somali"}, ["sq"] = {"Albanian"}, ["sr"] = {"Serbian"}, ["ss"] = {"Swati"}, ["st"] = {"Southern Sotho"}, ["su"] = {"Sundanese"}, ["sv"] = {"Swedish"}, ["sw"] = {"Swahili (macrolanguage)"}, ["ta"] = {"Tamil"}, ["te"] = {"Telugu"}, ["tg"] = {"Tajik"}, ["th"] = {"Thai"}, ["ti"] = {"Tigrinya"}, ["tk"] = {"Turkmen"}, ["tl"] = {"Tagalog"}, ["tn"] = {"Tswana"}, ["to"] = {"Tonga (Tonga Islands)"}, ["tr"] = {"Turkish"}, ["ts"] = {"Tsonga"}, ["tt"] = {"Tatar"}, ["tw"] = {"Twi"}, ["ty"] = {"Tahitian"}, ["ug"] = {"Uighur", "Uyghur"}, ["uk"] = {"Ukrainian"}, ["ur"] = {"Urdu"}, ["uz"] = {"Uzbek"}, ["ve"] = {"Venda"}, ["vi"] = {"Vietnamese"}, ["vo"] = {"Volapük"}, ["wa"] = {"Walloon"}, ["wo"] = {"Wolof"}, ["xh"] = {"Xhosa"}, ["yi"] = {"Yiddish"}, ["yo"] = {"Yoruba"}, ["za"] = {"Zhuang", "Chuang"}, ["zh"] = {"Chinese"}, ["zu"] = {"Zulu"}, ["aaa"] = {"Ghotuo"}, ["aab"] = {"Alumu-Tesu"}, ["aac"] = {"Ari"}, ["aad"] = {"Amal"}, ["aae"] = {"Arbëreshë Albanian"}, ["aaf"] = {"Aranadan"}, ["aag"] = {"Ambrak"}, ["aah"] = {"Abu' Arapesh"}, ["aai"] = {"Arifama-Miniafia"}, ["aak"] = {"Ankave"}, ["aal"] = {"Afade"}, ["aan"] = {"Anambé"}, ["aao"] = {"Algerian Saharan Arabic"}, ["aap"] = {"Pará Arára"}, ["aaq"] = {"Eastern Abnaki"}, ["aas"] = {"Aasáx"}, ["aat"] = {"Arvanitika Albanian"}, ["aau"] = {"Abau"}, ["aav"] = {"Austro-Asiatic languages"}, ["aaw"] = {"Solong"}, ["aax"] = {"Mandobo Atas"}, ["aaz"] = {"Amarasi"}, ["aba"] = {"Abé"}, ["abb"] = {"Bankon"}, ["abc"] = {"Ambala Ayta"}, ["abd"] = {"Manide"}, ["abe"] = {"Western Abnaki"}, ["abf"] = {"Abai Sungai"}, ["abg"] = {"Abaga"}, ["abh"] = {"Tajiki Arabic"}, ["abi"] = {"Abidji"}, ["abj"] = {"Aka-Bea"}, ["abl"] = {"Lampung Nyo"}, ["abm"] = {"Abanyom"}, ["abn"] = {"Abua"}, ["abo"] = {"Abon"}, ["abp"] = {"Abellen Ayta"}, ["abq"] = {"Abaza"}, ["abr"] = {"Abron"}, ["abs"] = {"Ambonese Malay"}, ["abt"] = {"Ambulas"}, ["abu"] = {"Abure"}, ["abv"] = {"Baharna Arabic"}, ["abw"] = {"Pal"}, ["abx"] = {"Inabaknon"}, ["aby"] = {"Aneme Wake"}, ["abz"] = {"Abui"}, ["aca"] = {"Achagua"}, ["acb"] = {"Áncá"}, ["acd"] = {"Gikyode"}, ["ace"] = {"Achinese"}, ["acf"] = {"Saint Lucian Creole French"}, ["ach"] = {"Acoli"}, ["aci"] = {"Aka-Cari"}, ["ack"] = {"Aka-Kora"}, ["acl"] = {"Akar-Bale"}, ["acm"] = {"Mesopotamian Arabic"}, ["acn"] = {"Achang"}, ["acp"] = {"Eastern Acipa"}, ["acq"] = {"Ta'izzi-Adeni Arabic"}, ["acr"] = {"Achi"}, ["acs"] = {"Acroá"}, ["act"] = {"Achterhoeks"}, ["acu"] = {"Achuar-Shiwiar"}, ["acv"] = {"Achumawi"}, ["acw"] = {"Hijazi Arabic"}, ["acx"] = {"Omani Arabic"}, ["acy"] = {"Cypriot Arabic"}, ["acz"] = {"Acheron"}, ["ada"] = {"Adangme"}, ["adb"] = {"Atauran"}, ["add"] = {"Lidzonka", "Dzodinka"}, ["ade"] = {"Adele"}, ["adf"] = {"Dhofari Arabic"}, ["adg"] = {"Andegerebinha"}, ["adh"] = {"Adhola"}, ["adi"] = {"Adi"}, ["adj"] = {"Adioukrou"}, ["adl"] = {"Galo"}, ["adn"] = {"Adang"}, ["ado"] = {"Abu"}, ["adq"] = {"Adangbe"}, ["adr"] = {"Adonara"}, ["ads"] = {"Adamorobe Sign Language"}, ["adt"] = {"Adnyamathanha"}, ["adu"] = {"Aduge"}, ["adw"] = {"Amundava"}, ["adx"] = {"Amdo Tibetan"}, ["ady"] = {"Adyghe", "Adygei"}, ["adz"] = {"Adzera"}, ["aea"] = {"Areba"}, ["aeb"] = {"Tunisian Arabic"}, ["aec"] = {"Saidi Arabic"}, ["aed"] = {"Argentine Sign Language"}, ["aee"] = {"Northeast Pashai", "Northeast Pashayi"}, ["aek"] = {"Haeke"}, ["ael"] = {"Ambele"}, ["aem"] = {"Arem"}, ["aen"] = {"Armenian Sign Language"}, ["aeq"] = {"Aer"}, ["aer"] = {"Eastern Arrernte"}, ["aes"] = {"Alsea"}, ["aeu"] = {"Akeu"}, ["aew"] = {"Ambakich"}, ["aey"] = {"Amele"}, ["aez"] = {"Aeka"}, ["afa"] = {"Afro-Asiatic languages"}, ["afb"] = {"Gulf Arabic"}, ["afd"] = {"Andai"}, ["afe"] = {"Putukwam"}, ["afg"] = {"Afghan Sign Language"}, ["afh"] = {"Afrihili"}, ["afi"] = {"Akrukay", "Chini"}, ["afk"] = {"Nanubae"}, ["afn"] = {"Defaka"}, ["afo"] = {"Eloyi"}, ["afp"] = {"Tapei"}, ["afs"] = {"Afro-Seminole Creole"}, ["aft"] = {"Afitti"}, ["afu"] = {"Awutu"}, ["afz"] = {"Obokuitai"}, ["aga"] = {"Aguano"}, ["agb"] = {"Legbo"}, ["agc"] = {"Agatu"}, ["agd"] = {"Agarabi"}, ["age"] = {"Angal"}, ["agf"] = {"Arguni"}, ["agg"] = {"Angor"}, ["agh"] = {"Ngelima"}, ["agi"] = {"Agariya"}, ["agj"] = {"Argobba"}, ["agk"] = {"Isarog Agta"}, ["agl"] = {"Fembe"}, ["agm"] = {"Angaataha"}, ["agn"] = {"Agutaynen"}, ["ago"] = {"Tainae"}, ["agq"] = {"Aghem"}, ["agr"] = {"Aguaruna"}, ["ags"] = {"Esimbi"}, ["agt"] = {"Central Cagayan Agta"}, ["agu"] = {"Aguacateco"}, ["agv"] = {"Remontado Dumagat"}, ["agw"] = {"Kahua"}, ["agx"] = {"Aghul"}, ["agy"] = {"Southern Alta"}, ["agz"] = {"Mt. Iriga Agta"}, ["aha"] = {"Ahanta"}, ["ahb"] = {"Axamb"}, ["ahg"] = {"Qimant"}, ["ahh"] = {"Aghu"}, ["ahi"] = {"Tiagbamrin Aizi"}, ["ahk"] = {"Akha"}, ["ahl"] = {"Igo"}, ["ahm"] = {"Mobumrin Aizi"}, ["ahn"] = {"Àhàn"}, ["aho"] = {"Ahom"}, ["ahp"] = {"Aproumu Aizi"}, ["ahr"] = {"Ahirani"}, ["ahs"] = {"Ashe"}, ["aht"] = {"Ahtena"}, ["aia"] = {"Arosi"}, ["aib"] = {"Ainu (China)"}, ["aic"] = {"Ainbai"}, ["aid"] = {"Alngith"}, ["aie"] = {"Amara"}, ["aif"] = {"Agi"}, ["aig"] = {"Antigua and Barbuda Creole English"}, ["aih"] = {"Ai-Cham"}, ["aii"] = {"Assyrian Neo-Aramaic"}, ["aij"] = {"Lishanid Noshan"}, ["aik"] = {"Ake"}, ["ail"] = {"Aimele"}, ["aim"] = {"Aimol"}, ["ain"] = {"Ainu (Japan)"}, ["aio"] = {"Aiton"}, ["aip"] = {"Burumakok"}, ["aiq"] = {"Aimaq"}, ["air"] = {"Airoran"}, ["ait"] = {"Arikem"}, ["aiw"] = {"Aari"}, ["aix"] = {"Aighon"}, ["aiy"] = {"Ali"}, ["aja"] = {"Aja (South Sudan)"}, ["ajg"] = {"Aja (Benin)"}, ["aji"] = {"Ajië"}, ["ajn"] = {"Andajin"}, ["ajs"] = {"Algerian Jewish Sign Language"}, ["aju"] = {"Judeo-Moroccan Arabic"}, ["ajw"] = {"Ajawa"}, ["ajz"] = {"Amri Karbi"}, ["akb"] = {"Batak Angkola"}, ["akc"] = {"Mpur"}, ["akd"] = {"Ukpet-Ehom"}, ["ake"] = {"Akawaio"}, ["akf"] = {"Akpa"}, ["akg"] = {"Anakalangu"}, ["akh"] = {"Angal Heneng"}, ["aki"] = {"Aiome"}, ["akj"] = {"Aka-Jeru"}, ["akk"] = {"Akkadian"}, ["akl"] = {"Aklanon"}, ["akm"] = {"Aka-Bo"}, ["ako"] = {"Akurio"}, ["akp"] = {"Siwu"}, ["akq"] = {"Ak"}, ["akr"] = {"Araki"}, ["aks"] = {"Akaselem"}, ["akt"] = {"Akolet"}, ["aku"] = {"Akum"}, ["akv"] = {"Akhvakh"}, ["akw"] = {"Akwa"}, ["akx"] = {"Aka-Kede"}, ["aky"] = {"Aka-Kol"}, ["akz"] = {"Alabama"}, ["ala"] = {"Alago"}, ["alc"] = {"Qawasqar"}, ["ald"] = {"Alladian"}, ["ale"] = {"Aleut"}, ["alf"] = {"Alege"}, ["alg"] = {"Algonquian languages"}, ["alh"] = {"Alawa"}, ["ali"] = {"Amaimon"}, ["alj"] = {"Alangan"}, ["alk"] = {"Alak"}, ["all"] = {"Allar"}, ["alm"] = {"Amblong"}, ["aln"] = {"Gheg Albanian"}, ["alo"] = {"Larike-Wakasihu"}, ["alp"] = {"Alune"}, ["alq"] = {"Algonquin"}, ["alr"] = {"Alutor"}, ["als"] = {"Tosk Albanian"}, ["alt"] = {"Southern Altai"}, ["alu"] = {"'Are'are"}, ["alv"] = {"Atlantic-Congo languages"}, ["alw"] = {"Alaba-K’abeena", "Wanbasana"}, ["alx"] = {"Amol"}, ["aly"] = {"Alyawarr"}, ["alz"] = {"Alur"}, ["ama"] = {"Amanayé"}, ["amb"] = {"Ambo"}, ["amc"] = {"Amahuaca"}, ["ame"] = {"Yanesha'"}, ["amf"] = {"Hamer-Banna"}, ["amg"] = {"Amurdak"}, ["ami"] = {"Amis"}, ["amj"] = {"Amdang"}, ["amk"] = {"Ambai"}, ["aml"] = {"War-Jaintia"}, ["amm"] = {"Ama (Papua New Guinea)"}, ["amn"] = {"Amanab"}, ["amo"] = {"Amo"}, ["amp"] = {"Alamblak"}, ["amq"] = {"Amahai"}, ["amr"] = {"Amarakaeri"}, ["ams"] = {"Southern Amami-Oshima"}, ["amt"] = {"Amto"}, ["amu"] = {"Guerrero Amuzgo"}, ["amv"] = {"Ambelau"}, ["amw"] = {"Western Neo-Aramaic"}, ["amx"] = {"Anmatyerre"}, ["amy"] = {"Ami"}, ["amz"] = {"Atampaya"}, ["ana"] = {"Andaqui"}, ["anb"] = {"Andoa"}, ["anc"] = {"Ngas"}, ["and"] = {"Ansus"}, ["ane"] = {"Xârâcùù"}, ["anf"] = {"Animere"}, ["ang"] = {"Old English (ca. 450-1100)"}, ["anh"] = {"Nend"}, ["ani"] = {"Andi"}, ["anj"] = {"Anor"}, ["ank"] = {"Goemai"}, ["anl"] = {"Anu-Hkongso Chin"}, ["anm"] = {"Anal"}, ["ann"] = {"Obolo"}, ["ano"] = {"Andoque"}, ["anp"] = {"Angika"}, ["anq"] = {"Jarawa (India)"}, ["anr"] = {"Andh"}, ["ans"] = {"Anserma"}, ["ant"] = {"Antakarinya", "Antikarinya"}, ["anu"] = {"Anuak"}, ["anv"] = {"Denya"}, ["anw"] = {"Anaang"}, ["anx"] = {"Andra-Hus"}, ["any"] = {"Anyin"}, ["anz"] = {"Anem"}, ["aoa"] = {"Angolar"}, ["aob"] = {"Abom"}, ["aoc"] = {"Pemon"}, ["aod"] = {"Andarum"}, ["aoe"] = {"Angal Enen"}, ["aof"] = {"Bragat"}, ["aog"] = {"Angoram"}, ["aoi"] = {"Anindilyakwa"}, ["aoj"] = {"Mufian"}, ["aok"] = {"Arhö"}, ["aol"] = {"Alor"}, ["aom"] = {"Ömie"}, ["aon"] = {"Bumbita Arapesh"}, ["aor"] = {"Aore"}, ["aos"] = {"Taikat"}, ["aot"] = {"Atong (India)", "A'tong"}, ["aou"] = {"A'ou"}, ["aox"] = {"Atorada"}, ["aoz"] = {"Uab Meto"}, ["apa"] = {"Apache languages"}, ["apb"] = {"Sa'a"}, ["apc"] = {"Levantine Arabic"}, ["apd"] = {"Sudanese Arabic"}, ["ape"] = {"Bukiyip"}, ["apf"] = {"Pahanan Agta"}, ["apg"] = {"Ampanang"}, ["aph"] = {"Athpariya"}, ["api"] = {"Apiaká"}, ["apj"] = {"Jicarilla Apache"}, ["apk"] = {"Kiowa Apache"}, ["apl"] = {"Lipan Apache"}, ["apm"] = {"Mescalero-Chiricahua Apache"}, ["apn"] = {"Apinayé"}, ["apo"] = {"Ambul"}, ["app"] = {"Apma"}, ["apq"] = {"A-Pucikwar"}, ["apr"] = {"Arop-Lokep"}, ["aps"] = {"Arop-Sissano"}, ["apt"] = {"Apatani"}, ["apu"] = {"Apurinã"}, ["apv"] = {"Alapmunte"}, ["apw"] = {"Western Apache"}, ["apx"] = {"Aputai"}, ["apy"] = {"Apalaí"}, ["apz"] = {"Safeyoka"}, ["aqa"] = {"Alacalufan languages"}, ["aqc"] = {"Archi"}, ["aqd"] = {"Ampari Dogon"}, ["aqg"] = {"Arigidi"}, ["aqk"] = {"Aninka"}, ["aql"] = {"Algic languages"}, ["aqm"] = {"Atohwaim"}, ["aqn"] = {"Northern Alta"}, ["aqp"] = {"Atakapa"}, ["aqr"] = {"Arhâ"}, ["aqt"] = {"Angaité"}, ["aqz"] = {"Akuntsu"}, ["arb"] = {"Standard Arabic"}, ["arc"] = {"Official Aramaic (700-300 BCE)", "Imperial Aramaic (700-300 BCE)"}, ["ard"] = {"Arabana"}, ["are"] = {"Western Arrarnta"}, ["arh"] = {"Arhuaco"}, ["ari"] = {"Arikara"}, ["arj"] = {"Arapaso"}, ["ark"] = {"Arikapú"}, ["arl"] = {"Arabela"}, ["arn"] = {"Mapudungun", "Mapuche"}, ["aro"] = {"Araona"}, ["arp"] = {"Arapaho"}, ["arq"] = {"Algerian Arabic"}, ["arr"] = {"Karo (Brazil)"}, ["ars"] = {"Najdi Arabic"}, ["art"] = {"Artificial languages"}, ["aru"] = {"Aruá (Amazonas State)", "Arawá"}, ["arv"] = {"Arbore"}, ["arw"] = {"Arawak"}, ["arx"] = {"Aruá (Rodonia State)"}, ["ary"] = {"Moroccan Arabic"}, ["arz"] = {"Egyptian Arabic"}, ["asa"] = {"Asu (Tanzania)"}, ["asb"] = {"Assiniboine"}, ["asc"] = {"Casuarina Coast Asmat"}, ["ase"] = {"American Sign Language"}, ["asf"] = {"Auslan", "Australian Sign Language"}, ["asg"] = {"Cishingini"}, ["ash"] = {"Abishira"}, ["asi"] = {"Buruwai"}, ["asj"] = {"Sari"}, ["ask"] = {"Ashkun"}, ["asl"] = {"Asilulu"}, ["asn"] = {"Xingú Asuriní"}, ["aso"] = {"Dano"}, ["asp"] = {"Algerian Sign Language"}, ["asq"] = {"Austrian Sign Language"}, ["asr"] = {"Asuri"}, ["ass"] = {"Ipulo"}, ["ast"] = {"Asturian", "Asturleonese", "Bable", "Leonese"}, ["asu"] = {"Tocantins Asurini"}, ["asv"] = {"Asoa"}, ["asw"] = {"Australian Aborigines Sign Language"}, ["asx"] = {"Muratayak"}, ["asy"] = {"Yaosakor Asmat"}, ["asz"] = {"As"}, ["ata"] = {"Pele-Ata"}, ["atb"] = {"Zaiwa"}, ["atc"] = {"Atsahuaca"}, ["atd"] = {"Ata Manobo"}, ["ate"] = {"Atemble"}, ["atg"] = {"Ivbie North-Okpela-Arhe"}, ["ath"] = {"Athapascan languages"}, ["ati"] = {"Attié"}, ["atj"] = {"Atikamekw"}, ["atk"] = {"Ati"}, ["atl"] = {"Mt. Iraya Agta"}, ["atm"] = {"Ata"}, ["atn"] = {"Ashtiani"}, ["ato"] = {"Atong (Cameroon)"}, ["atp"] = {"Pudtol Atta"}, ["atq"] = {"Aralle-Tabulahan"}, ["atr"] = {"Waimiri-Atroari"}, ["ats"] = {"Gros Ventre"}, ["att"] = {"Pamplona Atta"}, ["atu"] = {"Reel"}, ["atv"] = {"Northern Altai"}, ["atw"] = {"Atsugewi"}, ["atx"] = {"Arutani"}, ["aty"] = {"Aneityum"}, ["atz"] = {"Arta"}, ["aua"] = {"Asumboa"}, ["aub"] = {"Alugu"}, ["auc"] = {"Waorani"}, ["aud"] = {"Anuta"}, ["auf"] = {"Arauan languages"}, ["aug"] = {"Aguna"}, ["auh"] = {"Aushi"}, ["aui"] = {"Anuki"}, ["auj"] = {"Awjilah"}, ["auk"] = {"Heyo"}, ["aul"] = {"Aulua"}, ["aum"] = {"Asu (Nigeria)"}, ["aun"] = {"Molmo One"}, ["auo"] = {"Auyokawa"}, ["aup"] = {"Makayam"}, ["auq"] = {"Anus", "Korur"}, ["aur"] = {"Aruek"}, ["aus"] = {"Australian languages"}, ["aut"] = {"Austral"}, ["auu"] = {"Auye"}, ["auw"] = {"Awyi"}, ["aux"] = {"Aurá"}, ["auy"] = {"Awiyaana"}, ["auz"] = {"Uzbeki Arabic"}, ["avb"] = {"Avau"}, ["avd"] = {"Alviri-Vidari"}, ["avi"] = {"Avikam"}, ["avk"] = {"Kotava"}, ["avl"] = {"Eastern Egyptian Bedawi Arabic"}, ["avm"] = {"Angkamuthi"}, ["avn"] = {"Avatime"}, ["avo"] = {"Agavotaguerra"}, ["avs"] = {"Aushiri"}, ["avt"] = {"Au"}, ["avu"] = {"Avokaya"}, ["avv"] = {"Avá-Canoeiro"}, ["awa"] = {"Awadhi"}, ["awb"] = {"Awa (Papua New Guinea)"}, ["awc"] = {"Cicipu"}, ["awd"] = {"Arawakan languages"}, ["awe"] = {"Awetí"}, ["awg"] = {"Anguthimri"}, ["awh"] = {"Awbono"}, ["awi"] = {"Aekyom"}, ["awk"] = {"Awabakal"}, ["awm"] = {"Arawum"}, ["awn"] = {"Awngi"}, ["awo"] = {"Awak"}, ["awr"] = {"Awera"}, ["aws"] = {"South Awyu"}, ["awt"] = {"Araweté"}, ["awu"] = {"Central Awyu"}, ["awv"] = {"Jair Awyu"}, ["aww"] = {"Awun"}, ["awx"] = {"Awara"}, ["awy"] = {"Edera Awyu"}, ["axb"] = {"Abipon"}, ["axe"] = {"Ayerrerenge"}, ["axg"] = {"Mato Grosso Arára"}, ["axk"] = {"Yaka (Central African Republic)"}, ["axl"] = {"Lower Southern Aranda"}, ["axm"] = {"Middle Armenian"}, ["axx"] = {"Xârâgurè"}, ["aya"] = {"Awar"}, ["ayb"] = {"Ayizo Gbe"}, ["ayc"] = {"Southern Aymara"}, ["ayd"] = {"Ayabadhu"}, ["aye"] = {"Ayere"}, ["ayg"] = {"Ginyanga"}, ["ayh"] = {"Hadrami Arabic"}, ["ayi"] = {"Leyigha"}, ["ayk"] = {"Akuku"}, ["ayl"] = {"Libyan Arabic"}, ["ayn"] = {"Sanaani Arabic"}, ["ayo"] = {"Ayoreo"}, ["ayp"] = {"North Mesopotamian Arabic"}, ["ayq"] = {"Ayi (Papua New Guinea)"}, ["ayr"] = {"Central Aymara"}, ["ays"] = {"Sorsogon Ayta"}, ["ayt"] = {"Magbukun Ayta"}, ["ayu"] = {"Ayu"}, ["ayz"] = {"Mai Brat"}, ["aza"] = {"Azha"}, ["azb"] = {"South Azerbaijani"}, ["azc"] = {"Uto-Aztecan languages"}, ["azd"] = {"Eastern Durango Nahuatl"}, ["azg"] = {"San Pedro Amuzgos Amuzgo"}, ["azj"] = {"North Azerbaijani"}, ["azm"] = {"Ipalapa Amuzgo"}, ["azn"] = {"Western Durango Nahuatl"}, ["azo"] = {"Awing"}, ["azt"] = {"Faire Atta"}, ["azz"] = {"Highland Puebla Nahuatl"}, ["baa"] = {"Babatana"}, ["bab"] = {"Bainouk-Gunyuño"}, ["bac"] = {"Badui"}, ["bad"] = {"Banda languages"}, ["bae"] = {"Baré"}, ["baf"] = {"Nubaca"}, ["bag"] = {"Tuki"}, ["bah"] = {"Bahamas Creole English"}, ["bai"] = {"Bamileke languages"}, ["baj"] = {"Barakai"}, ["bal"] = {"Baluchi"}, ["ban"] = {"Balinese"}, ["bao"] = {"Waimaha"}, ["bap"] = {"Bantawa"}, ["bar"] = {"Bavarian"}, ["bas"] = {"Basa (Cameroon)"}, ["bat"] = {"Baltic languages"}, ["bau"] = {"Bada (Nigeria)"}, ["bav"] = {"Vengo"}, ["baw"] = {"Bambili-Bambui"}, ["bax"] = {"Bamun"}, ["bay"] = {"Batuley"}, ["bba"] = {"Baatonum"}, ["bbb"] = {"Barai"}, ["bbc"] = {"Batak Toba"}, ["bbd"] = {"Bau"}, ["bbe"] = {"Bangba"}, ["bbf"] = {"Baibai"}, ["bbg"] = {"Barama"}, ["bbh"] = {"Bugan"}, ["bbi"] = {"Barombi"}, ["bbj"] = {"Ghomálá'"}, ["bbk"] = {"Babanki"}, ["bbl"] = {"Bats"}, ["bbm"] = {"Babango"}, ["bbn"] = {"Uneapa"}, ["bbo"] = {"Northern Bobo Madaré", "Konabéré"}, ["bbp"] = {"West Central Banda"}, ["bbq"] = {"Bamali"}, ["bbr"] = {"Girawa"}, ["bbs"] = {"Bakpinka"}, ["bbt"] = {"Mburku"}, ["bbu"] = {"Kulung (Nigeria)"}, ["bbv"] = {"Karnai"}, ["bbw"] = {"Baba"}, ["bbx"] = {"Bubia"}, ["bby"] = {"Befang"}, ["bca"] = {"Central Bai"}, ["bcb"] = {"Bainouk-Samik"}, ["bcc"] = {"Southern Balochi"}, ["bcd"] = {"North Babar"}, ["bce"] = {"Bamenyam"}, ["bcf"] = {"Bamu"}, ["bcg"] = {"Baga Pokur"}, ["bch"] = {"Bariai"}, ["bci"] = {"Baoulé"}, ["bcj"] = {"Bardi"}, ["bck"] = {"Bunuba"}, ["bcl"] = {"Central Bikol"}, ["bcm"] = {"Bannoni"}, ["bcn"] = {"Bali (Nigeria)"}, ["bco"] = {"Kaluli"}, ["bcp"] = {"Bali (Democratic Republic of Congo)"}, ["bcq"] = {"Bench"}, ["bcr"] = {"Babine"}, ["bcs"] = {"Kohumono"}, ["bct"] = {"Bendi"}, ["bcu"] = {"Awad Bing"}, ["bcv"] = {"Shoo-Minda-Nye"}, ["bcw"] = {"Bana"}, ["bcy"] = {"Bacama"}, ["bcz"] = {"Bainouk-Gunyaamolo"}, ["bda"] = {"Bayot"}, ["bdb"] = {"Basap"}, ["bdc"] = {"Emberá-Baudó"}, ["bdd"] = {"Bunama"}, ["bde"] = {"Bade"}, ["bdf"] = {"Biage"}, ["bdg"] = {"Bonggi"}, ["bdh"] = {"Baka (South Sudan)"}, ["bdi"] = {"Burun"}, ["bdj"] = {"Bai (South Sudan)", "Bai"}, ["bdk"] = {"Budukh"}, ["bdl"] = {"Indonesian Bajau"}, ["bdm"] = {"Buduma"}, ["bdn"] = {"Baldemu"}, ["bdo"] = {"Morom"}, ["bdp"] = {"Bende"}, ["bdq"] = {"Bahnar"}, ["bdr"] = {"West Coast Bajau"}, ["bds"] = {"Burunge"}, ["bdt"] = {"Bokoto"}, ["bdu"] = {"Oroko"}, ["bdv"] = {"Bodo Parja"}, ["bdw"] = {"Baham"}, ["bdx"] = {"Budong-Budong"}, ["bdy"] = {"Bandjalang"}, ["bdz"] = {"Badeshi"}, ["bea"] = {"Beaver"}, ["beb"] = {"Bebele"}, ["bec"] = {"Iceve-Maci"}, ["bed"] = {"Bedoanas"}, ["bee"] = {"Byangsi"}, ["bef"] = {"Benabena"}, ["beg"] = {"Belait"}, ["beh"] = {"Biali"}, ["bei"] = {"Bekati'"}, ["bej"] = {"Beja", "Bedawiyet"}, ["bek"] = {"Bebeli"}, ["bem"] = {"Bemba (Zambia)"}, ["beo"] = {"Beami"}, ["bep"] = {"Besoa"}, ["beq"] = {"Beembe"}, ["ber"] = {"Berber languages"}, ["bes"] = {"Besme"}, ["bet"] = {"Guiberoua Béte"}, ["beu"] = {"Blagar"}, ["bev"] = {"Daloa Bété"}, ["bew"] = {"Betawi"}, ["bex"] = {"Jur Modo"}, ["bey"] = {"Beli (Papua New Guinea)"}, ["bez"] = {"Bena (Tanzania)"}, ["bfa"] = {"Bari"}, ["bfb"] = {"Pauri Bareli"}, ["bfc"] = {"Panyi Bai", "Northern Bai"}, ["bfd"] = {"Bafut"}, ["bfe"] = {"Betaf", "Tena"}, ["bff"] = {"Bofi"}, ["bfg"] = {"Busang Kayan"}, ["bfh"] = {"Blafe"}, ["bfi"] = {"British Sign Language"}, ["bfj"] = {"Bafanji"}, ["bfk"] = {"Ban Khor Sign Language"}, ["bfl"] = {"Banda-Ndélé"}, ["bfm"] = {"Mmen"}, ["bfn"] = {"Bunak"}, ["bfo"] = {"Malba Birifor"}, ["bfp"] = {"Beba"}, ["bfq"] = {"Badaga"}, ["bfr"] = {"Bazigar"}, ["bfs"] = {"Southern Bai"}, ["bft"] = {"Balti"}, ["bfu"] = {"Gahri"}, ["bfw"] = {"Bondo"}, ["bfx"] = {"Bantayanon"}, ["bfy"] = {"Bagheli"}, ["bfz"] = {"Mahasu Pahari"}, ["bga"] = {"Gwamhi-Wuri"}, ["bgb"] = {"Bobongko"}, ["bgc"] = {"Haryanvi"}, ["bgd"] = {"Rathwi Bareli"}, ["bge"] = {"Bauria"}, ["bgf"] = {"Bangandu"}, ["bgg"] = {"Bugun"}, ["bgi"] = {"Giangan"}, ["bgj"] = {"Bangolan"}, ["bgk"] = {"Bit", "Buxinhua"}, ["bgl"] = {"Bo (Laos)"}, ["bgn"] = {"Western Balochi"}, ["bgo"] = {"Baga Koga"}, ["bgp"] = {"Eastern Balochi"}, ["bgq"] = {"Bagri"}, ["bgr"] = {"Bawm Chin"}, ["bgs"] = {"Tagabawa"}, ["bgt"] = {"Bughotu"}, ["bgu"] = {"Mbongno"}, ["bgv"] = {"Warkay-Bipim"}, ["bgw"] = {"Bhatri"}, ["bgx"] = {"Balkan Gagauz Turkish"}, ["bgy"] = {"Benggoi"}, ["bgz"] = {"Banggai"}, ["bha"] = {"Bharia"}, ["bhb"] = {"Bhili"}, ["bhc"] = {"Biga"}, ["bhd"] = {"Bhadrawahi"}, ["bhe"] = {"Bhaya"}, ["bhf"] = {"Odiai"}, ["bhg"] = {"Binandere"}, ["bhh"] = {"Bukharic"}, ["bhi"] = {"Bhilali"}, ["bhj"] = {"Bahing"}, ["bhl"] = {"Bimin"}, ["bhm"] = {"Bathari"}, ["bhn"] = {"Bohtan Neo-Aramaic"}, ["bho"] = {"Bhojpuri"}, ["bhp"] = {"Bima"}, ["bhq"] = {"Tukang Besi South"}, ["bhr"] = {"Bara Malagasy"}, ["bhs"] = {"Buwal"}, ["bht"] = {"Bhattiyali"}, ["bhu"] = {"Bhunjia"}, ["bhv"] = {"Bahau"}, ["bhw"] = {"Biak"}, ["bhx"] = {"Bhalay"}, ["bhy"] = {"Bhele"}, ["bhz"] = {"Bada (Indonesia)"}, ["bia"] = {"Badimaya"}, ["bib"] = {"Bissa", "Bisa"}, ["bid"] = {"Bidiyo"}, ["bie"] = {"Bepour"}, ["bif"] = {"Biafada"}, ["big"] = {"Biangai"}, ["bik"] = {"Bikol"}, ["bil"] = {"Bile"}, ["bim"] = {"Bimoba"}, ["bin"] = {"Bini", "Edo"}, ["bio"] = {"Nai"}, ["bip"] = {"Bila"}, ["biq"] = {"Bipi"}, ["bir"] = {"Bisorio"}, ["bit"] = {"Berinomo"}, ["biu"] = {"Biete"}, ["biv"] = {"Southern Birifor"}, ["biw"] = {"Kol (Cameroon)"}, ["bix"] = {"Bijori"}, ["biy"] = {"Birhor"}, ["biz"] = {"Baloi"}, ["bja"] = {"Budza"}, ["bjb"] = {"Banggarla"}, ["bjc"] = {"Bariji"}, ["bje"] = {"Biao-Jiao Mien"}, ["bjf"] = {"Barzani Jewish Neo-Aramaic"}, ["bjg"] = {"Bidyogo"}, ["bjh"] = {"Bahinemo"}, ["bji"] = {"Burji"}, ["bjj"] = {"Kanauji"}, ["bjk"] = {"Barok"}, ["bjl"] = {"Bulu (Papua New Guinea)"}, ["bjm"] = {"Bajelani"}, ["bjn"] = {"Banjar"}, ["bjo"] = {"Mid-Southern Banda"}, ["bjp"] = {"Fanamaket"}, ["bjr"] = {"Binumarien"}, ["bjs"] = {"Bajan"}, ["bjt"] = {"Balanta-Ganja"}, ["bju"] = {"Busuu"}, ["bjv"] = {"Bedjond"}, ["bjw"] = {"Bakwé"}, ["bjx"] = {"Banao Itneg"}, ["bjy"] = {"Bayali"}, ["bjz"] = {"Baruga"}, ["bka"] = {"Kyak"}, ["bkc"] = {"Baka (Cameroon)"}, ["bkd"] = {"Binukid", "Talaandig"}, ["bkf"] = {"Beeke"}, ["bkg"] = {"Buraka"}, ["bkh"] = {"Bakoko"}, ["bki"] = {"Baki"}, ["bkj"] = {"Pande"}, ["bkk"] = {"Brokskat"}, ["bkl"] = {"Berik"}, ["bkm"] = {"Kom (Cameroon)"}, ["bkn"] = {"Bukitan"}, ["bko"] = {"Kwa'"}, ["bkp"] = {"Boko (Democratic Republic of Congo)"}, ["bkq"] = {"Bakairí"}, ["bkr"] = {"Bakumpai"}, ["bks"] = {"Northern Sorsoganon"}, ["bkt"] = {"Boloki"}, ["bku"] = {"Buhid"}, ["bkv"] = {"Bekwarra"}, ["bkw"] = {"Bekwel"}, ["bkx"] = {"Baikeno"}, ["bky"] = {"Bokyi"}, ["bkz"] = {"Bungku"}, ["bla"] = {"Siksika"}, ["blb"] = {"Bilua"}, ["blc"] = {"Bella Coola"}, ["bld"] = {"Bolango"}, ["ble"] = {"Balanta-Kentohe"}, ["blf"] = {"Buol"}, ["blh"] = {"Kuwaa"}, ["bli"] = {"Bolia"}, ["blj"] = {"Bolongan"}, ["blk"] = {"Pa'o Karen", "Pa'O"}, ["bll"] = {"Biloxi"}, ["blm"] = {"Beli (South Sudan)"}, ["bln"] = {"Southern Catanduanes Bikol"}, ["blo"] = {"Anii"}, ["blp"] = {"Blablanga"}, ["blq"] = {"Baluan-Pam"}, ["blr"] = {"Blang"}, ["bls"] = {"Balaesang"}, ["blt"] = {"Tai Dam"}, ["blv"] = {"Kibala", "Bolo"}, ["blw"] = {"Balangao"}, ["blx"] = {"Mag-Indi Ayta"}, ["bly"] = {"Notre"}, ["blz"] = {"Balantak"}, ["bma"] = {"Lame"}, ["bmb"] = {"Bembe"}, ["bmc"] = {"Biem"}, ["bmd"] = {"Baga Manduri"}, ["bme"] = {"Limassa"}, ["bmf"] = {"Bom-Kim"}, ["bmg"] = {"Bamwe"}, ["bmh"] = {"Kein"}, ["bmi"] = {"Bagirmi"}, ["bmj"] = {"Bote-Majhi"}, ["bmk"] = {"Ghayavi"}, ["bml"] = {"Bomboli"}, ["bmm"] = {"Northern Betsimisaraka Malagasy"}, ["bmn"] = {"Bina (Papua New Guinea)"}, ["bmo"] = {"Bambalang"}, ["bmp"] = {"Bulgebi"}, ["bmq"] = {"Bomu"}, ["bmr"] = {"Muinane"}, ["bms"] = {"Bilma Kanuri"}, ["bmt"] = {"Biao Mon"}, ["bmu"] = {"Somba-Siawari"}, ["bmv"] = {"Bum"}, ["bmw"] = {"Bomwali"}, ["bmx"] = {"Baimak"}, ["bmz"] = {"Baramu"}, ["bna"] = {"Bonerate"}, ["bnb"] = {"Bookan"}, ["bnc"] = {"Bontok"}, ["bnd"] = {"Banda (Indonesia)"}, ["bne"] = {"Bintauna"}, ["bnf"] = {"Masiwang"}, ["bng"] = {"Benga"}, ["bni"] = {"Bangi"}, ["bnj"] = {"Eastern Tawbuid"}, ["bnk"] = {"Bierebo"}, ["bnl"] = {"Boon"}, ["bnm"] = {"Batanga"}, ["bnn"] = {"Bunun"}, ["bno"] = {"Bantoanon"}, ["bnp"] = {"Bola"}, ["bnq"] = {"Bantik"}, ["bnr"] = {"Butmas-Tur"}, ["bns"] = {"Bundeli"}, ["bnt"] = {"Bantu languages"}, ["bnu"] = {"Bentong"}, ["bnv"] = {"Bonerif", "Beneraf", "Edwas"}, ["bnw"] = {"Bisis"}, ["bnx"] = {"Bangubangu"}, ["bny"] = {"Bintulu"}, ["bnz"] = {"Beezen"}, ["boa"] = {"Bora"}, ["bob"] = {"Aweer"}, ["boe"] = {"Mundabli"}, ["bof"] = {"Bolon"}, ["bog"] = {"Bamako Sign Language"}, ["boh"] = {"Boma"}, ["boi"] = {"Barbareño"}, ["boj"] = {"Anjam"}, ["bok"] = {"Bonjo"}, ["bol"] = {"Bole"}, ["bom"] = {"Berom"}, ["bon"] = {"Bine"}, ["boo"] = {"Tiemacèwè Bozo"}, ["bop"] = {"Bonkiman"}, ["boq"] = {"Bogaya"}, ["bor"] = {"Borôro"}, ["bot"] = {"Bongo"}, ["bou"] = {"Bondei"}, ["bov"] = {"Tuwuli"}, ["bow"] = {"Rema"}, ["box"] = {"Buamu"}, ["boy"] = {"Bodo (Central African Republic)"}, ["boz"] = {"Tiéyaxo Bozo"}, ["bpa"] = {"Daakaka"}, ["bpc"] = {"Mbuk"}, ["bpd"] = {"Banda-Banda"}, ["bpe"] = {"Bauni"}, ["bpg"] = {"Bonggo"}, ["bph"] = {"Botlikh"}, ["bpi"] = {"Bagupi"}, ["bpj"] = {"Binji"}, ["bpk"] = {"Orowe", "'Ôrôê"}, ["bpl"] = {"Broome Pearling Lugger Pidgin"}, ["bpm"] = {"Biyom"}, ["bpn"] = {"Dzao Min"}, ["bpo"] = {"Anasi"}, ["bpp"] = {"Kaure"}, ["bpq"] = {"Banda Malay"}, ["bpr"] = {"Koronadal Blaan"}, ["bps"] = {"Sarangani Blaan"}, ["bpt"] = {"Barrow Point"}, ["bpu"] = {"Bongu"}, ["bpv"] = {"Bian Marind"}, ["bpw"] = {"Bo (Papua New Guinea)"}, ["bpx"] = {"Palya Bareli"}, ["bpy"] = {"Bishnupriya"}, ["bpz"] = {"Bilba"}, ["bqa"] = {"Tchumbuli"}, ["bqb"] = {"Bagusa"}, ["bqc"] = {"Boko (Benin)", "Boo"}, ["bqd"] = {"Bung"}, ["bqf"] = {"Baga Kaloum"}, ["bqg"] = {"Bago-Kusuntu"}, ["bqh"] = {"Baima"}, ["bqi"] = {"Bakhtiari"}, ["bqj"] = {"Bandial"}, ["bqk"] = {"Banda-Mbrès"}, ["bql"] = {"Bilakura"}, ["bqm"] = {"Wumboko"}, ["bqn"] = {"Bulgarian Sign Language"}, ["bqo"] = {"Balo"}, ["bqp"] = {"Busa"}, ["bqq"] = {"Biritai"}, ["bqr"] = {"Burusu"}, ["bqs"] = {"Bosngun"}, ["bqt"] = {"Bamukumbit"}, ["bqu"] = {"Boguru"}, ["bqv"] = {"Koro Wachi", "Begbere-Ejar"}, ["bqw"] = {"Buru (Nigeria)"}, ["bqx"] = {"Baangi"}, ["bqy"] = {"Bengkala Sign Language"}, ["bqz"] = {"Bakaka"}, ["bra"] = {"Braj"}, ["brb"] = {"Brao", "Lave"}, ["brc"] = {"Berbice Creole Dutch"}, ["brd"] = {"Baraamu"}, ["brf"] = {"Bira"}, ["brg"] = {"Baure"}, ["brh"] = {"Brahui"}, ["bri"] = {"Mokpwe"}, ["brj"] = {"Bieria"}, ["brk"] = {"Birked"}, ["brl"] = {"Birwa"}, ["brm"] = {"Barambu"}, ["brn"] = {"Boruca"}, ["bro"] = {"Brokkat"}, ["brp"] = {"Barapasi"}, ["brq"] = {"Breri"}, ["brr"] = {"Birao"}, ["brs"] = {"Baras"}, ["brt"] = {"Bitare"}, ["bru"] = {"Eastern Bru"}, ["brv"] = {"Western Bru"}, ["brw"] = {"Bellari"}, ["brx"] = {"Bodo (India)"}, ["bry"] = {"Burui"}, ["brz"] = {"Bilbil"}, ["bsa"] = {"Abinomn"}, ["bsb"] = {"Brunei Bisaya"}, ["bsc"] = {"Bassari", "Oniyan"}, ["bse"] = {"Wushi"}, ["bsf"] = {"Bauchi"}, ["bsg"] = {"Bashkardi"}, ["bsh"] = {"Kati"}, ["bsi"] = {"Bassossi"}, ["bsj"] = {"Bangwinji"}, ["bsk"] = {"Burushaski"}, ["bsl"] = {"Basa-Gumna"}, ["bsm"] = {"Busami"}, ["bsn"] = {"Barasana-Eduria"}, ["bso"] = {"Buso"}, ["bsp"] = {"Baga Sitemu"}, ["bsq"] = {"Bassa"}, ["bsr"] = {"Bassa-Kontagora"}, ["bss"] = {"Akoose"}, ["bst"] = {"Basketo"}, ["bsu"] = {"Bahonsuai"}, ["bsv"] = {"Baga Sobané"}, ["bsw"] = {"Baiso"}, ["bsx"] = {"Yangkam"}, ["bsy"] = {"Sabah Bisaya"}, ["bta"] = {"Bata"}, ["btc"] = {"Bati (Cameroon)"}, ["btd"] = {"Batak Dairi"}, ["bte"] = {"Gamo-Ningi"}, ["btf"] = {"Birgit"}, ["btg"] = {"Gagnoa Bété"}, ["bth"] = {"Biatah Bidayuh"}, ["bti"] = {"Burate"}, ["btj"] = {"Bacanese Malay"}, ["btk"] = {"Batak languages"}, ["btm"] = {"Batak Mandailing"}, ["btn"] = {"Ratagnon"}, ["bto"] = {"Rinconada Bikol"}, ["btp"] = {"Budibud"}, ["btq"] = {"Batek"}, ["btr"] = {"Baetora"}, ["bts"] = {"Batak Simalungun"}, ["btt"] = {"Bete-Bendi"}, ["btu"] = {"Batu"}, ["btv"] = {"Bateri"}, ["btw"] = {"Butuanon"}, ["btx"] = {"Batak Karo"}, ["bty"] = {"Bobot"}, ["btz"] = {"Batak Alas-Kluet"}, ["bua"] = {"Buriat"}, ["bub"] = {"Bua"}, ["buc"] = {"Bushi"}, ["bud"] = {"Ntcham"}, ["bue"] = {"Beothuk"}, ["buf"] = {"Bushoong"}, ["bug"] = {"Buginese"}, ["buh"] = {"Younuo Bunu"}, ["bui"] = {"Bongili"}, ["buj"] = {"Basa-Gurmana"}, ["buk"] = {"Bugawac"}, ["bum"] = {"Bulu (Cameroon)"}, ["bun"] = {"Sherbro"}, ["buo"] = {"Terei"}, ["bup"] = {"Busoa"}, ["buq"] = {"Brem"}, ["bus"] = {"Bokobaru"}, ["but"] = {"Bungain"}, ["buu"] = {"Budu"}, ["buv"] = {"Bun"}, ["buw"] = {"Bubi"}, ["bux"] = {"Boghom"}, ["buy"] = {"Bullom So"}, ["buz"] = {"Bukwen"}, ["bva"] = {"Barein"}, ["bvb"] = {"Bube"}, ["bvc"] = {"Baelelea"}, ["bvd"] = {"Baeggu"}, ["bve"] = {"Berau Malay"}, ["bvf"] = {"Boor"}, ["bvg"] = {"Bonkeng"}, ["bvh"] = {"Bure"}, ["bvi"] = {"Belanda Viri"}, ["bvj"] = {"Baan"}, ["bvk"] = {"Bukat"}, ["bvl"] = {"Bolivian Sign Language"}, ["bvm"] = {"Bamunka"}, ["bvn"] = {"Buna"}, ["bvo"] = {"Bolgo"}, ["bvp"] = {"Bumang"}, ["bvq"] = {"Birri"}, ["bvr"] = {"Burarra"}, ["bvt"] = {"Bati (Indonesia)"}, ["bvu"] = {"Bukit Malay"}, ["bvv"] = {"Baniva"}, ["bvw"] = {"Boga"}, ["bvx"] = {"Dibole"}, ["bvy"] = {"Baybayanon"}, ["bvz"] = {"Bauzi"}, ["bwa"] = {"Bwatoo"}, ["bwb"] = {"Namosi-Naitasiri-Serua"}, ["bwc"] = {"Bwile"}, ["bwd"] = {"Bwaidoka"}, ["bwe"] = {"Bwe Karen"}, ["bwf"] = {"Boselewa"}, ["bwg"] = {"Barwe"}, ["bwh"] = {"Bishuo"}, ["bwi"] = {"Baniwa"}, ["bwj"] = {"Láá Láá Bwamu"}, ["bwk"] = {"Bauwaki"}, ["bwl"] = {"Bwela"}, ["bwm"] = {"Biwat"}, ["bwn"] = {"Wunai Bunu"}, ["bwo"] = {"Boro (Ethiopia)", "Borna (Ethiopia)"}, ["bwp"] = {"Mandobo Bawah"}, ["bwq"] = {"Southern Bobo Madaré"}, ["bwr"] = {"Bura-Pabir"}, ["bws"] = {"Bomboma"}, ["bwt"] = {"Bafaw-Balong"}, ["bwu"] = {"Buli (Ghana)"}, ["bww"] = {"Bwa"}, ["bwx"] = {"Bu-Nao Bunu"}, ["bwy"] = {"Cwi Bwamu"}, ["bwz"] = {"Bwisi"}, ["bxa"] = {"Tairaha"}, ["bxb"] = {"Belanda Bor"}, ["bxc"] = {"Molengue"}, ["bxd"] = {"Pela"}, ["bxe"] = {"Birale"}, ["bxf"] = {"Bilur", "Minigir"}, ["bxg"] = {"Bangala"}, ["bxh"] = {"Buhutu"}, ["bxi"] = {"Pirlatapa"}, ["bxj"] = {"Bayungu"}, ["bxk"] = {"Bukusu", "Lubukusu"}, ["bxl"] = {"Jalkunan"}, ["bxm"] = {"Mongolia Buriat"}, ["bxn"] = {"Burduna"}, ["bxo"] = {"Barikanchi"}, ["bxp"] = {"Bebil"}, ["bxq"] = {"Beele"}, ["bxr"] = {"Russia Buriat"}, ["bxs"] = {"Busam"}, ["bxu"] = {"China Buriat"}, ["bxv"] = {"Berakou"}, ["bxw"] = {"Bankagooma"}, ["bxz"] = {"Binahari"}, ["bya"] = {"Batak"}, ["byb"] = {"Bikya"}, ["byc"] = {"Ubaghara"}, ["byd"] = {"Benyadu'"}, ["bye"] = {"Pouye"}, ["byf"] = {"Bete"}, ["byg"] = {"Baygo"}, ["byh"] = {"Bhujel"}, ["byi"] = {"Buyu"}, ["byj"] = {"Bina (Nigeria)"}, ["byk"] = {"Biao"}, ["byl"] = {"Bayono"}, ["bym"] = {"Bidjara"}, ["byn"] = {"Bilin", "Blin"}, ["byo"] = {"Biyo"}, ["byp"] = {"Bumaji"}, ["byq"] = {"Basay"}, ["byr"] = {"Baruya", "Yipma"}, ["bys"] = {"Burak"}, ["byt"] = {"Berti"}, ["byv"] = {"Medumba"}, ["byw"] = {"Belhariya"}, ["byx"] = {"Qaqet"}, ["byz"] = {"Banaro"}, ["bza"] = {"Bandi"}, ["bzb"] = {"Andio"}, ["bzc"] = {"Southern Betsimisaraka Malagasy"}, ["bzd"] = {"Bribri"}, ["bze"] = {"Jenaama Bozo"}, ["bzf"] = {"Boikin"}, ["bzg"] = {"Babuza"}, ["bzh"] = {"Mapos Buang"}, ["bzi"] = {"Bisu"}, ["bzj"] = {"Belize Kriol English"}, ["bzk"] = {"Nicaragua Creole English"}, ["bzl"] = {"Boano (Sulawesi)"}, ["bzm"] = {"Bolondo"}, ["bzn"] = {"Boano (Maluku)"}, ["bzo"] = {"Bozaba"}, ["bzp"] = {"Kemberano"}, ["bzq"] = {"Buli (Indonesia)"}, ["bzr"] = {"Biri"}, ["bzs"] = {"Brazilian Sign Language"}, ["bzt"] = {"Brithenig"}, ["bzu"] = {"Burmeso"}, ["bzv"] = {"Naami"}, ["bzw"] = {"Basa (Nigeria)"}, ["bzx"] = {"Kɛlɛngaxo Bozo"}, ["bzy"] = {"Obanliku"}, ["bzz"] = {"Evant"}, ["caa"] = {"Chortí"}, ["cab"] = {"Garifuna"}, ["cac"] = {"Chuj"}, ["cad"] = {"Caddo"}, ["cae"] = {"Lehar", "Laalaa"}, ["caf"] = {"Southern Carrier"}, ["cag"] = {"Nivaclé"}, ["cah"] = {"Cahuarano"}, ["cai"] = {"Central American Indian languages"}, ["caj"] = {"Chané"}, ["cak"] = {"Kaqchikel", "Cakchiquel"}, ["cal"] = {"Carolinian"}, ["cam"] = {"Cemuhî"}, ["can"] = {"Chambri"}, ["cao"] = {"Chácobo"}, ["cap"] = {"Chipaya"}, ["caq"] = {"Car Nicobarese"}, ["car"] = {"Galibi Carib"}, ["cas"] = {"Tsimané"}, ["cau"] = {"Caucasian languages"}, ["cav"] = {"Cavineña"}, ["caw"] = {"Callawalla"}, ["cax"] = {"Chiquitano"}, ["cay"] = {"Cayuga"}, ["caz"] = {"Canichana"}, ["cba"] = {"Chibchan languages"}, ["cbb"] = {"Cabiyarí"}, ["cbc"] = {"Carapana"}, ["cbd"] = {"Carijona"}, ["cbg"] = {"Chimila"}, ["cbi"] = {"Chachi"}, ["cbj"] = {"Ede Cabe"}, ["cbk"] = {"Chavacano"}, ["cbl"] = {"Bualkhaw Chin"}, ["cbn"] = {"Nyahkur"}, ["cbo"] = {"Izora"}, ["cbq"] = {"Tsucuba", "Cuba"}, ["cbr"] = {"Cashibo-Cacataibo"}, ["cbs"] = {"Cashinahua"}, ["cbt"] = {"Chayahuita"}, ["cbu"] = {"Candoshi-Shapra"}, ["cbv"] = {"Cacua"}, ["cbw"] = {"Kinabalian"}, ["cby"] = {"Carabayo"}, ["ccc"] = {"Chamicuro"}, ["ccd"] = {"Cafundo Creole"}, ["cce"] = {"Chopi"}, ["ccg"] = {"Samba Daka"}, ["cch"] = {"Atsam"}, ["ccj"] = {"Kasanga"}, ["ccl"] = {"Cutchi-Swahili"}, ["ccm"] = {"Malaccan Creole Malay"}, ["ccn"] = {"North Caucasian languages"}, ["cco"] = {"Comaltepec Chinantec"}, ["ccp"] = {"Chakma"}, ["ccr"] = {"Cacaopera"}, ["ccs"] = {"South Caucasian languages"}, ["cda"] = {"Choni"}, ["cdc"] = {"Chadic languages"}, ["cdd"] = {"Caddoan languages"}, ["cde"] = {"Chenchu"}, ["cdf"] = {"Chiru"}, ["cdh"] = {"Chambeali"}, ["cdi"] = {"Chodri"}, ["cdj"] = {"Churahi"}, ["cdm"] = {"Chepang"}, ["cdn"] = {"Chaudangsi"}, ["cdo"] = {"Min Dong Chinese"}, ["cdr"] = {"Cinda-Regi-Tiyal"}, ["cds"] = {"Chadian Sign Language"}, ["cdy"] = {"Chadong"}, ["cdz"] = {"Koda"}, ["cea"] = {"Lower Chehalis"}, ["ceb"] = {"Cebuano"}, ["ceg"] = {"Chamacoco"}, ["cek"] = {"Eastern Khumi Chin"}, ["cel"] = {"Celtic languages"}, ["cen"] = {"Cen"}, ["cet"] = {"Centúúm"}, ["cey"] = {"Ekai Chin"}, ["cfa"] = {"Dijim-Bwilim"}, ["cfd"] = {"Cara"}, ["cfg"] = {"Como Karim"}, ["cfm"] = {"Falam Chin"}, ["cga"] = {"Changriwa"}, ["cgc"] = {"Kagayanen"}, ["cgg"] = {"Chiga"}, ["cgk"] = {"Chocangacakha"}, ["chb"] = {"Chibcha"}, ["chc"] = {"Catawba"}, ["chd"] = {"Highland Oaxaca Chontal"}, ["chf"] = {"Tabasco Chontal"}, ["chg"] = {"Chagatai"}, ["chh"] = {"Chinook"}, ["chj"] = {"Ojitlán Chinantec"}, ["chk"] = {"Chuukese"}, ["chl"] = {"Cahuilla"}, ["chm"] = {"Mari (Russia)"}, ["chn"] = {"Chinook jargon"}, ["cho"] = {"Choctaw"}, ["chp"] = {"Chipewyan", "Dene Suline"}, ["chq"] = {"Quiotepec Chinantec"}, ["chr"] = {"Cherokee"}, ["cht"] = {"Cholón"}, ["chw"] = {"Chuwabu"}, ["chx"] = {"Chantyal"}, ["chy"] = {"Cheyenne"}, ["chz"] = {"Ozumacín Chinantec"}, ["cia"] = {"Cia-Cia"}, ["cib"] = {"Ci Gbe"}, ["cic"] = {"Chickasaw"}, ["cid"] = {"Chimariko"}, ["cie"] = {"Cineni"}, ["cih"] = {"Chinali"}, ["cik"] = {"Chitkuli Kinnauri"}, ["cim"] = {"Cimbrian"}, ["cin"] = {"Cinta Larga"}, ["cip"] = {"Chiapanec"}, ["cir"] = {"Tiri", "Haméa", "Méa"}, ["ciw"] = {"Chippewa"}, ["ciy"] = {"Chaima"}, ["cja"] = {"Western Cham"}, ["cje"] = {"Chru"}, ["cjh"] = {"Upper Chehalis"}, ["cji"] = {"Chamalal"}, ["cjk"] = {"Chokwe"}, ["cjm"] = {"Eastern Cham"}, ["cjn"] = {"Chenapian"}, ["cjo"] = {"Ashéninka Pajonal"}, ["cjp"] = {"Cabécar"}, ["cjs"] = {"Shor"}, ["cjv"] = {"Chuave"}, ["cjy"] = {"Jinyu Chinese"}, ["ckb"] = {"Central Kurdish"}, ["ckh"] = {"Chak"}, ["ckl"] = {"Cibak"}, ["ckm"] = {"Chakavian"}, ["ckn"] = {"Kaang Chin"}, ["cko"] = {"Anufo"}, ["ckq"] = {"Kajakse"}, ["ckr"] = {"Kairak"}, ["cks"] = {"Tayo"}, ["ckt"] = {"Chukot"}, ["cku"] = {"Koasati"}, ["ckv"] = {"Kavalan"}, ["ckx"] = {"Caka"}, ["cky"] = {"Cakfem-Mushere"}, ["ckz"] = {"Cakchiquel-Quiché Mixed Language"}, ["cla"] = {"Ron"}, ["clc"] = {"Chilcotin"}, ["cld"] = {"Chaldean Neo-Aramaic"}, ["cle"] = {"Lealao Chinantec"}, ["clh"] = {"Chilisso"}, ["cli"] = {"Chakali"}, ["clj"] = {"Laitu Chin"}, ["clk"] = {"Idu-Mishmi"}, ["cll"] = {"Chala"}, ["clm"] = {"Clallam"}, ["clo"] = {"Lowland Oaxaca Chontal"}, ["clt"] = {"Lautu Chin"}, ["clu"] = {"Caluyanun"}, ["clw"] = {"Chulym"}, ["cly"] = {"Eastern Highland Chatino"}, ["cma"] = {"Maa"}, ["cmc"] = {"Chamic languages"}, ["cme"] = {"Cerma"}, ["cmg"] = {"Classical Mongolian"}, ["cmi"] = {"Emberá-Chamí"}, ["cml"] = {"Campalagian"}, ["cmm"] = {"Michigamea"}, ["cmn"] = {"Mandarin Chinese"}, ["cmo"] = {"Central Mnong"}, ["cmr"] = {"Mro-Khimi Chin"}, ["cms"] = {"Messapic"}, ["cmt"] = {"Camtho"}, ["cna"] = {"Changthang"}, ["cnb"] = {"Chinbon Chin"}, ["cnc"] = {"Côông"}, ["cng"] = {"Northern Qiang"}, ["cnh"] = {"Hakha Chin", "Haka Chin"}, ["cni"] = {"Asháninka"}, ["cnk"] = {"Khumi Chin"}, ["cnl"] = {"Lalana Chinantec"}, ["cno"] = {"Con"}, ["cnp"] = {"Northern Ping Chinese", "Northern Pinghua"}, ["cnq"] = {"Chung"}, ["cnr"] = {"Montenegrin"}, ["cns"] = {"Central Asmat"}, ["cnt"] = {"Tepetotutla Chinantec"}, ["cnu"] = {"Chenoua"}, ["cnw"] = {"Ngawn Chin"}, ["cnx"] = {"Middle Cornish"}, ["coa"] = {"Cocos Islands Malay"}, ["cob"] = {"Chicomuceltec"}, ["coc"] = {"Cocopa"}, ["cod"] = {"Cocama-Cocamilla"}, ["coe"] = {"Koreguaje"}, ["cof"] = {"Colorado"}, ["cog"] = {"Chong"}, ["coh"] = {"Chonyi-Dzihana-Kauma", "Chichonyi-Chidzihana-Chikauma"}, ["coj"] = {"Cochimi"}, ["cok"] = {"Santa Teresa Cora"}, ["col"] = {"Columbia-Wenatchi"}, ["com"] = {"Comanche"}, ["con"] = {"Cofán"}, ["coo"] = {"Comox"}, ["cop"] = {"Coptic"}, ["coq"] = {"Coquille"}, ["cot"] = {"Caquinte"}, ["cou"] = {"Wamey"}, ["cov"] = {"Cao Miao"}, ["cow"] = {"Cowlitz"}, ["cox"] = {"Nanti"}, ["coz"] = {"Chochotec"}, ["cpa"] = {"Palantla Chinantec"}, ["cpb"] = {"Ucayali-Yurúa Ashéninka"}, ["cpc"] = {"Ajyíninka Apurucayali"}, ["cpe"] = {"English-based creoles and pidgins"}, ["cpf"] = {"French-based creoles and pidgins"}, ["cpg"] = {"Cappadocian Greek"}, ["cpi"] = {"Chinese Pidgin English"}, ["cpn"] = {"Cherepon"}, ["cpo"] = {"Kpeego"}, ["cpp"] = {"Portuguese-based creoles and pidgins"}, ["cps"] = {"Capiznon"}, ["cpu"] = {"Pichis Ashéninka"}, ["cpx"] = {"Pu-Xian Chinese"}, ["cpy"] = {"South Ucayali Ashéninka"}, ["cqd"] = {"Chuanqiandian Cluster Miao"}, ["cra"] = {"Chara"}, ["crb"] = {"Island Carib"}, ["crc"] = {"Lonwolwol"}, ["crd"] = {"Coeur d'Alene"}, ["crf"] = {"Caramanta"}, ["crg"] = {"Michif"}, ["crh"] = {"Crimean Tatar", "Crimean Turkish"}, ["cri"] = {"Sãotomense"}, ["crj"] = {"Southern East Cree"}, ["crk"] = {"Plains Cree"}, ["crl"] = {"Northern East Cree"}, ["crm"] = {"Moose Cree"}, ["crn"] = {"El Nayar Cora"}, ["cro"] = {"Crow"}, ["crp"] = {"Creoles and pidgins"}, ["crq"] = {"Iyo'wujwa Chorote"}, ["crr"] = {"Carolina Algonquian"}, ["crs"] = {"Seselwa Creole French"}, ["crt"] = {"Iyojwa'ja Chorote"}, ["crv"] = {"Chaura"}, ["crw"] = {"Chrau"}, ["crx"] = {"Carrier"}, ["cry"] = {"Cori"}, ["crz"] = {"Cruzeño"}, ["csa"] = {"Chiltepec Chinantec"}, ["csb"] = {"Kashubian"}, ["csc"] = {"Catalan Sign Language", "Lengua de señas catalana", "Llengua de Signes Catalana"}, ["csd"] = {"Chiangmai Sign Language"}, ["cse"] = {"Czech Sign Language"}, ["csf"] = {"Cuba Sign Language"}, ["csg"] = {"Chilean Sign Language"}, ["csh"] = {"Asho Chin"}, ["csi"] = {"Coast Miwok"}, ["csj"] = {"Songlai Chin"}, ["csk"] = {"Jola-Kasa"}, ["csl"] = {"Chinese Sign Language"}, ["csm"] = {"Central Sierra Miwok"}, ["csn"] = {"Colombian Sign Language"}, ["cso"] = {"Sochiapam Chinantec", "Sochiapan Chinantec"}, ["csp"] = {"Southern Ping Chinese", "Southern Pinghua"}, ["csq"] = {"Croatia Sign Language"}, ["csr"] = {"Costa Rican Sign Language"}, ["css"] = {"Southern Ohlone"}, ["cst"] = {"Northern Ohlone"}, ["csu"] = {"Central Sudanic languages"}, ["csv"] = {"Sumtu Chin"}, ["csw"] = {"Swampy Cree"}, ["csx"] = {"Cambodian Sign Language"}, ["csy"] = {"Siyin Chin"}, ["csz"] = {"Coos"}, ["cta"] = {"Tataltepec Chatino"}, ["ctc"] = {"Chetco"}, ["ctd"] = {"Tedim Chin"}, ["cte"] = {"Tepinapa Chinantec"}, ["ctg"] = {"Chittagonian"}, ["cth"] = {"Thaiphum Chin"}, ["ctl"] = {"Tlacoatzintepec Chinantec"}, ["ctm"] = {"Chitimacha"}, ["ctn"] = {"Chhintange"}, ["cto"] = {"Emberá-Catío"}, ["ctp"] = {"Western Highland Chatino"}, ["cts"] = {"Northern Catanduanes Bikol"}, ["ctt"] = {"Wayanad Chetti"}, ["ctu"] = {"Chol"}, ["cty"] = {"Moundadan Chetty"}, ["ctz"] = {"Zacatepec Chatino"}, ["cua"] = {"Cua"}, ["cub"] = {"Cubeo"}, ["cuc"] = {"Usila Chinantec"}, ["cuh"] = {"Chuka", "Gichuka"}, ["cui"] = {"Cuiba"}, ["cuj"] = {"Mashco Piro"}, ["cuk"] = {"San Blas Kuna"}, ["cul"] = {"Culina", "Kulina"}, ["cuo"] = {"Cumanagoto"}, ["cup"] = {"Cupeño"}, ["cuq"] = {"Cun"}, ["cur"] = {"Chhulung"}, ["cus"] = {"Cushitic languages"}, ["cut"] = {"Teutila Cuicatec"}, ["cuu"] = {"Tai Ya"}, ["cuv"] = {"Cuvok"}, ["cuw"] = {"Chukwa"}, ["cux"] = {"Tepeuxila Cuicatec"}, ["cuy"] = {"Cuitlatec"}, ["cvg"] = {"Chug"}, ["cvn"] = {"Valle Nacional Chinantec"}, ["cwa"] = {"Kabwa"}, ["cwb"] = {"Maindo"}, ["cwd"] = {"Woods Cree"}, ["cwe"] = {"Kwere"}, ["cwg"] = {"Chewong", "Cheq Wong"}, ["cwt"] = {"Kuwaataay"}, ["cxh"] = {"Cha'ari"}, ["cya"] = {"Nopala Chatino"}, ["cyb"] = {"Cayubaba"}, ["cyo"] = {"Cuyonon"}, ["czh"] = {"Huizhou Chinese"}, ["czk"] = {"Knaanic"}, ["czn"] = {"Zenzontepec Chatino"}, ["czo"] = {"Min Zhong Chinese"}, ["czt"] = {"Zotung Chin"}, ["daa"] = {"Dangaléat"}, ["dac"] = {"Dambi"}, ["dad"] = {"Marik"}, ["dae"] = {"Duupa"}, ["dag"] = {"Dagbani"}, ["dah"] = {"Gwahatike"}, ["dai"] = {"Day"}, ["daj"] = {"Dar Fur Daju"}, ["dak"] = {"Dakota"}, ["dal"] = {"Dahalo"}, ["dam"] = {"Damakawa"}, ["dao"] = {"Daai Chin"}, ["daq"] = {"Dandami Maria"}, ["dar"] = {"Dargwa"}, ["das"] = {"Daho-Doo"}, ["dau"] = {"Dar Sila Daju"}, ["dav"] = {"Taita", "Dawida"}, ["daw"] = {"Davawenyo"}, ["dax"] = {"Dayi"}, ["day"] = {"Land Dayak languages"}, ["daz"] = {"Dao"}, ["dba"] = {"Bangime"}, ["dbb"] = {"Deno"}, ["dbd"] = {"Dadiya"}, ["dbe"] = {"Dabe"}, ["dbf"] = {"Edopi"}, ["dbg"] = {"Dogul Dom Dogon"}, ["dbi"] = {"Doka"}, ["dbj"] = {"Ida'an"}, ["dbl"] = {"Dyirbal"}, ["dbm"] = {"Duguri"}, ["dbn"] = {"Duriankere"}, ["dbo"] = {"Dulbu"}, ["dbp"] = {"Duwai"}, ["dbq"] = {"Daba"}, ["dbr"] = {"Dabarre"}, ["dbt"] = {"Ben Tey Dogon"}, ["dbu"] = {"Bondum Dom Dogon"}, ["dbv"] = {"Dungu"}, ["dbw"] = {"Bankan Tey Dogon"}, ["dby"] = {"Dibiyaso"}, ["dcc"] = {"Deccan"}, ["dcr"] = {"Negerhollands"}, ["dda"] = {"Dadi Dadi"}, ["ddd"] = {"Dongotono"}, ["dde"] = {"Doondo"}, ["ddg"] = {"Fataluku"}, ["ddi"] = {"West Goodenough"}, ["ddj"] = {"Jaru"}, ["ddn"] = {"Dendi (Benin)"}, ["ddo"] = {"Dido"}, ["ddr"] = {"Dhudhuroa"}, ["dds"] = {"Donno So Dogon"}, ["ddw"] = {"Dawera-Daweloor"}, ["dec"] = {"Dagik"}, ["ded"] = {"Dedua"}, ["dee"] = {"Dewoin"}, ["def"] = {"Dezfuli"}, ["deg"] = {"Degema"}, ["deh"] = {"Dehwari"}, ["dei"] = {"Demisa"}, ["dek"] = {"Dek"}, ["del"] = {"Delaware"}, ["dem"] = {"Dem"}, ["den"] = {"Slave (Athapascan)"}, ["dep"] = {"Pidgin Delaware"}, ["deq"] = {"Dendi (Central African Republic)"}, ["der"] = {"Deori"}, ["des"] = {"Desano"}, ["dev"] = {"Domung"}, ["dez"] = {"Dengese"}, ["dga"] = {"Southern Dagaare"}, ["dgb"] = {"Bunoge Dogon"}, ["dgc"] = {"Casiguran Dumagat Agta"}, ["dgd"] = {"Dagaari Dioula"}, ["dge"] = {"Degenan"}, ["dgg"] = {"Doga"}, ["dgh"] = {"Dghwede"}, ["dgi"] = {"Northern Dagara"}, ["dgk"] = {"Dagba"}, ["dgl"] = {"Andaandi", "Dongolawi"}, ["dgn"] = {"Dagoman"}, ["dgo"] = {"Dogri (individual language)"}, ["dgr"] = {"Dogrib", "Tłı̨chǫ"}, ["dgs"] = {"Dogoso"}, ["dgt"] = {"Ndra'ngith"}, ["dgw"] = {"Daungwurrung"}, ["dgx"] = {"Doghoro"}, ["dgz"] = {"Daga"}, ["dhd"] = {"Dhundari"}, ["dhg"] = {"Dhangu-Djangu", "Dhangu", "Djangu"}, ["dhi"] = {"Dhimal"}, ["dhl"] = {"Dhalandji"}, ["dhm"] = {"Zemba"}, ["dhn"] = {"Dhanki"}, ["dho"] = {"Dhodia"}, ["dhr"] = {"Dhargari"}, ["dhs"] = {"Dhaiso"}, ["dhu"] = {"Dhurga"}, ["dhv"] = {"Dehu", "Drehu"}, ["dhw"] = {"Dhanwar (Nepal)"}, ["dhx"] = {"Dhungaloo"}, ["dia"] = {"Dia"}, ["dib"] = {"South Central Dinka"}, ["dic"] = {"Lakota Dida"}, ["did"] = {"Didinga"}, ["dif"] = {"Dieri", "Diyari"}, ["dig"] = {"Digo", "Chidigo"}, ["dih"] = {"Kumiai"}, ["dii"] = {"Dimbong"}, ["dij"] = {"Dai"}, ["dik"] = {"Southwestern Dinka"}, ["dil"] = {"Dilling"}, ["dim"] = {"Dime"}, ["din"] = {"Dinka"}, ["dio"] = {"Dibo"}, ["dip"] = {"Northeastern Dinka"}, ["diq"] = {"Dimli (individual language)"}, ["dir"] = {"Dirim"}, ["dis"] = {"Dimasa"}, ["diu"] = {"Diriku"}, ["diw"] = {"Northwestern Dinka"}, ["dix"] = {"Dixon Reef"}, ["diy"] = {"Diuwe"}, ["diz"] = {"Ding"}, ["dja"] = {"Djadjawurrung"}, ["djb"] = {"Djinba"}, ["djc"] = {"Dar Daju Daju"}, ["djd"] = {"Djamindjung", "Ngaliwurru"}, ["dje"] = {"Zarma"}, ["djf"] = {"Djangun"}, ["dji"] = {"Djinang"}, ["djj"] = {"Djeebbana"}, ["djk"] = {"Eastern Maroon Creole", "Businenge Tongo", "Nenge"}, ["djm"] = {"Jamsay Dogon"}, ["djn"] = {"Jawoyn", "Djauan"}, ["djo"] = {"Jangkang"}, ["djr"] = {"Djambarrpuyngu"}, ["dju"] = {"Kapriman"}, ["djw"] = {"Djawi"}, ["dka"] = {"Dakpakha"}, ["dkg"] = {"Kadung"}, ["dkk"] = {"Dakka"}, ["dkr"] = {"Kuijau"}, ["dks"] = {"Southeastern Dinka"}, ["dkx"] = {"Mazagway"}, ["dlg"] = {"Dolgan"}, ["dlk"] = {"Dahalik"}, ["dlm"] = {"Dalmatian"}, ["dln"] = {"Darlong"}, ["dma"] = {"Duma"}, ["dmb"] = {"Mombo Dogon"}, ["dmc"] = {"Gavak"}, ["dmd"] = {"Madhi Madhi"}, ["dme"] = {"Dugwor"}, ["dmf"] = {"Medefaidrin"}, ["dmg"] = {"Upper Kinabatangan"}, ["dmk"] = {"Domaaki"}, ["dml"] = {"Dameli"}, ["dmm"] = {"Dama"}, ["dmn"] = {"Mande languages"}, ["dmo"] = {"Kemedzung"}, ["dmr"] = {"East Damar"}, ["dms"] = {"Dampelas"}, ["dmu"] = {"Dubu", "Tebi"}, ["dmv"] = {"Dumpas"}, ["dmw"] = {"Mudburra"}, ["dmx"] = {"Dema"}, ["dmy"] = {"Demta", "Sowari"}, ["dna"] = {"Upper Grand Valley Dani"}, ["dnd"] = {"Daonda"}, ["dne"] = {"Ndendeule"}, ["dng"] = {"Dungan"}, ["dni"] = {"Lower Grand Valley Dani"}, ["dnj"] = {"Dan"}, ["dnk"] = {"Dengka"}, ["dnn"] = {"Dzùùngoo"}, ["dno"] = {"Ndrulo", "Northern Lendu"}, ["dnr"] = {"Danaru"}, ["dnt"] = {"Mid Grand Valley Dani"}, ["dnu"] = {"Danau"}, ["dnv"] = {"Danu"}, ["dnw"] = {"Western Dani"}, ["dny"] = {"Dení"}, ["doa"] = {"Dom"}, ["dob"] = {"Dobu"}, ["doc"] = {"Northern Dong"}, ["doe"] = {"Doe"}, ["dof"] = {"Domu"}, ["doh"] = {"Dong"}, ["doi"] = {"Dogri (macrolanguage)"}, ["dok"] = {"Dondo"}, ["dol"] = {"Doso"}, ["don"] = {"Toura (Papua New Guinea)"}, ["doo"] = {"Dongo"}, ["dop"] = {"Lukpa"}, ["doq"] = {"Dominican Sign Language"}, ["dor"] = {"Dori'o"}, ["dos"] = {"Dogosé"}, ["dot"] = {"Dass"}, ["dov"] = {"Dombe"}, ["dow"] = {"Doyayo"}, ["dox"] = {"Bussa"}, ["doy"] = {"Dompo"}, ["doz"] = {"Dorze"}, ["dpp"] = {"Papar"}, ["dra"] = {"Dravidian languages"}, ["drb"] = {"Dair"}, ["drc"] = {"Minderico"}, ["drd"] = {"Darmiya"}, ["dre"] = {"Dolpo"}, ["drg"] = {"Rungus"}, ["dri"] = {"C'Lela"}, ["drl"] = {"Paakantyi"}, ["drn"] = {"West Damar"}, ["dro"] = {"Daro-Matu Melanau"}, ["drq"] = {"Dura"}, ["drs"] = {"Gedeo"}, ["drt"] = {"Drents"}, ["dru"] = {"Rukai"}, ["dry"] = {"Darai"}, ["dsb"] = {"Lower Sorbian"}, ["dse"] = {"Dutch Sign Language"}, ["dsh"] = {"Daasanach"}, ["dsi"] = {"Disa"}, ["dsk"] = {"Dokshi"}, ["dsl"] = {"Danish Sign Language"}, ["dsn"] = {"Dusner"}, ["dso"] = {"Desiya"}, ["dsq"] = {"Tadaksahak"}, ["dsz"] = {"Mardin Sign Language"}, ["dta"] = {"Daur"}, ["dtb"] = {"Labuk-Kinabatangan Kadazan"}, ["dtd"] = {"Ditidaht"}, ["dth"] = {"Adithinngithigh"}, ["dti"] = {"Ana Tinga Dogon"}, ["dtk"] = {"Tene Kan Dogon"}, ["dtm"] = {"Tomo Kan Dogon"}, ["dtn"] = {"Daatsʼíin"}, ["dto"] = {"Tommo So Dogon"}, ["dtp"] = {"Kadazan Dusun", "Central Dusun"}, ["dtr"] = {"Lotud"}, ["dts"] = {"Toro So Dogon"}, ["dtt"] = {"Toro Tegu Dogon"}, ["dtu"] = {"Tebul Ure Dogon"}, ["dty"] = {"Dotyali"}, ["dua"] = {"Duala"}, ["dub"] = {"Dubli"}, ["duc"] = {"Duna"}, ["due"] = {"Umiray Dumaget Agta"}, ["duf"] = {"Dumbea", "Drubea"}, ["dug"] = {"Duruma", "Chiduruma"}, ["duh"] = {"Dungra Bhil"}, ["dui"] = {"Dumun"}, ["duk"] = {"Uyajitaya"}, ["dul"] = {"Alabat Island Agta"}, ["dum"] = {"Middle Dutch (ca. 1050-1350)"}, ["dun"] = {"Dusun Deyah"}, ["duo"] = {"Dupaninan Agta"}, ["dup"] = {"Duano"}, ["duq"] = {"Dusun Malang"}, ["dur"] = {"Dii"}, ["dus"] = {"Dumi"}, ["duu"] = {"Drung"}, ["duv"] = {"Duvle"}, ["duw"] = {"Dusun Witu"}, ["dux"] = {"Duungooma"}, ["duy"] = {"Dicamay Agta"}, ["duz"] = {"Duli-Gey"}, ["dva"] = {"Duau"}, ["dwa"] = {"Diri"}, ["dwk"] = {"Dawik Kui"}, ["dwr"] = {"Dawro"}, ["dws"] = {"Dutton World Speedwords"}, ["dwu"] = {"Dhuwal"}, ["dww"] = {"Dawawa"}, ["dwy"] = {"Dhuwaya"}, ["dwz"] = {"Dewas Rai"}, ["dya"] = {"Dyan"}, ["dyb"] = {"Dyaberdyaber"}, ["dyd"] = {"Dyugun"}, ["dyg"] = {"Villa Viciosa Agta"}, ["dyi"] = {"Djimini Senoufo"}, ["dym"] = {"Yanda Dom Dogon"}, ["dyn"] = {"Dyangadi", "Dhanggatti"}, ["dyo"] = {"Jola-Fonyi"}, ["dyr"] = {"Dyarim"}, ["dyu"] = {"Dyula"}, ["dyy"] = {"Djabugay", "Dyaabugay"}, ["dza"] = {"Tunzu"}, ["dzd"] = {"Daza"}, ["dze"] = {"Djiwarli"}, ["dzg"] = {"Dazaga"}, ["dzl"] = {"Dzalakha"}, ["dzn"] = {"Dzando"}, ["eaa"] = {"Karenggapa"}, ["ebc"] = {"Beginci"}, ["ebg"] = {"Ebughu"}, ["ebk"] = {"Eastern Bontok"}, ["ebo"] = {"Teke-Ebo"}, ["ebr"] = {"Ebrié"}, ["ebu"] = {"Embu", "Kiembu"}, ["ecr"] = {"Eteocretan"}, ["ecs"] = {"Ecuadorian Sign Language"}, ["ecy"] = {"Eteocypriot"}, ["eee"] = {"E"}, ["efa"] = {"Efai"}, ["efe"] = {"Efe"}, ["efi"] = {"Efik"}, ["ega"] = {"Ega"}, ["egl"] = {"Emilian"}, ["egm"] = {"Benamanga"}, ["ego"] = {"Eggon"}, ["egx"] = {"Egyptian languages"}, ["egy"] = {"Egyptian (Ancient)"}, ["ehs"] = {"Miyakubo Sign Language"}, ["ehu"] = {"Ehueun"}, ["eip"] = {"Eipomek"}, ["eit"] = {"Eitiep"}, ["eiv"] = {"Askopan"}, ["eja"] = {"Ejamat"}, ["eka"] = {"Ekajuk"}, ["eke"] = {"Ekit"}, ["ekg"] = {"Ekari"}, ["eki"] = {"Eki"}, ["ekk"] = {"Standard Estonian"}, ["ekl"] = {"Kol (Bangladesh)", "Kol"}, ["ekm"] = {"Elip"}, ["eko"] = {"Koti"}, ["ekp"] = {"Ekpeye"}, ["ekr"] = {"Yace"}, ["eky"] = {"Eastern Kayah"}, ["ele"] = {"Elepi"}, ["elh"] = {"El Hugeirat"}, ["eli"] = {"Nding"}, ["elk"] = {"Elkei"}, ["elm"] = {"Eleme"}, ["elo"] = {"El Molo"}, ["elu"] = {"Elu"}, ["elx"] = {"Elamite"}, ["ema"] = {"Emai-Iuleha-Ora"}, ["emb"] = {"Embaloh"}, ["eme"] = {"Emerillon"}, ["emg"] = {"Eastern Meohang"}, ["emi"] = {"Mussau-Emira"}, ["emk"] = {"Eastern Maninkakan"}, ["emm"] = {"Mamulique"}, ["emn"] = {"Eman"}, ["emp"] = {"Northern Emberá"}, ["emq"] = {"Eastern Minyag"}, ["ems"] = {"Pacific Gulf Yupik"}, ["emu"] = {"Eastern Muria"}, ["emw"] = {"Emplawas"}, ["emx"] = {"Erromintxela"}, ["emy"] = {"Epigraphic Mayan"}, ["emz"] = {"Mbessa"}, ["ena"] = {"Apali"}, ["enb"] = {"Markweeta"}, ["enc"] = {"En"}, ["end"] = {"Ende"}, ["enf"] = {"Forest Enets"}, ["enh"] = {"Tundra Enets"}, ["enl"] = {"Enlhet"}, ["enm"] = {"Middle English (1100-1500)"}, ["enn"] = {"Engenni"}, ["eno"] = {"Enggano"}, ["enq"] = {"Enga"}, ["enr"] = {"Emumu", "Emem"}, ["enu"] = {"Enu"}, ["env"] = {"Enwan (Edo State)"}, ["enw"] = {"Enwan (Akwa Ibom State)"}, ["enx"] = {"Enxet"}, ["eot"] = {"Beti (Côte d'Ivoire)"}, ["epi"] = {"Epie"}, ["era"] = {"Eravallan"}, ["erg"] = {"Sie"}, ["erh"] = {"Eruwa"}, ["eri"] = {"Ogea"}, ["erk"] = {"South Efate"}, ["ero"] = {"Horpa"}, ["err"] = {"Erre"}, ["ers"] = {"Ersu"}, ["ert"] = {"Eritai"}, ["erw"] = {"Erokwanas"}, ["ese"] = {"Ese Ejja"}, ["esg"] = {"Aheri Gondi"}, ["esh"] = {"Eshtehardi"}, ["esi"] = {"North Alaskan Inupiatun"}, ["esk"] = {"Northwest Alaska Inupiatun"}, ["esl"] = {"Egypt Sign Language"}, ["esm"] = {"Esuma"}, ["esn"] = {"Salvadoran Sign Language"}, ["eso"] = {"Estonian Sign Language"}, ["esq"] = {"Esselen"}, ["ess"] = {"Central Siberian Yupik"}, ["esu"] = {"Central Yupik"}, ["esx"] = {"Eskimo-Aleut languages"}, ["esy"] = {"Eskayan"}, ["etb"] = {"Etebi"}, ["etc"] = {"Etchemin"}, ["eth"] = {"Ethiopian Sign Language"}, ["etn"] = {"Eton (Vanuatu)"}, ["eto"] = {"Eton (Cameroon)"}, ["etr"] = {"Edolo"}, ["ets"] = {"Yekhee"}, ["ett"] = {"Etruscan"}, ["etu"] = {"Ejagham"}, ["etx"] = {"Eten"}, ["etz"] = {"Semimi"}, ["eud"] = {"Eudeve"}, ["euq"] = {"Basque (family)"}, ["eve"] = {"Even"}, ["evh"] = {"Uvbie"}, ["evn"] = {"Evenki"}, ["ewo"] = {"Ewondo"}, ["ext"] = {"Extremaduran"}, ["eya"] = {"Eyak"}, ["eyo"] = {"Keiyo"}, ["eza"] = {"Ezaa"}, ["eze"] = {"Uzekwe"}, ["faa"] = {"Fasu"}, ["fab"] = {"Fa d'Ambu"}, ["fad"] = {"Wagi"}, ["faf"] = {"Fagani"}, ["fag"] = {"Finongan"}, ["fah"] = {"Baissa Fali"}, ["fai"] = {"Faiwol"}, ["faj"] = {"Faita"}, ["fak"] = {"Fang (Cameroon)"}, ["fal"] = {"South Fali"}, ["fam"] = {"Fam"}, ["fan"] = {"Fang (Equatorial Guinea)"}, ["fap"] = {"Paloor"}, ["far"] = {"Fataleka"}, ["fat"] = {"Fanti"}, ["fau"] = {"Fayu"}, ["fax"] = {"Fala"}, ["fay"] = {"Southwestern Fars"}, ["faz"] = {"Northwestern Fars"}, ["fbl"] = {"West Albay Bikol"}, ["fcs"] = {"Quebec Sign Language"}, ["fer"] = {"Feroge"}, ["ffi"] = {"Foia Foia"}, ["ffm"] = {"Maasina Fulfulde"}, ["fgr"] = {"Fongoro"}, ["fia"] = {"Nobiin"}, ["fie"] = {"Fyer"}, ["fif"] = {"Faifi"}, ["fil"] = {"Filipino", "Pilipino"}, ["fip"] = {"Fipa"}, ["fir"] = {"Firan"}, ["fit"] = {"Tornedalen Finnish", "Meänkieli"}, ["fiu"] = {"Finno-Ugrian languages"}, ["fiw"] = {"Fiwaga"}, ["fkk"] = {"Kirya-Konzəl"}, ["fkv"] = {"Kven Finnish"}, ["fla"] = {"Kalispel-Pend d'Oreille"}, ["flh"] = {"Foau"}, ["fli"] = {"Fali"}, ["fll"] = {"North Fali"}, ["fln"] = {"Flinders Island"}, ["flr"] = {"Fuliiru"}, ["fly"] = {"Flaaitaal", "Tsotsitaal"}, ["fmp"] = {"Fe'fe'"}, ["fmu"] = {"Far Western Muria"}, ["fnb"] = {"Fanbak"}, ["fng"] = {"Fanagalo"}, ["fni"] = {"Fania"}, ["fod"] = {"Foodo"}, ["foi"] = {"Foi"}, ["fom"] = {"Foma"}, ["fon"] = {"Fon"}, ["for"] = {"Fore"}, ["fos"] = {"Siraya"}, ["fox"] = {"Formosan languages"}, ["fpe"] = {"Fernando Po Creole English"}, ["fqs"] = {"Fas"}, ["frc"] = {"Cajun French"}, ["frd"] = {"Fordata"}, ["frk"] = {"Frankish"}, ["frm"] = {"Middle French (ca. 1400-1600)"}, ["fro"] = {"Old French (842-ca. 1400)"}, ["frp"] = {"Arpitan", "Francoprovençal"}, ["frq"] = {"Forak"}, ["frr"] = {"Northern Frisian"}, ["frs"] = {"Eastern Frisian"}, ["frt"] = {"Fortsenal"}, ["fse"] = {"Finnish Sign Language"}, ["fsl"] = {"French Sign Language"}, ["fss"] = {"Finland-Swedish Sign Language", "finlandssvenskt teckenspråk", "suomenruotsalainen viittomakieli"}, ["fub"] = {"Adamawa Fulfulde"}, ["fuc"] = {"Pulaar"}, ["fud"] = {"East Futuna"}, ["fue"] = {"Borgu Fulfulde"}, ["fuf"] = {"Pular"}, ["fuh"] = {"Western Niger Fulfulde"}, ["fui"] = {"Bagirmi Fulfulde"}, ["fuj"] = {"Ko"}, ["fum"] = {"Fum"}, ["fun"] = {"Fulniô"}, ["fuq"] = {"Central-Eastern Niger Fulfulde"}, ["fur"] = {"Friulian"}, ["fut"] = {"Futuna-Aniwa"}, ["fuu"] = {"Furu"}, ["fuv"] = {"Nigerian Fulfulde"}, ["fuy"] = {"Fuyug"}, ["fvr"] = {"Fur"}, ["fwa"] = {"Fwâi"}, ["fwe"] = {"Fwe"}, ["gaa"] = {"Ga"}, ["gab"] = {"Gabri"}, ["gac"] = {"Mixed Great Andamanese"}, ["gad"] = {"Gaddang"}, ["gae"] = {"Guarequena"}, ["gaf"] = {"Gende"}, ["gag"] = {"Gagauz"}, ["gah"] = {"Alekano"}, ["gai"] = {"Borei"}, ["gaj"] = {"Gadsup"}, ["gak"] = {"Gamkonora"}, ["gal"] = {"Galolen"}, ["gam"] = {"Kandawo"}, ["gan"] = {"Gan Chinese"}, ["gao"] = {"Gants"}, ["gap"] = {"Gal"}, ["gaq"] = {"Gata'"}, ["gar"] = {"Galeya"}, ["gas"] = {"Adiwasi Garasia"}, ["gat"] = {"Kenati"}, ["gau"] = {"Mudhili Gadaba"}, ["gaw"] = {"Nobonob"}, ["gax"] = {"Borana-Arsi-Guji Oromo"}, ["gay"] = {"Gayo"}, ["gaz"] = {"West Central Oromo"}, ["gba"] = {"Gbaya (Central African Republic)"}, ["gbb"] = {"Kaytetye"}, ["gbd"] = {"Karajarri"}, ["gbe"] = {"Niksek"}, ["gbf"] = {"Gaikundi"}, ["gbg"] = {"Gbanziri"}, ["gbh"] = {"Defi Gbe"}, ["gbi"] = {"Galela"}, ["gbj"] = {"Bodo Gadaba"}, ["gbk"] = {"Gaddi"}, ["gbl"] = {"Gamit"}, ["gbm"] = {"Garhwali"}, ["gbn"] = {"Mo'da"}, ["gbo"] = {"Northern Grebo"}, ["gbp"] = {"Gbaya-Bossangoa"}, ["gbq"] = {"Gbaya-Bozoum"}, ["gbr"] = {"Gbagyi"}, ["gbs"] = {"Gbesi Gbe"}, ["gbu"] = {"Gagadu"}, ["gbv"] = {"Gbanu"}, ["gbw"] = {"Gabi-Gabi"}, ["gbx"] = {"Eastern Xwla Gbe"}, ["gby"] = {"Gbari"}, ["gbz"] = {"Zoroastrian Dari"}, ["gcc"] = {"Mali"}, ["gcd"] = {"Ganggalida"}, ["gce"] = {"Galice"}, ["gcf"] = {"Guadeloupean Creole French"}, ["gcl"] = {"Grenadian Creole English"}, ["gcn"] = {"Gaina"}, ["gcr"] = {"Guianese Creole French"}, ["gct"] = {"Colonia Tovar German"}, ["gda"] = {"Gade Lohar"}, ["gdb"] = {"Pottangi Ollar Gadaba"}, ["gdc"] = {"Gugu Badhun"}, ["gdd"] = {"Gedaged"}, ["gde"] = {"Gude"}, ["gdf"] = {"Guduf-Gava"}, ["gdg"] = {"Ga'dang"}, ["gdh"] = {"Gadjerawang", "Gajirrabeng"}, ["gdi"] = {"Gundi"}, ["gdj"] = {"Gurdjar"}, ["gdk"] = {"Gadang"}, ["gdl"] = {"Dirasha"}, ["gdm"] = {"Laal"}, ["gdn"] = {"Umanakaina"}, ["gdo"] = {"Ghodoberi"}, ["gdq"] = {"Mehri"}, ["gdr"] = {"Wipi"}, ["gds"] = {"Ghandruk Sign Language"}, ["gdt"] = {"Kungardutyi"}, ["gdu"] = {"Gudu"}, ["gdx"] = {"Godwari"}, ["gea"] = {"Geruma"}, ["geb"] = {"Kire"}, ["gec"] = {"Gboloo Grebo"}, ["ged"] = {"Gade"}, ["gef"] = {"Gerai"}, ["geg"] = {"Gengle"}, ["geh"] = {"Hutterite German", "Hutterisch"}, ["gei"] = {"Gebe"}, ["gej"] = {"Gen"}, ["gek"] = {"Ywom"}, ["gel"] = {"ut-Ma'in"}, ["gem"] = {"Germanic languages"}, ["geq"] = {"Geme"}, ["ges"] = {"Geser-Gorom"}, ["gev"] = {"Eviya"}, ["gew"] = {"Gera"}, ["gex"] = {"Garre"}, ["gey"] = {"Enya"}, ["gez"] = {"Geez"}, ["gfk"] = {"Patpatar"}, ["gft"] = {"Gafat"}, ["gga"] = {"Gao"}, ["ggb"] = {"Gbii"}, ["ggd"] = {"Gugadj"}, ["gge"] = {"Gurr-goni"}, ["ggg"] = {"Gurgula"}, ["ggk"] = {"Kungarakany"}, ["ggl"] = {"Ganglau"}, ["ggt"] = {"Gitua"}, ["ggu"] = {"Gagu", "Gban"}, ["ggw"] = {"Gogodala"}, ["gha"] = {"Ghadamès"}, ["ghc"] = {"Hiberno-Scottish Gaelic"}, ["ghe"] = {"Southern Ghale"}, ["ghh"] = {"Northern Ghale"}, ["ghk"] = {"Geko Karen"}, ["ghl"] = {"Ghulfan"}, ["ghn"] = {"Ghanongga"}, ["gho"] = {"Ghomara"}, ["ghr"] = {"Ghera"}, ["ghs"] = {"Guhu-Samane"}, ["ght"] = {"Kuke", "Kutang Ghale"}, ["gia"] = {"Kija"}, ["gib"] = {"Gibanawa"}, ["gic"] = {"Gail"}, ["gid"] = {"Gidar"}, ["gie"] = {"Gaɓogbo", "Guébie"}, ["gig"] = {"Goaria"}, ["gih"] = {"Githabul"}, ["gii"] = {"Girirra"}, ["gil"] = {"Gilbertese"}, ["gim"] = {"Gimi (Eastern Highlands)"}, ["gin"] = {"Hinukh"}, ["gip"] = {"Gimi (West New Britain)"}, ["giq"] = {"Green Gelao"}, ["gir"] = {"Red Gelao"}, ["gis"] = {"North Giziga"}, ["git"] = {"Gitxsan"}, ["giu"] = {"Mulao"}, ["giw"] = {"White Gelao"}, ["gix"] = {"Gilima"}, ["giy"] = {"Giyug"}, ["giz"] = {"South Giziga"}, ["gjk"] = {"Kachi Koli"}, ["gjm"] = {"Gunditjmara"}, ["gjn"] = {"Gonja"}, ["gjr"] = {"Gurindji Kriol"}, ["gju"] = {"Gujari"}, ["gka"] = {"Guya"}, ["gkd"] = {"Magɨ (Madang Province)"}, ["gke"] = {"Ndai"}, ["gkn"] = {"Gokana"}, ["gko"] = {"Kok-Nar"}, ["gkp"] = {"Guinea Kpelle"}, ["gku"] = {"ǂUngkue"}, ["glb"] = {"Belning"}, ["glc"] = {"Bon Gula"}, ["gld"] = {"Nanai"}, ["glh"] = {"Northwest Pashai", "Northwest Pashayi"}, ["glj"] = {"Gula Iro"}, ["glk"] = {"Gilaki"}, ["gll"] = {"Garlali"}, ["glo"] = {"Galambu"}, ["glr"] = {"Glaro-Twabo"}, ["glu"] = {"Gula (Chad)"}, ["glw"] = {"Glavda"}, ["gly"] = {"Gule"}, ["gma"] = {"Gambera"}, ["gmb"] = {"Gula'alaa"}, ["gmd"] = {"Mághdì"}, ["gme"] = {"East Germanic languages"}, ["gmg"] = {"Magɨyi"}, ["gmh"] = {"Middle High German (ca. 1050-1500)"}, ["gml"] = {"Middle Low German"}, ["gmm"] = {"Gbaya-Mbodomo"}, ["gmn"] = {"Gimnime"}, ["gmq"] = {"North Germanic languages"}, ["gmr"] = {"Mirning", "Mirniny"}, ["gmu"] = {"Gumalu"}, ["gmv"] = {"Gamo"}, ["gmw"] = {"West Germanic languages"}, ["gmx"] = {"Magoma"}, ["gmy"] = {"Mycenaean Greek"}, ["gmz"] = {"Mgbolizhia"}, ["gna"] = {"Kaansa"}, ["gnb"] = {"Gangte"}, ["gnc"] = {"Guanche"}, ["gnd"] = {"Zulgo-Gemzek"}, ["gne"] = {"Ganang"}, ["gng"] = {"Ngangam"}, ["gnh"] = {"Lere"}, ["gni"] = {"Gooniyandi"}, ["gnj"] = {"Ngen"}, ["gnk"] = {"ǁGana"}, ["gnl"] = {"Gangulu"}, ["gnm"] = {"Ginuman"}, ["gnn"] = {"Gumatj"}, ["gno"] = {"Northern Gondi"}, ["gnq"] = {"Gana"}, ["gnr"] = {"Gureng Gureng"}, ["gnt"] = {"Guntai"}, ["gnu"] = {"Gnau"}, ["gnw"] = {"Western Bolivian Guaraní"}, ["gnz"] = {"Ganzi"}, ["goa"] = {"Guro"}, ["gob"] = {"Playero"}, ["goc"] = {"Gorakor"}, ["god"] = {"Godié"}, ["goe"] = {"Gongduk"}, ["gof"] = {"Gofa"}, ["gog"] = {"Gogo"}, ["goh"] = {"Old High German (ca. 750-1050)"}, ["goi"] = {"Gobasi"}, ["goj"] = {"Gowlan"}, ["gok"] = {"Gowli"}, ["gol"] = {"Gola"}, ["gom"] = {"Goan Konkani"}, ["gon"] = {"Gondi"}, ["goo"] = {"Gone Dau"}, ["gop"] = {"Yeretuar"}, ["goq"] = {"Gorap"}, ["gor"] = {"Gorontalo"}, ["gos"] = {"Gronings"}, ["got"] = {"Gothic"}, ["gou"] = {"Gavar"}, ["gov"] = {"Goo"}, ["gow"] = {"Gorowa"}, ["gox"] = {"Gobu"}, ["goy"] = {"Goundo"}, ["goz"] = {"Gozarkhani"}, ["gpa"] = {"Gupa-Abawa"}, ["gpe"] = {"Ghanaian Pidgin English"}, ["gpn"] = {"Taiap"}, ["gqa"] = {"Ga'anda"}, ["gqi"] = {"Guiqiong"}, ["gqn"] = {"Guana (Brazil)"}, ["gqr"] = {"Gor"}, ["gqu"] = {"Qau"}, ["gra"] = {"Rajput Garasia"}, ["grb"] = {"Grebo"}, ["grc"] = {"Ancient Greek (to 1453)"}, ["grd"] = {"Guruntum-Mbaaru"}, ["grg"] = {"Madi"}, ["grh"] = {"Gbiri-Niragu"}, ["gri"] = {"Ghari"}, ["grj"] = {"Southern Grebo"}, ["grk"] = {"Greek languages"}, ["grm"] = {"Kota Marudu Talantang"}, ["gro"] = {"Groma"}, ["grq"] = {"Gorovu"}, ["grr"] = {"Taznatit"}, ["grs"] = {"Gresi"}, ["grt"] = {"Garo"}, ["gru"] = {"Kistane"}, ["grv"] = {"Central Grebo"}, ["grw"] = {"Gweda"}, ["grx"] = {"Guriaso"}, ["gry"] = {"Barclayville Grebo"}, ["grz"] = {"Guramalum"}, ["gse"] = {"Ghanaian Sign Language"}, ["gsg"] = {"German Sign Language"}, ["gsl"] = {"Gusilay"}, ["gsm"] = {"Guatemalan Sign Language"}, ["gsn"] = {"Nema", "Gusan"}, ["gso"] = {"Southwest Gbaya"}, ["gsp"] = {"Wasembo"}, ["gss"] = {"Greek Sign Language"}, ["gsw"] = {"Swiss German", "Alemannic", "Alsatian"}, ["gta"] = {"Guató"}, ["gtu"] = {"Aghu-Tharnggala"}, ["gua"] = {"Shiki"}, ["gub"] = {"Guajajára"}, ["guc"] = {"Wayuu"}, ["gud"] = {"Yocoboué Dida"}, ["gue"] = {"Gurindji"}, ["guf"] = {"Gupapuyngu"}, ["gug"] = {"Paraguayan Guaraní"}, ["guh"] = {"Guahibo"}, ["gui"] = {"Eastern Bolivian Guaraní"}, ["guk"] = {"Gumuz"}, ["gul"] = {"Sea Island Creole English"}, ["gum"] = {"Guambiano"}, ["gun"] = {"Mbyá Guaraní"}, ["guo"] = {"Guayabero"}, ["gup"] = {"Gunwinggu"}, ["guq"] = {"Aché"}, ["gur"] = {"Farefare"}, ["gus"] = {"Guinean Sign Language"}, ["gut"] = {"Maléku Jaíka"}, ["guu"] = {"Yanomamö"}, ["guw"] = {"Gun"}, ["gux"] = {"Gourmanchéma"}, ["guz"] = {"Gusii", "Ekegusii"}, ["gva"] = {"Guana (Paraguay)"}, ["gvc"] = {"Guanano"}, ["gve"] = {"Duwet"}, ["gvf"] = {"Golin"}, ["gvj"] = {"Guajá"}, ["gvl"] = {"Gulay"}, ["gvm"] = {"Gurmana"}, ["gvn"] = {"Kuku-Yalanji"}, ["gvo"] = {"Gavião Do Jiparaná"}, ["gvp"] = {"Pará Gavião"}, ["gvr"] = {"Gurung"}, ["gvs"] = {"Gumawana"}, ["gvy"] = {"Guyani"}, ["gwa"] = {"Mbato"}, ["gwb"] = {"Gwa"}, ["gwc"] = {"Gawri", "Kalami"}, ["gwd"] = {"Gawwada"}, ["gwe"] = {"Gweno"}, ["gwf"] = {"Gowro"}, ["gwg"] = {"Moo"}, ["gwi"] = {"Gwichʼin"}, ["gwj"] = {"ǀGwi"}, ["gwm"] = {"Awngthim"}, ["gwn"] = {"Gwandara"}, ["gwr"] = {"Gwere"}, ["gwt"] = {"Gawar-Bati"}, ["gwu"] = {"Guwamu"}, ["gww"] = {"Kwini"}, ["gwx"] = {"Gua"}, ["gxx"] = {"Wè Southern"}, ["gya"] = {"Northwest Gbaya"}, ["gyb"] = {"Garus"}, ["gyd"] = {"Kayardild"}, ["gye"] = {"Gyem"}, ["gyf"] = {"Gungabula"}, ["gyg"] = {"Gbayi"}, ["gyi"] = {"Gyele"}, ["gyl"] = {"Gayil"}, ["gym"] = {"Ngäbere"}, ["gyn"] = {"Guyanese Creole English"}, ["gyo"] = {"Gyalsumdo"}, ["gyr"] = {"Guarayu"}, ["gyy"] = {"Gunya"}, ["gyz"] = {"Geji", "Gyaazi"}, ["gza"] = {"Ganza"}, ["gzi"] = {"Gazi"}, ["gzn"] = {"Gane"}, ["haa"] = {"Han"}, ["hab"] = {"Hanoi Sign Language"}, ["hac"] = {"Gurani"}, ["had"] = {"Hatam"}, ["hae"] = {"Eastern Oromo"}, ["haf"] = {"Haiphong Sign Language"}, ["hag"] = {"Hanga"}, ["hah"] = {"Hahon"}, ["hai"] = {"Haida"}, ["haj"] = {"Hajong"}, ["hak"] = {"Hakka Chinese"}, ["hal"] = {"Halang"}, ["ham"] = {"Hewa"}, ["han"] = {"Hangaza"}, ["hao"] = {"Hakö"}, ["hap"] = {"Hupla"}, ["haq"] = {"Ha"}, ["har"] = {"Harari"}, ["has"] = {"Haisla"}, ["hav"] = {"Havu"}, ["haw"] = {"Hawaiian"}, ["hax"] = {"Southern Haida"}, ["hay"] = {"Haya"}, ["haz"] = {"Hazaragi"}, ["hba"] = {"Hamba"}, ["hbb"] = {"Huba"}, ["hbn"] = {"Heiban"}, ["hbo"] = {"Ancient Hebrew"}, ["hbu"] = {"Habu"}, ["hca"] = {"Andaman Creole Hindi"}, ["hch"] = {"Huichol"}, ["hdn"] = {"Northern Haida"}, ["hds"] = {"Honduras Sign Language"}, ["hdy"] = {"Hadiyya"}, ["hea"] = {"Northern Qiandong Miao"}, ["hed"] = {"Herdé"}, ["heg"] = {"Helong"}, ["heh"] = {"Hehe"}, ["hei"] = {"Heiltsuk"}, ["hem"] = {"Hemba"}, ["hgm"] = {"Haiǁom"}, ["hgw"] = {"Haigwai"}, ["hhi"] = {"Hoia Hoia"}, ["hhr"] = {"Kerak"}, ["hhy"] = {"Hoyahoya"}, ["hia"] = {"Lamang"}, ["hib"] = {"Hibito"}, ["hid"] = {"Hidatsa"}, ["hif"] = {"Fiji Hindi"}, ["hig"] = {"Kamwe"}, ["hih"] = {"Pamosu"}, ["hii"] = {"Hinduri"}, ["hij"] = {"Hijuk"}, ["hik"] = {"Seit-Kaitetu"}, ["hil"] = {"Hiligaynon"}, ["him"] = {"Himachali languages", "Western Pahari languages"}, ["hio"] = {"Tsoa"}, ["hir"] = {"Himarimã"}, ["hit"] = {"Hittite"}, ["hiw"] = {"Hiw"}, ["hix"] = {"Hixkaryána"}, ["hji"] = {"Haji"}, ["hka"] = {"Kahe"}, ["hke"] = {"Hunde"}, ["hkh"] = {"Khah", "Poguli"}, ["hkk"] = {"Hunjara-Kaina Ke"}, ["hkn"] = {"Mel-Khaonh"}, ["hks"] = {"Hong Kong Sign Language", "Heung Kong Sau Yue"}, ["hla"] = {"Halia"}, ["hlb"] = {"Halbi"}, ["hld"] = {"Halang Doan"}, ["hle"] = {"Hlersu"}, ["hlt"] = {"Matu Chin"}, ["hlu"] = {"Hieroglyphic Luwian"}, ["hma"] = {"Southern Mashan Hmong", "Southern Mashan Miao"}, ["hmb"] = {"Humburi Senni Songhay"}, ["hmc"] = {"Central Huishui Hmong", "Central Huishui Miao"}, ["hmd"] = {"Large Flowery Miao", "A-hmaos", "Da-Hua Miao"}, ["hme"] = {"Eastern Huishui Hmong", "Eastern Huishui Miao"}, ["hmf"] = {"Hmong Don"}, ["hmg"] = {"Southwestern Guiyang Hmong"}, ["hmh"] = {"Southwestern Huishui Hmong", "Southwestern Huishui Miao"}, ["hmi"] = {"Northern Huishui Hmong", "Northern Huishui Miao"}, ["hmj"] = {"Ge", "Gejia"}, ["hmk"] = {"Maek"}, ["hml"] = {"Luopohe Hmong", "Luopohe Miao"}, ["hmm"] = {"Central Mashan Hmong", "Central Mashan Miao"}, ["hmn"] = {"Hmong", "Mong"}, ["hmp"] = {"Northern Mashan Hmong", "Northern Mashan Miao"}, ["hmq"] = {"Eastern Qiandong Miao"}, ["hmr"] = {"Hmar"}, ["hms"] = {"Southern Qiandong Miao"}, ["hmt"] = {"Hamtai"}, ["hmu"] = {"Hamap"}, ["hmv"] = {"Hmong Dô"}, ["hmw"] = {"Western Mashan Hmong", "Western Mashan Miao"}, ["hmx"] = {"Hmong-Mien languages"}, ["hmy"] = {"Southern Guiyang Hmong", "Southern Guiyang Miao"}, ["hmz"] = {"Hmong Shua", "Sinicized Miao"}, ["hna"] = {"Mina (Cameroon)"}, ["hnd"] = {"Southern Hindko"}, ["hne"] = {"Chhattisgarhi"}, ["hng"] = {"Hungu"}, ["hnh"] = {"ǁAni"}, ["hni"] = {"Hani"}, ["hnj"] = {"Hmong Njua", "Mong Leng", "Mong Njua"}, ["hnn"] = {"Hanunoo"}, ["hno"] = {"Northern Hindko"}, ["hns"] = {"Caribbean Hindustani"}, ["hnu"] = {"Hung"}, ["hoa"] = {"Hoava"}, ["hob"] = {"Mari (Madang Province)"}, ["hoc"] = {"Ho"}, ["hod"] = {"Holma"}, ["hoe"] = {"Horom"}, ["hoh"] = {"Hobyót"}, ["hoi"] = {"Holikachuk"}, ["hoj"] = {"Hadothi", "Haroti"}, ["hok"] = {"Hokan languages"}, ["hol"] = {"Holu"}, ["hom"] = {"Homa"}, ["hoo"] = {"Holoholo"}, ["hop"] = {"Hopi"}, ["hor"] = {"Horo"}, ["hos"] = {"Ho Chi Minh City Sign Language"}, ["hot"] = {"Hote", "Malê"}, ["hov"] = {"Hovongan"}, ["how"] = {"Honi"}, ["hoy"] = {"Holiya"}, ["hoz"] = {"Hozo"}, ["hpo"] = {"Hpon"}, ["hps"] = {"Hawai'i Sign Language (HSL)", "Hawai'i Pidgin Sign Language"}, ["hra"] = {"Hrangkhol"}, ["hrc"] = {"Niwer Mil"}, ["hre"] = {"Hre"}, ["hrk"] = {"Haruku"}, ["hrm"] = {"Horned Miao"}, ["hro"] = {"Haroi"}, ["hrp"] = {"Nhirrpi"}, ["hrt"] = {"Hértevin"}, ["hru"] = {"Hruso"}, ["hrw"] = {"Warwar Feni"}, ["hrx"] = {"Hunsrik"}, ["hrz"] = {"Harzani"}, ["hsb"] = {"Upper Sorbian"}, ["hsh"] = {"Hungarian Sign Language"}, ["hsl"] = {"Hausa Sign Language"}, ["hsn"] = {"Xiang Chinese"}, ["hss"] = {"Harsusi"}, ["hti"] = {"Hoti"}, ["hto"] = {"Minica Huitoto"}, ["hts"] = {"Hadza"}, ["htu"] = {"Hitu"}, ["htx"] = {"Middle Hittite"}, ["hub"] = {"Huambisa"}, ["huc"] = {"ǂHua", "ǂʼAmkhoe"}, ["hud"] = {"Huaulu"}, ["hue"] = {"San Francisco Del Mar Huave"}, ["huf"] = {"Humene"}, ["hug"] = {"Huachipaeri"}, ["huh"] = {"Huilliche"}, ["hui"] = {"Huli"}, ["huj"] = {"Northern Guiyang Hmong", "Northern Guiyang Miao"}, ["huk"] = {"Hulung"}, ["hul"] = {"Hula"}, ["hum"] = {"Hungana"}, ["huo"] = {"Hu"}, ["hup"] = {"Hupa"}, ["huq"] = {"Tsat"}, ["hur"] = {"Halkomelem"}, ["hus"] = {"Huastec"}, ["hut"] = {"Humla"}, ["huu"] = {"Murui Huitoto"}, ["huv"] = {"San Mateo Del Mar Huave"}, ["huw"] = {"Hukumina"}, ["hux"] = {"Nüpode Huitoto"}, ["huy"] = {"Hulaulá"}, ["huz"] = {"Hunzib"}, ["hvc"] = {"Haitian Vodoun Culture Language"}, ["hve"] = {"San Dionisio Del Mar Huave"}, ["hvk"] = {"Haveke"}, ["hvn"] = {"Sabu"}, ["hvv"] = {"Santa María Del Mar Huave"}, ["hwa"] = {"Wané"}, ["hwc"] = {"Hawai'i Creole English", "Hawai'i Pidgin"}, ["hwo"] = {"Hwana"}, ["hya"] = {"Hya"}, ["hyw"] = {"Western Armenian"}, ["hyx"] = {"Armenian (family)"}, ["iai"] = {"Iaai"}, ["ian"] = {"Iatmul"}, ["iar"] = {"Purari"}, ["iba"] = {"Iban"}, ["ibb"] = {"Ibibio"}, ["ibd"] = {"Iwaidja"}, ["ibe"] = {"Akpes"}, ["ibg"] = {"Ibanag"}, ["ibh"] = {"Bih"}, ["ibl"] = {"Ibaloi"}, ["ibm"] = {"Agoi"}, ["ibn"] = {"Ibino"}, ["ibr"] = {"Ibuoro"}, ["ibu"] = {"Ibu"}, ["iby"] = {"Ibani"}, ["ica"] = {"Ede Ica"}, ["ich"] = {"Etkywan"}, ["icl"] = {"Icelandic Sign Language"}, ["icr"] = {"Islander Creole English"}, ["ida"] = {"Idakho-Isukha-Tiriki", "Luidakho-Luisukha-Lutirichi"}, ["idb"] = {"Indo-Portuguese"}, ["idc"] = {"Idon", "Ajiya"}, ["idd"] = {"Ede Idaca"}, ["ide"] = {"Idere"}, ["idi"] = {"Idi"}, ["idr"] = {"Indri"}, ["ids"] = {"Idesa"}, ["idt"] = {"Idaté"}, ["idu"] = {"Idoma"}, ["ifa"] = {"Amganad Ifugao"}, ["ifb"] = {"Batad Ifugao", "Ayangan Ifugao"}, ["ife"] = {"Ifè"}, ["iff"] = {"Ifo"}, ["ifk"] = {"Tuwali Ifugao"}, ["ifm"] = {"Teke-Fuumu"}, ["ifu"] = {"Mayoyao Ifugao"}, ["ify"] = {"Keley-I Kallahan"}, ["igb"] = {"Ebira"}, ["ige"] = {"Igede"}, ["igg"] = {"Igana"}, ["igl"] = {"Igala"}, ["igm"] = {"Kanggape"}, ["ign"] = {"Ignaciano"}, ["igo"] = {"Isebe"}, ["igs"] = {"Interglossa"}, ["igw"] = {"Igwe"}, ["ihb"] = {"Iha Based Pidgin"}, ["ihi"] = {"Ihievbe"}, ["ihp"] = {"Iha"}, ["ihw"] = {"Bidhawal"}, ["iin"] = {"Thiin"}, ["iir"] = {"Indo-Iranian languages"}, ["ijc"] = {"Izon"}, ["ije"] = {"Biseni"}, ["ijj"] = {"Ede Ije"}, ["ijn"] = {"Kalabari"}, ["ijo"] = {"Ijo languages"}, ["ijs"] = {"Southeast Ijo"}, ["ike"] = {"Eastern Canadian Inuktitut"}, ["ikh"] = {"Ikhin-Arokho"}, ["iki"] = {"Iko"}, ["ikk"] = {"Ika"}, ["ikl"] = {"Ikulu"}, ["iko"] = {"Olulumo-Ikom"}, ["ikp"] = {"Ikpeshi"}, ["ikr"] = {"Ikaranggal"}, ["iks"] = {"Inuit Sign Language"}, ["ikt"] = {"Inuinnaqtun", "Western Canadian Inuktitut"}, ["ikv"] = {"Iku-Gora-Ankwa"}, ["ikw"] = {"Ikwere"}, ["ikx"] = {"Ik"}, ["ikz"] = {"Ikizu"}, ["ila"] = {"Ile Ape"}, ["ilb"] = {"Ila"}, ["ilg"] = {"Garig-Ilgar"}, ["ili"] = {"Ili Turki"}, ["ilk"] = {"Ilongot"}, ["ilm"] = {"Iranun (Malaysia)"}, ["ilo"] = {"Iloko"}, ["ilp"] = {"Iranun (Philippines)"}, ["ils"] = {"International Sign"}, ["ilu"] = {"Ili'uun"}, ["ilv"] = {"Ilue"}, ["ima"] = {"Mala Malasar"}, ["imi"] = {"Anamgura"}, ["iml"] = {"Miluk"}, ["imn"] = {"Imonda"}, ["imo"] = {"Imbongu"}, ["imr"] = {"Imroing"}, ["ims"] = {"Marsian"}, ["imt"] = {"Imotong"}, ["imy"] = {"Milyan"}, ["inb"] = {"Inga"}, ["inc"] = {"Indic languages"}, ["ine"] = {"Indo-European languages"}, ["ing"] = {"Degexit'an"}, ["inh"] = {"Ingush"}, ["inj"] = {"Jungle Inga"}, ["inl"] = {"Indonesian Sign Language"}, ["inm"] = {"Minaean"}, ["inn"] = {"Isinai"}, ["ino"] = {"Inoke-Yate"}, ["inp"] = {"Iñapari"}, ["ins"] = {"Indian Sign Language"}, ["int"] = {"Intha"}, ["inz"] = {"Ineseño"}, ["ior"] = {"Inor"}, ["iou"] = {"Tuma-Irumu"}, ["iow"] = {"Iowa-Oto"}, ["ipi"] = {"Ipili"}, ["ipo"] = {"Ipiko"}, ["iqu"] = {"Iquito"}, ["iqw"] = {"Ikwo"}, ["ira"] = {"Iranian languages"}, ["ire"] = {"Iresim"}, ["irh"] = {"Irarutu"}, ["iri"] = {"Rigwe", "Irigwe"}, ["irk"] = {"Iraqw"}, ["irn"] = {"Irántxe"}, ["iro"] = {"Iroquoian languages"}, ["irr"] = {"Ir"}, ["iru"] = {"Irula"}, ["irx"] = {"Kamberau"}, ["iry"] = {"Iraya"}, ["isa"] = {"Isabi"}, ["isc"] = {"Isconahua"}, ["isd"] = {"Isnag"}, ["ise"] = {"Italian Sign Language"}, ["isg"] = {"Irish Sign Language"}, ["ish"] = {"Esan"}, ["isi"] = {"Nkem-Nkum"}, ["isk"] = {"Ishkashimi"}, ["ism"] = {"Masimasi"}, ["isn"] = {"Isanzu"}, ["iso"] = {"Isoko"}, ["isr"] = {"Israeli Sign Language"}, ["ist"] = {"Istriot"}, ["isu"] = {"Isu (Menchum Division)"}, ["itb"] = {"Binongan Itneg"}, ["itc"] = {"Italic languages"}, ["itd"] = {"Southern Tidung"}, ["ite"] = {"Itene"}, ["iti"] = {"Inlaod Itneg"}, ["itk"] = {"Judeo-Italian"}, ["itl"] = {"Itelmen"}, ["itm"] = {"Itu Mbon Uzo"}, ["ito"] = {"Itonama"}, ["itr"] = {"Iteri"}, ["its"] = {"Isekiri"}, ["itt"] = {"Maeng Itneg"}, ["itv"] = {"Itawit"}, ["itw"] = {"Ito"}, ["itx"] = {"Itik"}, ["ity"] = {"Moyadan Itneg"}, ["itz"] = {"Itzá"}, ["ium"] = {"Iu Mien"}, ["ivb"] = {"Ibatan"}, ["ivv"] = {"Ivatan"}, ["iwk"] = {"I-Wak"}, ["iwm"] = {"Iwam"}, ["iwo"] = {"Iwur"}, ["iws"] = {"Sepik Iwam"}, ["ixc"] = {"Ixcatec"}, ["ixl"] = {"Ixil"}, ["iya"] = {"Iyayu"}, ["iyo"] = {"Mesaka"}, ["iyx"] = {"Yaka (Congo)"}, ["izh"] = {"Ingrian"}, ["izm"] = {"Kizamani"}, ["izr"] = {"Izere"}, ["izz"] = {"Izii"}, ["jaa"] = {"Jamamadí"}, ["jab"] = {"Hyam"}, ["jac"] = {"Popti'", "Jakalteko"}, ["jad"] = {"Jahanka"}, ["jae"] = {"Yabem"}, ["jaf"] = {"Jara"}, ["jah"] = {"Jah Hut"}, ["jaj"] = {"Zazao"}, ["jak"] = {"Jakun"}, ["jal"] = {"Yalahatan"}, ["jam"] = {"Jamaican Creole English"}, ["jan"] = {"Jandai"}, ["jao"] = {"Yanyuwa"}, ["jaq"] = {"Yaqay"}, ["jas"] = {"New Caledonian Javanese"}, ["jat"] = {"Jakati"}, ["jau"] = {"Yaur"}, ["jax"] = {"Jambi Malay"}, ["jay"] = {"Yan-nhangu", "Nhangu"}, ["jaz"] = {"Jawe"}, ["jbe"] = {"Judeo-Berber"}, ["jbi"] = {"Badjiri"}, ["jbj"] = {"Arandai"}, ["jbk"] = {"Barikewa"}, ["jbm"] = {"Bijim"}, ["jbn"] = {"Nafusi"}, ["jbo"] = {"Lojban"}, ["jbr"] = {"Jofotek-Bromnya"}, ["jbt"] = {"Jabutí"}, ["jbu"] = {"Jukun Takum"}, ["jbw"] = {"Yawijibaya"}, ["jcs"] = {"Jamaican Country Sign Language"}, ["jct"] = {"Krymchak"}, ["jda"] = {"Jad"}, ["jdg"] = {"Jadgali"}, ["jdt"] = {"Judeo-Tat"}, ["jeb"] = {"Jebero"}, ["jee"] = {"Jerung"}, ["jeh"] = {"Jeh"}, ["jei"] = {"Yei"}, ["jek"] = {"Jeri Kuo"}, ["jel"] = {"Yelmek"}, ["jen"] = {"Dza"}, ["jer"] = {"Jere"}, ["jet"] = {"Manem"}, ["jeu"] = {"Jonkor Bourmataguil"}, ["jgb"] = {"Ngbee"}, ["jge"] = {"Judeo-Georgian"}, ["jgk"] = {"Gwak"}, ["jgo"] = {"Ngomba"}, ["jhi"] = {"Jehai"}, ["jhs"] = {"Jhankot Sign Language"}, ["jia"] = {"Jina"}, ["jib"] = {"Jibu"}, ["jic"] = {"Tol"}, ["jid"] = {"Bu (Kaduna State)"}, ["jie"] = {"Jilbe"}, ["jig"] = {"Jingulu", "Djingili"}, ["jih"] = {"sTodsde", "Shangzhai"}, ["jii"] = {"Jiiddu"}, ["jil"] = {"Jilim"}, ["jim"] = {"Jimi (Cameroon)"}, ["jio"] = {"Jiamao"}, ["jiq"] = {"Guanyinqiao", "Lavrung"}, ["jit"] = {"Jita"}, ["jiu"] = {"Youle Jinuo"}, ["jiv"] = {"Shuar"}, ["jiy"] = {"Buyuan Jinuo"}, ["jje"] = {"Jejueo"}, ["jjr"] = {"Bankal"}, ["jka"] = {"Kaera"}, ["jkm"] = {"Mobwa Karen"}, ["jko"] = {"Kubo"}, ["jkp"] = {"Paku Karen"}, ["jkr"] = {"Koro (India)"}, ["jks"] = {"Amami Koniya Sign Language"}, ["jku"] = {"Labir"}, ["jle"] = {"Ngile"}, ["jls"] = {"Jamaican Sign Language"}, ["jma"] = {"Dima"}, ["jmb"] = {"Zumbun"}, ["jmc"] = {"Machame"}, ["jmd"] = {"Yamdena"}, ["jmi"] = {"Jimi (Nigeria)"}, ["jml"] = {"Jumli"}, ["jmn"] = {"Makuri Naga"}, ["jmr"] = {"Kamara"}, ["jms"] = {"Mashi (Nigeria)"}, ["jmw"] = {"Mouwase"}, ["jmx"] = {"Western Juxtlahuaca Mixtec"}, ["jna"] = {"Jangshung"}, ["jnd"] = {"Jandavra"}, ["jng"] = {"Yangman"}, ["jni"] = {"Janji"}, ["jnj"] = {"Yemsa"}, ["jnl"] = {"Rawat"}, ["jns"] = {"Jaunsari"}, ["job"] = {"Joba"}, ["jod"] = {"Wojenaka"}, ["jog"] = {"Jogi"}, ["jor"] = {"Jorá"}, ["jos"] = {"Jordanian Sign Language"}, ["jow"] = {"Jowulu"}, ["jpa"] = {"Jewish Palestinian Aramaic"}, ["jpr"] = {"Judeo-Persian"}, ["jpx"] = {"Japanese (family)"}, ["jqr"] = {"Jaqaru"}, ["jra"] = {"Jarai"}, ["jrb"] = {"Judeo-Arabic"}, ["jrr"] = {"Jiru"}, ["jrt"] = {"Jakattoe"}, ["jru"] = {"Japrería"}, ["jsl"] = {"Japanese Sign Language"}, ["jua"] = {"Júma"}, ["jub"] = {"Wannu"}, ["juc"] = {"Jurchen"}, ["jud"] = {"Worodougou"}, ["juh"] = {"Hõne"}, ["jui"] = {"Ngadjuri"}, ["juk"] = {"Wapan"}, ["jul"] = {"Jirel"}, ["jum"] = {"Jumjum"}, ["jun"] = {"Juang"}, ["juo"] = {"Jiba"}, ["jup"] = {"Hupdë"}, ["jur"] = {"Jurúna"}, ["jus"] = {"Jumla Sign Language"}, ["jut"] = {"Jutish"}, ["juu"] = {"Ju"}, ["juw"] = {"Wãpha"}, ["juy"] = {"Juray"}, ["jvd"] = {"Javindo"}, ["jvn"] = {"Caribbean Javanese"}, ["jwi"] = {"Jwira-Pepesa"}, ["jya"] = {"Jiarong"}, ["jye"] = {"Judeo-Yemeni Arabic"}, ["jyy"] = {"Jaya"}, ["kaa"] = {"Kara-Kalpak", "Karakalpak"}, ["kab"] = {"Kabyle"}, ["kac"] = {"Kachin", "Jingpho"}, ["kad"] = {"Adara"}, ["kae"] = {"Ketangalan"}, ["kaf"] = {"Katso"}, ["kag"] = {"Kajaman"}, ["kah"] = {"Kara (Central African Republic)"}, ["kai"] = {"Karekare"}, ["kaj"] = {"Jju"}, ["kak"] = {"Kalanguya", "Kayapa Kallahan"}, ["kam"] = {"Kamba (Kenya)"}, ["kao"] = {"Xaasongaxango"}, ["kap"] = {"Bezhta"}, ["kaq"] = {"Capanahua"}, ["kar"] = {"Karen languages"}, ["kav"] = {"Katukína"}, ["kaw"] = {"Kawi"}, ["kax"] = {"Kao"}, ["kay"] = {"Kamayurá"}, ["kba"] = {"Kalarko"}, ["kbb"] = {"Kaxuiâna"}, ["kbc"] = {"Kadiwéu"}, ["kbd"] = {"Kabardian"}, ["kbe"] = {"Kanju"}, ["kbg"] = {"Khamba"}, ["kbh"] = {"Camsá"}, ["kbi"] = {"Kaptiau"}, ["kbj"] = {"Kari"}, ["kbk"] = {"Grass Koiari"}, ["kbl"] = {"Kanembu"}, ["kbm"] = {"Iwal"}, ["kbn"] = {"Kare (Central African Republic)"}, ["kbo"] = {"Keliko"}, ["kbp"] = {"Kabiyè"}, ["kbq"] = {"Kamano"}, ["kbr"] = {"Kafa"}, ["kbs"] = {"Kande"}, ["kbt"] = {"Abadi"}, ["kbu"] = {"Kabutra"}, ["kbv"] = {"Dera (Indonesia)"}, ["kbw"] = {"Kaiep"}, ["kbx"] = {"Ap Ma"}, ["kby"] = {"Manga Kanuri"}, ["kbz"] = {"Duhwa"}, ["kca"] = {"Khanty"}, ["kcb"] = {"Kawacha"}, ["kcc"] = {"Lubila"}, ["kcd"] = {"Ngkâlmpw Kanum"}, ["kce"] = {"Kaivi"}, ["kcf"] = {"Ukaan"}, ["kcg"] = {"Tyap"}, ["kch"] = {"Vono"}, ["kci"] = {"Kamantan"}, ["kcj"] = {"Kobiana"}, ["kck"] = {"Kalanga"}, ["kcl"] = {"Kela (Papua New Guinea)", "Kala"}, ["kcm"] = {"Gula (Central African Republic)"}, ["kcn"] = {"Nubi"}, ["kco"] = {"Kinalakna"}, ["kcp"] = {"Kanga"}, ["kcq"] = {"Kamo"}, ["kcr"] = {"Katla"}, ["kcs"] = {"Koenoem"}, ["kct"] = {"Kaian"}, ["kcu"] = {"Kami (Tanzania)"}, ["kcv"] = {"Kete"}, ["kcw"] = {"Kabwari"}, ["kcx"] = {"Kachama-Ganjule"}, ["kcy"] = {"Korandje"}, ["kcz"] = {"Konongo"}, ["kda"] = {"Worimi"}, ["kdc"] = {"Kutu"}, ["kdd"] = {"Yankunytjatjara"}, ["kde"] = {"Makonde"}, ["kdf"] = {"Mamusi"}, ["kdg"] = {"Seba"}, ["kdh"] = {"Tem"}, ["kdi"] = {"Kumam"}, ["kdj"] = {"Karamojong"}, ["kdk"] = {"Numèè", "Kwényi"}, ["kdl"] = {"Tsikimba"}, ["kdm"] = {"Kagoma"}, ["kdn"] = {"Kunda"}, ["kdo"] = {"Kordofanian languages"}, ["kdp"] = {"Kaningdon-Nindem"}, ["kdq"] = {"Koch"}, ["kdr"] = {"Karaim"}, ["kdt"] = {"Kuy"}, ["kdu"] = {"Kadaru"}, ["kdw"] = {"Koneraw"}, ["kdx"] = {"Kam"}, ["kdy"] = {"Keder", "Keijar"}, ["kdz"] = {"Kwaja"}, ["kea"] = {"Kabuverdianu"}, ["keb"] = {"Kélé"}, ["kec"] = {"Keiga"}, ["ked"] = {"Kerewe"}, ["kee"] = {"Eastern Keres"}, ["kef"] = {"Kpessi"}, ["keg"] = {"Tese"}, ["keh"] = {"Keak"}, ["kei"] = {"Kei"}, ["kej"] = {"Kadar"}, ["kek"] = {"Kekchí"}, ["kel"] = {"Kela (Democratic Republic of Congo)"}, ["kem"] = {"Kemak"}, ["ken"] = {"Kenyang"}, ["keo"] = {"Kakwa"}, ["kep"] = {"Kaikadi"}, ["keq"] = {"Kamar"}, ["ker"] = {"Kera"}, ["kes"] = {"Kugbo"}, ["ket"] = {"Ket"}, ["keu"] = {"Akebu"}, ["kev"] = {"Kanikkaran"}, ["kew"] = {"West Kewa"}, ["kex"] = {"Kukna"}, ["key"] = {"Kupia"}, ["kez"] = {"Kukele"}, ["kfa"] = {"Kodava"}, ["kfb"] = {"Northwestern Kolami"}, ["kfc"] = {"Konda-Dora"}, ["kfd"] = {"Korra Koraga"}, ["kfe"] = {"Kota (India)"}, ["kff"] = {"Koya"}, ["kfg"] = {"Kudiya"}, ["kfh"] = {"Kurichiya"}, ["kfi"] = {"Kannada Kurumba"}, ["kfj"] = {"Kemiehua"}, ["kfk"] = {"Kinnauri"}, ["kfl"] = {"Kung"}, ["kfm"] = {"Khunsari"}, ["kfn"] = {"Kuk"}, ["kfo"] = {"Koro (Côte d'Ivoire)"}, ["kfp"] = {"Korwa"}, ["kfq"] = {"Korku"}, ["kfr"] = {"Kachhi", "Kutchi"}, ["kfs"] = {"Bilaspuri"}, ["kft"] = {"Kanjari"}, ["kfu"] = {"Katkari"}, ["kfv"] = {"Kurmukar"}, ["kfw"] = {"Kharam Naga"}, ["kfx"] = {"Kullu Pahari"}, ["kfy"] = {"Kumaoni"}, ["kfz"] = {"Koromfé"}, ["kga"] = {"Koyaga"}, ["kgb"] = {"Kawe"}, ["kge"] = {"Komering"}, ["kgf"] = {"Kube"}, ["kgg"] = {"Kusunda"}, ["kgi"] = {"Selangor Sign Language"}, ["kgj"] = {"Gamale Kham"}, ["kgk"] = {"Kaiwá"}, ["kgl"] = {"Kunggari"}, ["kgn"] = {"Karingani"}, ["kgo"] = {"Krongo"}, ["kgp"] = {"Kaingang"}, ["kgq"] = {"Kamoro"}, ["kgr"] = {"Abun"}, ["kgs"] = {"Kumbainggar"}, ["kgt"] = {"Somyev"}, ["kgu"] = {"Kobol"}, ["kgv"] = {"Karas"}, ["kgw"] = {"Karon Dori"}, ["kgx"] = {"Kamaru"}, ["kgy"] = {"Kyerung"}, ["kha"] = {"Khasi"}, ["khb"] = {"Lü"}, ["khc"] = {"Tukang Besi North"}, ["khd"] = {"Bädi Kanum"}, ["khe"] = {"Korowai"}, ["khf"] = {"Khuen"}, ["khg"] = {"Khams Tibetan"}, ["khh"] = {"Kehu"}, ["khi"] = {"Khoisan languages"}, ["khj"] = {"Kuturmi"}, ["khk"] = {"Halh Mongolian"}, ["khl"] = {"Lusi"}, ["khn"] = {"Khandesi"}, ["kho"] = {"Khotanese", "Sakan"}, ["khp"] = {"Kapori", "Kapauri"}, ["khq"] = {"Koyra Chiini Songhay"}, ["khr"] = {"Kharia"}, ["khs"] = {"Kasua"}, ["kht"] = {"Khamti"}, ["khu"] = {"Nkhumbi"}, ["khv"] = {"Khvarshi"}, ["khw"] = {"Khowar"}, ["khx"] = {"Kanu"}, ["khy"] = {"Kele (Democratic Republic of Congo)"}, ["khz"] = {"Keapara"}, ["kia"] = {"Kim"}, ["kib"] = {"Koalib"}, ["kic"] = {"Kickapoo"}, ["kid"] = {"Koshin"}, ["kie"] = {"Kibet"}, ["kif"] = {"Eastern Parbate Kham"}, ["kig"] = {"Kimaama", "Kimaghima"}, ["kih"] = {"Kilmeri"}, ["kii"] = {"Kitsai"}, ["kij"] = {"Kilivila"}, ["kil"] = {"Kariya"}, ["kim"] = {"Karagas"}, ["kio"] = {"Kiowa"}, ["kip"] = {"Sheshi Kham"}, ["kiq"] = {"Kosadle", "Kosare"}, ["kis"] = {"Kis"}, ["kit"] = {"Agob"}, ["kiu"] = {"Kirmanjki (individual language)"}, ["kiv"] = {"Kimbu"}, ["kiw"] = {"Northeast Kiwai"}, ["kix"] = {"Khiamniungan Naga"}, ["kiy"] = {"Kirikiri"}, ["kiz"] = {"Kisi"}, ["kja"] = {"Mlap"}, ["kjb"] = {"Q'anjob'al", "Kanjobal"}, ["kjc"] = {"Coastal Konjo"}, ["kjd"] = {"Southern Kiwai"}, ["kje"] = {"Kisar"}, ["kjg"] = {"Khmu"}, ["kjh"] = {"Khakas"}, ["kji"] = {"Zabana"}, ["kjj"] = {"Khinalugh"}, ["kjk"] = {"Highland Konjo"}, ["kjl"] = {"Western Parbate Kham"}, ["kjm"] = {"Kháng"}, ["kjn"] = {"Kunjen"}, ["kjo"] = {"Harijan Kinnauri"}, ["kjp"] = {"Pwo Eastern Karen"}, ["kjq"] = {"Western Keres"}, ["kjr"] = {"Kurudu"}, ["kjs"] = {"East Kewa"}, ["kjt"] = {"Phrae Pwo Karen"}, ["kju"] = {"Kashaya"}, ["kjv"] = {"Kaikavian Literary Language"}, ["kjx"] = {"Ramopa"}, ["kjy"] = {"Erave"}, ["kjz"] = {"Bumthangkha"}, ["kka"] = {"Kakanda"}, ["kkb"] = {"Kwerisa"}, ["kkc"] = {"Odoodee"}, ["kkd"] = {"Kinuku"}, ["kke"] = {"Kakabe"}, ["kkf"] = {"Kalaktang Monpa"}, ["kkg"] = {"Mabaka Valley Kalinga"}, ["kkh"] = {"Khün"}, ["kki"] = {"Kagulu"}, ["kkj"] = {"Kako"}, ["kkk"] = {"Kokota"}, ["kkl"] = {"Kosarek Yale"}, ["kkm"] = {"Kiong"}, ["kkn"] = {"Kon Keu"}, ["kko"] = {"Karko"}, ["kkp"] = {"Gugubera", "Koko-Bera"}, ["kkq"] = {"Kaeku"}, ["kkr"] = {"Kir-Balar"}, ["kks"] = {"Giiwo"}, ["kkt"] = {"Koi"}, ["kku"] = {"Tumi"}, ["kkv"] = {"Kangean"}, ["kkw"] = {"Teke-Kukuya"}, ["kkx"] = {"Kohin"}, ["kky"] = {"Guugu Yimidhirr", "Guguyimidjir"}, ["kkz"] = {"Kaska"}, ["kla"] = {"Klamath-Modoc"}, ["klb"] = {"Kiliwa"}, ["klc"] = {"Kolbila"}, ["kld"] = {"Gamilaraay"}, ["kle"] = {"Kulung (Nepal)"}, ["klf"] = {"Kendeje"}, ["klg"] = {"Tagakaulo"}, ["klh"] = {"Weliki"}, ["kli"] = {"Kalumpang"}, ["klj"] = {"Khalaj"}, ["klk"] = {"Kono (Nigeria)"}, ["kll"] = {"Kagan Kalagan"}, ["klm"] = {"Migum"}, ["kln"] = {"Kalenjin"}, ["klo"] = {"Kapya"}, ["klp"] = {"Kamasa"}, ["klq"] = {"Rumu"}, ["klr"] = {"Khaling"}, ["kls"] = {"Kalasha"}, ["klt"] = {"Nukna"}, ["klu"] = {"Klao"}, ["klv"] = {"Maskelynes"}, ["klw"] = {"Tado", "Lindu"}, ["klx"] = {"Koluwawa"}, ["kly"] = {"Kalao"}, ["klz"] = {"Kabola"}, ["kma"] = {"Konni"}, ["kmb"] = {"Kimbundu"}, ["kmc"] = {"Southern Dong"}, ["kmd"] = {"Majukayang Kalinga"}, ["kme"] = {"Bakole"}, ["kmf"] = {"Kare (Papua New Guinea)"}, ["kmg"] = {"Kâte"}, ["kmh"] = {"Kalam"}, ["kmi"] = {"Kami (Nigeria)"}, ["kmj"] = {"Kumarbhag Paharia"}, ["kmk"] = {"Limos Kalinga"}, ["kml"] = {"Tanudan Kalinga"}, ["kmm"] = {"Kom (India)"}, ["kmn"] = {"Awtuw"}, ["kmo"] = {"Kwoma"}, ["kmp"] = {"Gimme"}, ["kmq"] = {"Kwama"}, ["kmr"] = {"Northern Kurdish"}, ["kms"] = {"Kamasau"}, ["kmt"] = {"Kemtuik"}, ["kmu"] = {"Kanite"}, ["kmv"] = {"Karipúna Creole French"}, ["kmw"] = {"Komo (Democratic Republic of Congo)"}, ["kmx"] = {"Waboda"}, ["kmy"] = {"Koma"}, ["kmz"] = {"Khorasani Turkish"}, ["kna"] = {"Dera (Nigeria)"}, ["knb"] = {"Lubuagan Kalinga"}, ["knc"] = {"Central Kanuri"}, ["knd"] = {"Konda"}, ["kne"] = {"Kankanaey"}, ["knf"] = {"Mankanya"}, ["kng"] = {"Koongo"}, ["kni"] = {"Kanufi"}, ["knj"] = {"Western Kanjobal"}, ["knk"] = {"Kuranko"}, ["knl"] = {"Keninjal"}, ["knm"] = {"Kanamarí"}, ["knn"] = {"Konkani (individual language)"}, ["kno"] = {"Kono (Sierra Leone)"}, ["knp"] = {"Kwanja"}, ["knq"] = {"Kintaq"}, ["knr"] = {"Kaningra"}, ["kns"] = {"Kensiu"}, ["knt"] = {"Panoan Katukína"}, ["knu"] = {"Kono (Guinea)"}, ["knv"] = {"Tabo"}, ["knw"] = {"Kung-Ekoka"}, ["knx"] = {"Kendayan", "Salako"}, ["kny"] = {"Kanyok"}, ["knz"] = {"Kalamsé"}, ["koa"] = {"Konomala"}, ["koc"] = {"Kpati"}, ["kod"] = {"Kodi"}, ["koe"] = {"Kacipo-Bale Suri"}, ["kof"] = {"Kubi"}, ["kog"] = {"Cogui", "Kogi"}, ["koh"] = {"Koyo"}, ["koi"] = {"Komi-Permyak"}, ["kok"] = {"Konkani (macrolanguage)"}, ["kol"] = {"Kol (Papua New Guinea)"}, ["koo"] = {"Konzo"}, ["kop"] = {"Waube"}, ["koq"] = {"Kota (Gabon)"}, ["kos"] = {"Kosraean"}, ["kot"] = {"Lagwan"}, ["kou"] = {"Koke"}, ["kov"] = {"Kudu-Camo"}, ["kow"] = {"Kugama"}, ["koy"] = {"Koyukon"}, ["koz"] = {"Korak"}, ["kpa"] = {"Kutto"}, ["kpb"] = {"Mullu Kurumba"}, ["kpc"] = {"Curripaco"}, ["kpd"] = {"Koba"}, ["kpe"] = {"Kpelle"}, ["kpf"] = {"Komba"}, ["kpg"] = {"Kapingamarangi"}, ["kph"] = {"Kplang"}, ["kpi"] = {"Kofei"}, ["kpj"] = {"Karajá"}, ["kpk"] = {"Kpan"}, ["kpl"] = {"Kpala"}, ["kpm"] = {"Koho"}, ["kpn"] = {"Kepkiriwát"}, ["kpo"] = {"Ikposo"}, ["kpq"] = {"Korupun-Sela"}, ["kpr"] = {"Korafe-Yegha"}, ["kps"] = {"Tehit"}, ["kpt"] = {"Karata"}, ["kpu"] = {"Kafoa"}, ["kpv"] = {"Komi-Zyrian"}, ["kpw"] = {"Kobon"}, ["kpx"] = {"Mountain Koiali"}, ["kpy"] = {"Koryak"}, ["kpz"] = {"Kupsabiny"}, ["kqa"] = {"Mum"}, ["kqb"] = {"Kovai"}, ["kqc"] = {"Doromu-Koki"}, ["kqd"] = {"Koy Sanjaq Surat"}, ["kqe"] = {"Kalagan"}, ["kqf"] = {"Kakabai"}, ["kqg"] = {"Khe"}, ["kqh"] = {"Kisankasa"}, ["kqi"] = {"Koitabu"}, ["kqj"] = {"Koromira"}, ["kqk"] = {"Kotafon Gbe"}, ["kql"] = {"Kyenele"}, ["kqm"] = {"Khisa"}, ["kqn"] = {"Kaonde"}, ["kqo"] = {"Eastern Krahn"}, ["kqp"] = {"Kimré"}, ["kqq"] = {"Krenak"}, ["kqr"] = {"Kimaragang"}, ["kqs"] = {"Northern Kissi"}, ["kqt"] = {"Klias River Kadazan"}, ["kqu"] = {"Seroa"}, ["kqv"] = {"Okolod"}, ["kqw"] = {"Kandas"}, ["kqx"] = {"Mser"}, ["kqy"] = {"Koorete"}, ["kqz"] = {"Korana"}, ["kra"] = {"Kumhali"}, ["krb"] = {"Karkin"}, ["krc"] = {"Karachay-Balkar"}, ["krd"] = {"Kairui-Midiki"}, ["kre"] = {"Panará"}, ["krf"] = {"Koro (Vanuatu)"}, ["krh"] = {"Kurama"}, ["kri"] = {"Krio"}, ["krj"] = {"Kinaray-A"}, ["krk"] = {"Kerek"}, ["krl"] = {"Karelian"}, ["krn"] = {"Sapo"}, ["kro"] = {"Kru languages"}, ["krp"] = {"Durop"}, ["krr"] = {"Krung"}, ["krs"] = {"Gbaya (Sudan)"}, ["krt"] = {"Tumari Kanuri"}, ["kru"] = {"Kurukh"}, ["krv"] = {"Kavet"}, ["krw"] = {"Western Krahn"}, ["krx"] = {"Karon"}, ["kry"] = {"Kryts"}, ["krz"] = {"Sota Kanum"}, ["ksb"] = {"Shambala"}, ["ksc"] = {"Southern Kalinga"}, ["ksd"] = {"Kuanua"}, ["kse"] = {"Kuni"}, ["ksf"] = {"Bafia"}, ["ksg"] = {"Kusaghe"}, ["ksh"] = {"Kölsch"}, ["ksi"] = {"Krisa", "I'saka"}, ["ksj"] = {"Uare"}, ["ksk"] = {"Kansa"}, ["ksl"] = {"Kumalu"}, ["ksm"] = {"Kumba"}, ["ksn"] = {"Kasiguranin"}, ["kso"] = {"Kofa"}, ["ksp"] = {"Kaba"}, ["ksq"] = {"Kwaami"}, ["ksr"] = {"Borong"}, ["kss"] = {"Southern Kisi"}, ["kst"] = {"Winyé"}, ["ksu"] = {"Khamyang"}, ["ksv"] = {"Kusu"}, ["ksw"] = {"S'gaw Karen"}, ["ksx"] = {"Kedang"}, ["ksy"] = {"Kharia Thar"}, ["ksz"] = {"Kodaku"}, ["kta"] = {"Katua"}, ["ktb"] = {"Kambaata"}, ["ktc"] = {"Kholok"}, ["ktd"] = {"Kokata", "Kukatha"}, ["kte"] = {"Nubri"}, ["ktf"] = {"Kwami"}, ["ktg"] = {"Kalkutung"}, ["kth"] = {"Karanga"}, ["kti"] = {"North Muyu"}, ["ktj"] = {"Plapo Krumen"}, ["ktk"] = {"Kaniet"}, ["ktl"] = {"Koroshi"}, ["ktm"] = {"Kurti"}, ["ktn"] = {"Karitiâna"}, ["kto"] = {"Kuot"}, ["ktp"] = {"Kaduo"}, ["ktq"] = {"Katabaga"}, ["kts"] = {"South Muyu"}, ["ktt"] = {"Ketum"}, ["ktu"] = {"Kituba (Democratic Republic of Congo)"}, ["ktv"] = {"Eastern Katu"}, ["ktw"] = {"Kato"}, ["ktx"] = {"Kaxararí"}, ["kty"] = {"Kango (Bas-Uélé District)"}, ["ktz"] = {"Juǀʼhoan", "Juǀʼhoansi"}, ["kub"] = {"Kutep"}, ["kuc"] = {"Kwinsu"}, ["kud"] = {"'Auhelawa"}, ["kue"] = {"Kuman (Papua New Guinea)"}, ["kuf"] = {"Western Katu"}, ["kug"] = {"Kupa"}, ["kuh"] = {"Kushi"}, ["kui"] = {"Kuikúro-Kalapálo", "Kalapalo"}, ["kuj"] = {"Kuria"}, ["kuk"] = {"Kepo'"}, ["kul"] = {"Kulere"}, ["kum"] = {"Kumyk"}, ["kun"] = {"Kunama"}, ["kuo"] = {"Kumukio"}, ["kup"] = {"Kunimaipa"}, ["kuq"] = {"Karipuna"}, ["kus"] = {"Kusaal"}, ["kut"] = {"Kutenai"}, ["kuu"] = {"Upper Kuskokwim"}, ["kuv"] = {"Kur"}, ["kuw"] = {"Kpagua"}, ["kux"] = {"Kukatja"}, ["kuy"] = {"Kuuku-Ya'u"}, ["kuz"] = {"Kunza"}, ["kva"] = {"Bagvalal"}, ["kvb"] = {"Kubu"}, ["kvc"] = {"Kove"}, ["kvd"] = {"Kui (Indonesia)"}, ["kve"] = {"Kalabakan"}, ["kvf"] = {"Kabalai"}, ["kvg"] = {"Kuni-Boazi"}, ["kvh"] = {"Komodo"}, ["kvi"] = {"Kwang"}, ["kvj"] = {"Psikye"}, ["kvk"] = {"Korean Sign Language"}, ["kvl"] = {"Kayaw"}, ["kvm"] = {"Kendem"}, ["kvn"] = {"Border Kuna"}, ["kvo"] = {"Dobel"}, ["kvp"] = {"Kompane"}, ["kvq"] = {"Geba Karen"}, ["kvr"] = {"Kerinci"}, ["kvt"] = {"Lahta Karen", "Lahta"}, ["kvu"] = {"Yinbaw Karen"}, ["kvv"] = {"Kola"}, ["kvw"] = {"Wersing"}, ["kvx"] = {"Parkari Koli"}, ["kvy"] = {"Yintale Karen", "Yintale"}, ["kvz"] = {"Tsakwambo", "Tsaukambo"}, ["kwa"] = {"Dâw"}, ["kwb"] = {"Kwa"}, ["kwc"] = {"Likwala"}, ["kwd"] = {"Kwaio"}, ["kwe"] = {"Kwerba"}, ["kwf"] = {"Kwara'ae"}, ["kwg"] = {"Sara Kaba Deme"}, ["kwh"] = {"Kowiai"}, ["kwi"] = {"Awa-Cuaiquer"}, ["kwj"] = {"Kwanga"}, ["kwk"] = {"Kwakiutl"}, ["kwl"] = {"Kofyar"}, ["kwm"] = {"Kwambi"}, ["kwn"] = {"Kwangali"}, ["kwo"] = {"Kwomtari"}, ["kwp"] = {"Kodia"}, ["kwr"] = {"Kwer"}, ["kws"] = {"Kwese"}, ["kwt"] = {"Kwesten"}, ["kwu"] = {"Kwakum"}, ["kwv"] = {"Sara Kaba Náà"}, ["kww"] = {"Kwinti"}, ["kwx"] = {"Khirwar"}, ["kwy"] = {"San Salvador Kongo"}, ["kwz"] = {"Kwadi"}, ["kxa"] = {"Kairiru"}, ["kxb"] = {"Krobu"}, ["kxc"] = {"Konso", "Khonso"}, ["kxd"] = {"Brunei"}, ["kxf"] = {"Manumanaw Karen", "Manumanaw"}, ["kxh"] = {"Karo (Ethiopia)"}, ["kxi"] = {"Keningau Murut"}, ["kxj"] = {"Kulfa"}, ["kxk"] = {"Zayein Karen"}, ["kxm"] = {"Northern Khmer"}, ["kxn"] = {"Kanowit-Tanjong Melanau"}, ["kxo"] = {"Kanoé"}, ["kxp"] = {"Wadiyara Koli"}, ["kxq"] = {"Smärky Kanum"}, ["kxr"] = {"Koro (Papua New Guinea)"}, ["kxs"] = {"Kangjia"}, ["kxt"] = {"Koiwat"}, ["kxv"] = {"Kuvi"}, ["kxw"] = {"Konai"}, ["kxx"] = {"Likuba"}, ["kxy"] = {"Kayong"}, ["kxz"] = {"Kerewo"}, ["kya"] = {"Kwaya"}, ["kyb"] = {"Butbut Kalinga"}, ["kyc"] = {"Kyaka"}, ["kyd"] = {"Karey"}, ["kye"] = {"Krache"}, ["kyf"] = {"Kouya"}, ["kyg"] = {"Keyagana"}, ["kyh"] = {"Karok"}, ["kyi"] = {"Kiput"}, ["kyj"] = {"Karao"}, ["kyk"] = {"Kamayo"}, ["kyl"] = {"Kalapuya"}, ["kym"] = {"Kpatili"}, ["kyn"] = {"Northern Binukidnon"}, ["kyo"] = {"Kelon"}, ["kyp"] = {"Kang"}, ["kyq"] = {"Kenga"}, ["kyr"] = {"Kuruáya"}, ["kys"] = {"Baram Kayan"}, ["kyt"] = {"Kayagar"}, ["kyu"] = {"Western Kayah"}, ["kyv"] = {"Kayort"}, ["kyw"] = {"Kudmali"}, ["kyx"] = {"Rapoisi"}, ["kyy"] = {"Kambaira"}, ["kyz"] = {"Kayabí"}, ["kza"] = {"Western Karaboro"}, ["kzb"] = {"Kaibobo"}, ["kzc"] = {"Bondoukou Kulango"}, ["kzd"] = {"Kadai"}, ["kze"] = {"Kosena"}, ["kzf"] = {"Da'a Kaili"}, ["kzg"] = {"Kikai"}, ["kzi"] = {"Kelabit"}, ["kzk"] = {"Kazukuru"}, ["kzl"] = {"Kayeli"}, ["kzm"] = {"Kais"}, ["kzn"] = {"Kokola"}, ["kzo"] = {"Kaningi"}, ["kzp"] = {"Kaidipang"}, ["kzq"] = {"Kaike"}, ["kzr"] = {"Karang"}, ["kzs"] = {"Sugut Dusun"}, ["kzu"] = {"Kayupulau"}, ["kzv"] = {"Komyandaret"}, ["kzw"] = {"Karirí-Xocó"}, ["kzx"] = {"Kamarian"}, ["kzy"] = {"Kango (Tshopo District)"}, ["kzz"] = {"Kalabra"}, ["laa"] = {"Southern Subanen"}, ["lab"] = {"Linear A"}, ["lac"] = {"Lacandon"}, ["lad"] = {"Ladino"}, ["lae"] = {"Pattani"}, ["laf"] = {"Lafofa"}, ["lag"] = {"Rangi"}, ["lah"] = {"Lahnda"}, ["lai"] = {"Lambya"}, ["laj"] = {"Lango (Uganda)"}, ["lal"] = {"Lalia"}, ["lam"] = {"Lamba"}, ["lan"] = {"Laru"}, ["lap"] = {"Laka (Chad)"}, ["laq"] = {"Qabiao"}, ["lar"] = {"Larteh"}, ["las"] = {"Lama (Togo)"}, ["lau"] = {"Laba"}, ["law"] = {"Lauje"}, ["lax"] = {"Tiwa"}, ["lay"] = {"Lama Bai"}, ["laz"] = {"Aribwatsa"}, ["lbb"] = {"Label"}, ["lbc"] = {"Lakkia"}, ["lbe"] = {"Lak"}, ["lbf"] = {"Tinani"}, ["lbg"] = {"Laopang"}, ["lbi"] = {"La'bi"}, ["lbj"] = {"Ladakhi"}, ["lbk"] = {"Central Bontok"}, ["lbl"] = {"Libon Bikol"}, ["lbm"] = {"Lodhi"}, ["lbn"] = {"Rmeet"}, ["lbo"] = {"Laven"}, ["lbq"] = {"Wampar"}, ["lbr"] = {"Lohorung"}, ["lbs"] = {"Libyan Sign Language"}, ["lbt"] = {"Lachi"}, ["lbu"] = {"Labu"}, ["lbv"] = {"Lavatbura-Lamusong"}, ["lbw"] = {"Tolaki"}, ["lbx"] = {"Lawangan"}, ["lby"] = {"Lamalama", "Lamu-Lamu"}, ["lbz"] = {"Lardil"}, ["lcc"] = {"Legenyem"}, ["lcd"] = {"Lola"}, ["lce"] = {"Loncong", "Sekak"}, ["lcf"] = {"Lubu"}, ["lch"] = {"Luchazi"}, ["lcl"] = {"Lisela"}, ["lcm"] = {"Tungag"}, ["lcp"] = {"Western Lawa"}, ["lcq"] = {"Luhu"}, ["lcs"] = {"Lisabata-Nuniali"}, ["lda"] = {"Kla-Dan"}, ["ldb"] = {"Dũya"}, ["ldd"] = {"Luri"}, ["ldg"] = {"Lenyima"}, ["ldh"] = {"Lamja-Dengsa-Tola"}, ["ldi"] = {"Laari"}, ["ldj"] = {"Lemoro"}, ["ldk"] = {"Leelau"}, ["ldl"] = {"Kaan"}, ["ldm"] = {"Landoma"}, ["ldn"] = {"Láadan"}, ["ldo"] = {"Loo"}, ["ldp"] = {"Tso"}, ["ldq"] = {"Lufu"}, ["lea"] = {"Lega-Shabunda"}, ["leb"] = {"Lala-Bisa"}, ["lec"] = {"Leco"}, ["led"] = {"Lendu"}, ["lee"] = {"Lyélé"}, ["lef"] = {"Lelemi"}, ["leh"] = {"Lenje"}, ["lei"] = {"Lemio"}, ["lej"] = {"Lengola"}, ["lek"] = {"Leipon"}, ["lel"] = {"Lele (Democratic Republic of Congo)"}, ["lem"] = {"Nomaande"}, ["len"] = {"Lenca"}, ["leo"] = {"Leti (Cameroon)"}, ["lep"] = {"Lepcha"}, ["leq"] = {"Lembena"}, ["ler"] = {"Lenkau"}, ["les"] = {"Lese"}, ["let"] = {"Lesing-Gelimi", "Amio-Gelimi"}, ["leu"] = {"Kara (Papua New Guinea)"}, ["lev"] = {"Lamma"}, ["lew"] = {"Ledo Kaili"}, ["lex"] = {"Luang"}, ["ley"] = {"Lemolang"}, ["lez"] = {"Lezghian"}, ["lfa"] = {"Lefa"}, ["lfn"] = {"Lingua Franca Nova"}, ["lga"] = {"Lungga"}, ["lgb"] = {"Laghu"}, ["lgg"] = {"Lugbara"}, ["lgh"] = {"Laghuu"}, ["lgi"] = {"Lengilu"}, ["lgk"] = {"Lingarak", "Neverver"}, ["lgl"] = {"Wala"}, ["lgm"] = {"Lega-Mwenga"}, ["lgn"] = {"T'apo", "Opuuo"}, ["lgo"] = {"Lango (South Sudan)"}, ["lgq"] = {"Logba"}, ["lgr"] = {"Lengo"}, ["lgs"] = {"Guinea-Bissau Sign Language", "Língua Gestual Guineense"}, ["lgt"] = {"Pahi"}, ["lgu"] = {"Longgu"}, ["lgz"] = {"Ligenza"}, ["lha"] = {"Laha (Viet Nam)"}, ["lhh"] = {"Laha (Indonesia)"}, ["lhi"] = {"Lahu Shi"}, ["lhl"] = {"Lahul Lohar"}, ["lhm"] = {"Lhomi"}, ["lhn"] = {"Lahanan"}, ["lhp"] = {"Lhokpu"}, ["lhs"] = {"Mlahsö"}, ["lht"] = {"Lo-Toga"}, ["lhu"] = {"Lahu"}, ["lia"] = {"West-Central Limba"}, ["lib"] = {"Likum"}, ["lic"] = {"Hlai"}, ["lid"] = {"Nyindrou"}, ["lie"] = {"Likila"}, ["lif"] = {"Limbu"}, ["lig"] = {"Ligbi"}, ["lih"] = {"Lihir"}, ["lij"] = {"Ligurian"}, ["lik"] = {"Lika"}, ["lil"] = {"Lillooet"}, ["lio"] = {"Liki"}, ["lip"] = {"Sekpele"}, ["liq"] = {"Libido"}, ["lir"] = {"Liberian English"}, ["lis"] = {"Lisu"}, ["liu"] = {"Logorik"}, ["liv"] = {"Liv"}, ["liw"] = {"Col"}, ["lix"] = {"Liabuku"}, ["liy"] = {"Banda-Bambari"}, ["liz"] = {"Libinza"}, ["lja"] = {"Golpa"}, ["lje"] = {"Rampi"}, ["lji"] = {"Laiyolo"}, ["ljl"] = {"Li'o"}, ["ljp"] = {"Lampung Api"}, ["ljw"] = {"Yirandali"}, ["ljx"] = {"Yuru"}, ["lka"] = {"Lakalei"}, ["lkb"] = {"Kabras", "Lukabaras"}, ["lkc"] = {"Kucong"}, ["lkd"] = {"Lakondê"}, ["lke"] = {"Kenyi"}, ["lkh"] = {"Lakha"}, ["lki"] = {"Laki"}, ["lkj"] = {"Remun"}, ["lkl"] = {"Laeko-Libuat"}, ["lkm"] = {"Kalaamaya"}, ["lkn"] = {"Lakon", "Vure"}, ["lko"] = {"Khayo", "Olukhayo"}, ["lkr"] = {"Päri"}, ["lks"] = {"Kisa", "Olushisa"}, ["lkt"] = {"Lakota"}, ["lku"] = {"Kungkari"}, ["lky"] = {"Lokoya"}, ["lla"] = {"Lala-Roba"}, ["llb"] = {"Lolo"}, ["llc"] = {"Lele (Guinea)"}, ["lld"] = {"Ladin"}, ["lle"] = {"Lele (Papua New Guinea)"}, ["llf"] = {"Hermit"}, ["llg"] = {"Lole"}, ["llh"] = {"Lamu"}, ["lli"] = {"Teke-Laali"}, ["llj"] = {"Ladji Ladji"}, ["llk"] = {"Lelak"}, ["lll"] = {"Lilau"}, ["llm"] = {"Lasalimu"}, ["lln"] = {"Lele (Chad)"}, ["llp"] = {"North Efate"}, ["llq"] = {"Lolak"}, ["lls"] = {"Lithuanian Sign Language"}, ["llu"] = {"Lau"}, ["llx"] = {"Lauan"}, ["lma"] = {"East Limba"}, ["lmb"] = {"Merei"}, ["lmc"] = {"Limilngan"}, ["lmd"] = {"Lumun"}, ["lme"] = {"Pévé"}, ["lmf"] = {"South Lembata"}, ["lmg"] = {"Lamogai"}, ["lmh"] = {"Lambichhong"}, ["lmi"] = {"Lombi"}, ["lmj"] = {"West Lembata"}, ["lmk"] = {"Lamkang"}, ["lml"] = {"Hano"}, ["lmn"] = {"Lambadi"}, ["lmo"] = {"Lombard"}, ["lmp"] = {"Limbum"}, ["lmq"] = {"Lamatuka"}, ["lmr"] = {"Lamalera"}, ["lmu"] = {"Lamenu"}, ["lmv"] = {"Lomaiviti"}, ["lmw"] = {"Lake Miwok"}, ["lmx"] = {"Laimbue"}, ["lmy"] = {"Lamboya"}, ["lna"] = {"Langbashe"}, ["lnb"] = {"Mbalanhu"}, ["lnd"] = {"Lundayeh", "Lun Bawang"}, ["lng"] = {"Langobardic"}, ["lnh"] = {"Lanoh"}, ["lni"] = {"Daantanai'"}, ["lnj"] = {"Leningitij"}, ["lnl"] = {"South Central Banda"}, ["lnm"] = {"Langam"}, ["lnn"] = {"Lorediakarkar"}, ["lns"] = {"Lamnso'"}, ["lnu"] = {"Longuda"}, ["lnw"] = {"Lanima"}, ["lnz"] = {"Lonzo"}, ["loa"] = {"Loloda"}, ["lob"] = {"Lobi"}, ["loc"] = {"Inonhan"}, ["loe"] = {"Saluan"}, ["lof"] = {"Logol"}, ["log"] = {"Logo"}, ["loh"] = {"Laarim", "Narim"}, ["loi"] = {"Loma (Côte d'Ivoire)"}, ["loj"] = {"Lou"}, ["lok"] = {"Loko"}, ["lol"] = {"Mongo"}, ["lom"] = {"Loma (Liberia)"}, ["lon"] = {"Malawi Lomwe"}, ["loo"] = {"Lombo"}, ["lop"] = {"Lopa"}, ["loq"] = {"Lobala"}, ["lor"] = {"Téén"}, ["los"] = {"Loniu"}, ["lot"] = {"Otuho"}, ["lou"] = {"Louisiana Creole"}, ["lov"] = {"Lopi"}, ["low"] = {"Tampias Lobu"}, ["lox"] = {"Loun"}, ["loy"] = {"Loke"}, ["loz"] = {"Lozi"}, ["lpa"] = {"Lelepa"}, ["lpe"] = {"Lepki"}, ["lpn"] = {"Long Phuri Naga"}, ["lpo"] = {"Lipo"}, ["lpx"] = {"Lopit"}, ["lqr"] = {"Logir"}, ["lra"] = {"Rara Bakati'"}, ["lrc"] = {"Northern Luri"}, ["lre"] = {"Laurentian"}, ["lrg"] = {"Laragia"}, ["lri"] = {"Marachi", "Olumarachi"}, ["lrk"] = {"Loarki"}, ["lrl"] = {"Lari"}, ["lrm"] = {"Marama", "Olumarama"}, ["lrn"] = {"Lorang"}, ["lro"] = {"Laro"}, ["lrr"] = {"Southern Yamphu"}, ["lrt"] = {"Larantuka Malay"}, ["lrv"] = {"Larevat"}, ["lrz"] = {"Lemerig"}, ["lsa"] = {"Lasgerdi"}, ["lsb"] = {"Burundian Sign Language", "Langue des Signes Burundaise"}, ["lsc"] = {"Albarradas Sign Language", "Lengua de señas Albarradas"}, ["lsd"] = {"Lishana Deni"}, ["lse"] = {"Lusengo"}, ["lsh"] = {"Lish"}, ["lsi"] = {"Lashi"}, ["lsl"] = {"Latvian Sign Language"}, ["lsm"] = {"Saamia", "Olusamia"}, ["lsn"] = {"Tibetan Sign Language"}, ["lso"] = {"Laos Sign Language"}, ["lsp"] = {"Panamanian Sign Language", "Lengua de Señas Panameñas"}, ["lsr"] = {"Aruop"}, ["lss"] = {"Lasi"}, ["lst"] = {"Trinidad and Tobago Sign Language"}, ["lsv"] = {"Sivia Sign Language"}, ["lsw"] = {"Seychelles Sign Language", "Lalang Siny Seselwa", "Langue des Signes Seychelloise"}, ["lsy"] = {"Mauritian Sign Language"}, ["ltc"] = {"Late Middle Chinese"}, ["ltg"] = {"Latgalian"}, ["lth"] = {"Thur"}, ["lti"] = {"Leti (Indonesia)"}, ["ltn"] = {"Latundê"}, ["lto"] = {"Tsotso", "Olutsotso"}, ["lts"] = {"Tachoni", "Lutachoni"}, ["ltu"] = {"Latu"}, ["lua"] = {"Luba-Lulua"}, ["luc"] = {"Aringa"}, ["lud"] = {"Ludian"}, ["lue"] = {"Luvale"}, ["luf"] = {"Laua"}, ["lui"] = {"Luiseno"}, ["luj"] = {"Luna"}, ["luk"] = {"Lunanakha"}, ["lul"] = {"Olu'bo"}, ["lum"] = {"Luimbi"}, ["lun"] = {"Lunda"}, ["luo"] = {"Luo (Kenya and Tanzania)", "Dholuo"}, ["lup"] = {"Lumbu"}, ["luq"] = {"Lucumi"}, ["lur"] = {"Laura"}, ["lus"] = {"Lushai"}, ["lut"] = {"Lushootseed"}, ["luu"] = {"Lumba-Yakkha"}, ["luv"] = {"Luwati"}, ["luw"] = {"Luo (Cameroon)"}, ["luy"] = {"Luyia", "Oluluyia"}, ["luz"] = {"Southern Luri"}, ["lva"] = {"Maku'a"}, ["lvi"] = {"Lavi"}, ["lvk"] = {"Lavukaleve"}, ["lvl"] = {"Lwel"}, ["lvs"] = {"Standard Latvian"}, ["lvu"] = {"Levuka"}, ["lwa"] = {"Lwalu"}, ["lwe"] = {"Lewo Eleng"}, ["lwg"] = {"Wanga", "Oluwanga"}, ["lwh"] = {"White Lachi"}, ["lwl"] = {"Eastern Lawa"}, ["lwm"] = {"Laomian"}, ["lwo"] = {"Luwo"}, ["lws"] = {"Malawian Sign Language"}, ["lwt"] = {"Lewotobi"}, ["lwu"] = {"Lawu"}, ["lww"] = {"Lewo"}, ["lxm"] = {"Lakurumau"}, ["lya"] = {"Layakha"}, ["lyg"] = {"Lyngngam"}, ["lyn"] = {"Luyana"}, ["lzh"] = {"Literary Chinese"}, ["lzl"] = {"Litzlitz"}, ["lzn"] = {"Leinong Naga"}, ["lzz"] = {"Laz"}, ["maa"] = {"San Jerónimo Tecóatl Mazatec"}, ["mab"] = {"Yutanduchi Mixtec"}, ["mad"] = {"Madurese"}, ["mae"] = {"Bo-Rukul"}, ["maf"] = {"Mafa"}, ["mag"] = {"Magahi"}, ["mai"] = {"Maithili"}, ["maj"] = {"Jalapa De Díaz Mazatec"}, ["mak"] = {"Makasar"}, ["mam"] = {"Mam"}, ["man"] = {"Mandingo", "Manding"}, ["map"] = {"Austronesian languages"}, ["maq"] = {"Chiquihuitlán Mazatec"}, ["mas"] = {"Masai"}, ["mat"] = {"San Francisco Matlatzinca"}, ["mau"] = {"Huautla Mazatec"}, ["mav"] = {"Sateré-Mawé"}, ["maw"] = {"Mampruli"}, ["max"] = {"North Moluccan Malay"}, ["maz"] = {"Central Mazahua"}, ["mba"] = {"Higaonon"}, ["mbb"] = {"Western Bukidnon Manobo"}, ["mbc"] = {"Macushi"}, ["mbd"] = {"Dibabawon Manobo"}, ["mbe"] = {"Molale"}, ["mbf"] = {"Baba Malay"}, ["mbh"] = {"Mangseng"}, ["mbi"] = {"Ilianen Manobo"}, ["mbj"] = {"Nadëb"}, ["mbk"] = {"Malol"}, ["mbl"] = {"Maxakalí"}, ["mbm"] = {"Ombamba"}, ["mbn"] = {"Macaguán"}, ["mbo"] = {"Mbo (Cameroon)"}, ["mbp"] = {"Malayo"}, ["mbq"] = {"Maisin"}, ["mbr"] = {"Nukak Makú"}, ["mbs"] = {"Sarangani Manobo"}, ["mbt"] = {"Matigsalug Manobo"}, ["mbu"] = {"Mbula-Bwazza"}, ["mbv"] = {"Mbulungish"}, ["mbw"] = {"Maring"}, ["mbx"] = {"Mari (East Sepik Province)"}, ["mby"] = {"Memoni"}, ["mbz"] = {"Amoltepec Mixtec"}, ["mca"] = {"Maca"}, ["mcb"] = {"Machiguenga"}, ["mcc"] = {"Bitur"}, ["mcd"] = {"Sharanahua"}, ["mce"] = {"Itundujia Mixtec"}, ["mcf"] = {"Matsés"}, ["mcg"] = {"Mapoyo"}, ["mch"] = {"Maquiritari"}, ["mci"] = {"Mese"}, ["mcj"] = {"Mvanip"}, ["mck"] = {"Mbunda"}, ["mcl"] = {"Macaguaje"}, ["mcm"] = {"Malaccan Creole Portuguese"}, ["mcn"] = {"Masana"}, ["mco"] = {"Coatlán Mixe"}, ["mcp"] = {"Makaa"}, ["mcq"] = {"Ese"}, ["mcr"] = {"Menya"}, ["mcs"] = {"Mambai"}, ["mct"] = {"Mengisa"}, ["mcu"] = {"Cameroon Mambila"}, ["mcv"] = {"Minanibai"}, ["mcw"] = {"Mawa (Chad)"}, ["mcx"] = {"Mpiemo"}, ["mcy"] = {"South Watut"}, ["mcz"] = {"Mawan"}, ["mda"] = {"Mada (Nigeria)"}, ["mdb"] = {"Morigi"}, ["mdc"] = {"Male (Papua New Guinea)"}, ["mdd"] = {"Mbum"}, ["mde"] = {"Maba (Chad)"}, ["mdf"] = {"Moksha"}, ["mdg"] = {"Massalat"}, ["mdh"] = {"Maguindanaon"}, ["mdi"] = {"Mamvu"}, ["mdj"] = {"Mangbetu"}, ["mdk"] = {"Mangbutu"}, ["mdl"] = {"Maltese Sign Language"}, ["mdm"] = {"Mayogo"}, ["mdn"] = {"Mbati"}, ["mdp"] = {"Mbala"}, ["mdq"] = {"Mbole"}, ["mdr"] = {"Mandar"}, ["mds"] = {"Maria (Papua New Guinea)"}, ["mdt"] = {"Mbere"}, ["mdu"] = {"Mboko"}, ["mdv"] = {"Santa Lucía Monteverde Mixtec"}, ["mdw"] = {"Mbosi"}, ["mdx"] = {"Dizin"}, ["mdy"] = {"Male (Ethiopia)"}, ["mdz"] = {"Suruí Do Pará"}, ["mea"] = {"Menka"}, ["meb"] = {"Ikobi"}, ["mec"] = {"Marra"}, ["med"] = {"Melpa"}, ["mee"] = {"Mengen"}, ["mef"] = {"Megam"}, ["meh"] = {"Southwestern Tlaxiaco Mixtec"}, ["mei"] = {"Midob"}, ["mej"] = {"Meyah"}, ["mek"] = {"Mekeo"}, ["mel"] = {"Central Melanau"}, ["mem"] = {"Mangala"}, ["men"] = {"Mende (Sierra Leone)"}, ["meo"] = {"Kedah Malay"}, ["mep"] = {"Miriwoong"}, ["meq"] = {"Merey"}, ["mer"] = {"Meru"}, ["mes"] = {"Masmaje"}, ["met"] = {"Mato"}, ["meu"] = {"Motu"}, ["mev"] = {"Mano"}, ["mew"] = {"Maaka"}, ["mey"] = {"Hassaniyya"}, ["mez"] = {"Menominee"}, ["mfa"] = {"Pattani Malay"}, ["mfb"] = {"Bangka"}, ["mfc"] = {"Mba"}, ["mfd"] = {"Mendankwe-Nkwen"}, ["mfe"] = {"Morisyen"}, ["mff"] = {"Naki"}, ["mfg"] = {"Mogofin"}, ["mfh"] = {"Matal"}, ["mfi"] = {"Wandala"}, ["mfj"] = {"Mefele"}, ["mfk"] = {"North Mofu"}, ["mfl"] = {"Putai"}, ["mfm"] = {"Marghi South"}, ["mfn"] = {"Cross River Mbembe"}, ["mfo"] = {"Mbe"}, ["mfp"] = {"Makassar Malay"}, ["mfq"] = {"Moba"}, ["mfr"] = {"Marrithiyel"}, ["mfs"] = {"Mexican Sign Language"}, ["mft"] = {"Mokerang"}, ["mfu"] = {"Mbwela"}, ["mfv"] = {"Mandjak"}, ["mfw"] = {"Mulaha"}, ["mfx"] = {"Melo"}, ["mfy"] = {"Mayo"}, ["mfz"] = {"Mabaan"}, ["mga"] = {"Middle Irish (900-1200)"}, ["mgb"] = {"Mararit"}, ["mgc"] = {"Morokodo"}, ["mgd"] = {"Moru"}, ["mge"] = {"Mango"}, ["mgf"] = {"Maklew"}, ["mgg"] = {"Mpumpong"}, ["mgh"] = {"Makhuwa-Meetto"}, ["mgi"] = {"Lijili"}, ["mgj"] = {"Abureni"}, ["mgk"] = {"Mawes"}, ["mgl"] = {"Maleu-Kilenge"}, ["mgm"] = {"Mambae"}, ["mgn"] = {"Mbangi"}, ["mgo"] = {"Meta'"}, ["mgp"] = {"Eastern Magar"}, ["mgq"] = {"Malila"}, ["mgr"] = {"Mambwe-Lungu"}, ["mgs"] = {"Manda (Tanzania)"}, ["mgt"] = {"Mongol"}, ["mgu"] = {"Mailu"}, ["mgv"] = {"Matengo"}, ["mgw"] = {"Matumbi"}, ["mgy"] = {"Mbunga"}, ["mgz"] = {"Mbugwe"}, ["mha"] = {"Manda (India)"}, ["mhb"] = {"Mahongwe"}, ["mhc"] = {"Mocho"}, ["mhd"] = {"Mbugu"}, ["mhe"] = {"Besisi", "Mah Meri"}, ["mhf"] = {"Mamaa"}, ["mhg"] = {"Margu"}, ["mhi"] = {"Ma'di"}, ["mhj"] = {"Mogholi"}, ["mhk"] = {"Mungaka"}, ["mhl"] = {"Mauwake"}, ["mhm"] = {"Makhuwa-Moniga"}, ["mhn"] = {"Mócheno"}, ["mho"] = {"Mashi (Zambia)"}, ["mhp"] = {"Balinese Malay"}, ["mhq"] = {"Mandan"}, ["mhr"] = {"Eastern Mari"}, ["mhs"] = {"Buru (Indonesia)"}, ["mht"] = {"Mandahuaca"}, ["mhu"] = {"Digaro-Mishmi", "Darang Deng"}, ["mhw"] = {"Mbukushu"}, ["mhx"] = {"Maru", "Lhaovo"}, ["mhy"] = {"Ma'anyan"}, ["mhz"] = {"Mor (Mor Islands)"}, ["mia"] = {"Miami"}, ["mib"] = {"Atatláhuca Mixtec"}, ["mic"] = {"Mi'kmaq", "Micmac"}, ["mid"] = {"Mandaic"}, ["mie"] = {"Ocotepec Mixtec"}, ["mif"] = {"Mofu-Gudur"}, ["mig"] = {"San Miguel El Grande Mixtec"}, ["mih"] = {"Chayuco Mixtec"}, ["mii"] = {"Chigmecatitlán Mixtec"}, ["mij"] = {"Abar", "Mungbam"}, ["mik"] = {"Mikasuki"}, ["mil"] = {"Peñoles Mixtec"}, ["mim"] = {"Alacatlatzala Mixtec"}, ["min"] = {"Minangkabau"}, ["mio"] = {"Pinotepa Nacional Mixtec"}, ["mip"] = {"Apasco-Apoala Mixtec"}, ["miq"] = {"Mískito"}, ["mir"] = {"Isthmus Mixe"}, ["mis"] = {"Uncoded languages"}, ["mit"] = {"Southern Puebla Mixtec"}, ["miu"] = {"Cacaloxtepec Mixtec"}, ["miw"] = {"Akoye"}, ["mix"] = {"Mixtepec Mixtec"}, ["miy"] = {"Ayutla Mixtec"}, ["miz"] = {"Coatzospan Mixtec"}, ["mjb"] = {"Makalero"}, ["mjc"] = {"San Juan Colorado Mixtec"}, ["mjd"] = {"Northwest Maidu"}, ["mje"] = {"Muskum"}, ["mjg"] = {"Tu"}, ["mjh"] = {"Mwera (Nyasa)"}, ["mji"] = {"Kim Mun"}, ["mjj"] = {"Mawak"}, ["mjk"] = {"Matukar"}, ["mjl"] = {"Mandeali"}, ["mjm"] = {"Medebur"}, ["mjn"] = {"Ma (Papua New Guinea)"}, ["mjo"] = {"Malankuravan"}, ["mjp"] = {"Malapandaram"}, ["mjq"] = {"Malaryan"}, ["mjr"] = {"Malavedan"}, ["mjs"] = {"Miship"}, ["mjt"] = {"Sauria Paharia"}, ["mju"] = {"Manna-Dora"}, ["mjv"] = {"Mannan"}, ["mjw"] = {"Karbi"}, ["mjx"] = {"Mahali"}, ["mjy"] = {"Mahican"}, ["mjz"] = {"Majhi"}, ["mka"] = {"Mbre"}, ["mkb"] = {"Mal Paharia"}, ["mkc"] = {"Siliput"}, ["mke"] = {"Mawchi"}, ["mkf"] = {"Miya"}, ["mkg"] = {"Mak (China)"}, ["mkh"] = {"Mon-Khmer languages"}, ["mki"] = {"Dhatki"}, ["mkj"] = {"Mokilese"}, ["mkk"] = {"Byep"}, ["mkl"] = {"Mokole"}, ["mkm"] = {"Moklen"}, ["mkn"] = {"Kupang Malay"}, ["mko"] = {"Mingang Doso"}, ["mkp"] = {"Moikodi"}, ["mkq"] = {"Bay Miwok"}, ["mkr"] = {"Malas"}, ["mks"] = {"Silacayoapan Mixtec"}, ["mkt"] = {"Vamale"}, ["mku"] = {"Konyanka Maninka"}, ["mkv"] = {"Mafea"}, ["mkw"] = {"Kituba (Congo)"}, ["mkx"] = {"Kinamiging Manobo"}, ["mky"] = {"East Makian"}, ["mkz"] = {"Makasae"}, ["mla"] = {"Malo"}, ["mlb"] = {"Mbule"}, ["mlc"] = {"Cao Lan"}, ["mle"] = {"Manambu"}, ["mlf"] = {"Mal"}, ["mlh"] = {"Mape"}, ["mli"] = {"Malimpung"}, ["mlj"] = {"Miltu"}, ["mlk"] = {"Ilwana", "Kiwilwana"}, ["mll"] = {"Malua Bay"}, ["mlm"] = {"Mulam"}, ["mln"] = {"Malango"}, ["mlo"] = {"Mlomp"}, ["mlp"] = {"Bargam"}, ["mlq"] = {"Western Maninkakan"}, ["mlr"] = {"Vame"}, ["mls"] = {"Masalit"}, ["mlu"] = {"To'abaita"}, ["mlv"] = {"Motlav", "Mwotlap"}, ["mlw"] = {"Moloko"}, ["mlx"] = {"Malfaxal", "Naha'ai"}, ["mlz"] = {"Malaynon"}, ["mma"] = {"Mama"}, ["mmb"] = {"Momina"}, ["mmc"] = {"Michoacán Mazahua"}, ["mmd"] = {"Maonan"}, ["mme"] = {"Mae"}, ["mmf"] = {"Mundat"}, ["mmg"] = {"North Ambrym"}, ["mmh"] = {"Mehináku"}, ["mmi"] = {"Musar"}, ["mmj"] = {"Majhwar"}, ["mmk"] = {"Mukha-Dora"}, ["mml"] = {"Man Met"}, ["mmm"] = {"Maii"}, ["mmn"] = {"Mamanwa"}, ["mmo"] = {"Mangga Buang"}, ["mmp"] = {"Siawi"}, ["mmq"] = {"Musak"}, ["mmr"] = {"Western Xiangxi Miao"}, ["mmt"] = {"Malalamai"}, ["mmu"] = {"Mmaala"}, ["mmv"] = {"Miriti"}, ["mmw"] = {"Emae"}, ["mmx"] = {"Madak"}, ["mmy"] = {"Migaama"}, ["mmz"] = {"Mabaale"}, ["mna"] = {"Mbula"}, ["mnb"] = {"Muna"}, ["mnc"] = {"Manchu"}, ["mnd"] = {"Mondé"}, ["mne"] = {"Naba"}, ["mnf"] = {"Mundani"}, ["mng"] = {"Eastern Mnong"}, ["mnh"] = {"Mono (Democratic Republic of Congo)"}, ["mni"] = {"Manipuri"}, ["mnj"] = {"Munji"}, ["mnk"] = {"Mandinka"}, ["mnl"] = {"Tiale"}, ["mnm"] = {"Mapena"}, ["mnn"] = {"Southern Mnong"}, ["mno"] = {"Manobo languages"}, ["mnp"] = {"Min Bei Chinese"}, ["mnq"] = {"Minriq"}, ["mnr"] = {"Mono (USA)"}, ["mns"] = {"Mansi"}, ["mnu"] = {"Mer"}, ["mnv"] = {"Rennell-Bellona"}, ["mnw"] = {"Mon"}, ["mnx"] = {"Manikion"}, ["mny"] = {"Manyawa"}, ["mnz"] = {"Moni"}, ["moa"] = {"Mwan"}, ["moc"] = {"Mocoví"}, ["mod"] = {"Mobilian"}, ["moe"] = {"Innu", "Montagnais"}, ["mog"] = {"Mongondow"}, ["moh"] = {"Mohawk"}, ["moi"] = {"Mboi"}, ["moj"] = {"Monzombo"}, ["mok"] = {"Morori"}, ["mom"] = {"Mangue"}, ["moo"] = {"Monom"}, ["mop"] = {"Mopán Maya"}, ["moq"] = {"Mor (Bomberai Peninsula)"}, ["mor"] = {"Moro"}, ["mos"] = {"Mossi"}, ["mot"] = {"Barí"}, ["mou"] = {"Mogum"}, ["mov"] = {"Mohave"}, ["mow"] = {"Moi (Congo)"}, ["mox"] = {"Molima"}, ["moy"] = {"Shekkacho"}, ["moz"] = {"Mukulu", "Gergiko"}, ["mpa"] = {"Mpoto"}, ["mpb"] = {"Malak Malak", "Mullukmulluk"}, ["mpc"] = {"Mangarrayi"}, ["mpd"] = {"Machinere"}, ["mpe"] = {"Majang"}, ["mpg"] = {"Marba"}, ["mph"] = {"Maung"}, ["mpi"] = {"Mpade"}, ["mpj"] = {"Martu Wangka", "Wangkajunga"}, ["mpk"] = {"Mbara (Chad)"}, ["mpl"] = {"Middle Watut"}, ["mpm"] = {"Yosondúa Mixtec"}, ["mpn"] = {"Mindiri"}, ["mpo"] = {"Miu"}, ["mpp"] = {"Migabac"}, ["mpq"] = {"Matís"}, ["mpr"] = {"Vangunu"}, ["mps"] = {"Dadibi"}, ["mpt"] = {"Mian"}, ["mpu"] = {"Makuráp"}, ["mpv"] = {"Mungkip"}, ["mpw"] = {"Mapidian"}, ["mpx"] = {"Misima-Panaeati"}, ["mpy"] = {"Mapia"}, ["mpz"] = {"Mpi"}, ["mqa"] = {"Maba (Indonesia)"}, ["mqb"] = {"Mbuko"}, ["mqc"] = {"Mangole"}, ["mqe"] = {"Matepi"}, ["mqf"] = {"Momuna"}, ["mqg"] = {"Kota Bangun Kutai Malay"}, ["mqh"] = {"Tlazoyaltepec Mixtec"}, ["mqi"] = {"Mariri"}, ["mqj"] = {"Mamasa"}, ["mqk"] = {"Rajah Kabunsuwan Manobo"}, ["mql"] = {"Mbelime"}, ["mqm"] = {"South Marquesan"}, ["mqn"] = {"Moronene"}, ["mqo"] = {"Modole"}, ["mqp"] = {"Manipa"}, ["mqq"] = {"Minokok"}, ["mqr"] = {"Mander"}, ["mqs"] = {"West Makian"}, ["mqt"] = {"Mok"}, ["mqu"] = {"Mandari"}, ["mqv"] = {"Mosimo"}, ["mqw"] = {"Murupi"}, ["mqx"] = {"Mamuju"}, ["mqy"] = {"Manggarai"}, ["mqz"] = {"Pano"}, ["mra"] = {"Mlabri"}, ["mrb"] = {"Marino"}, ["mrc"] = {"Maricopa"}, ["mrd"] = {"Western Magar"}, ["mre"] = {"Martha's Vineyard Sign Language"}, ["mrf"] = {"Elseng"}, ["mrg"] = {"Mising"}, ["mrh"] = {"Mara Chin"}, ["mrj"] = {"Western Mari"}, ["mrk"] = {"Hmwaveke"}, ["mrl"] = {"Mortlockese"}, ["mrm"] = {"Merlav", "Mwerlap"}, ["mrn"] = {"Cheke Holo"}, ["mro"] = {"Mru"}, ["mrp"] = {"Morouas"}, ["mrq"] = {"North Marquesan"}, ["mrr"] = {"Maria (India)"}, ["mrs"] = {"Maragus"}, ["mrt"] = {"Marghi Central"}, ["mru"] = {"Mono (Cameroon)"}, ["mrv"] = {"Mangareva"}, ["mrw"] = {"Maranao"}, ["mrx"] = {"Maremgi", "Dineor"}, ["mry"] = {"Mandaya"}, ["mrz"] = {"Marind"}, ["msb"] = {"Masbatenyo"}, ["msc"] = {"Sankaran Maninka"}, ["msd"] = {"Yucatec Maya Sign Language"}, ["mse"] = {"Musey"}, ["msf"] = {"Mekwei"}, ["msg"] = {"Moraid"}, ["msh"] = {"Masikoro Malagasy"}, ["msi"] = {"Sabah Malay"}, ["msj"] = {"Ma (Democratic Republic of Congo)"}, ["msk"] = {"Mansaka"}, ["msl"] = {"Molof", "Poule"}, ["msm"] = {"Agusan Manobo"}, ["msn"] = {"Vurës"}, ["mso"] = {"Mombum"}, ["msp"] = {"Maritsauá"}, ["msq"] = {"Caac"}, ["msr"] = {"Mongolian Sign Language"}, ["mss"] = {"West Masela"}, ["msu"] = {"Musom"}, ["msv"] = {"Maslam"}, ["msw"] = {"Mansoanka"}, ["msx"] = {"Moresada"}, ["msy"] = {"Aruamu"}, ["msz"] = {"Momare"}, ["mta"] = {"Cotabato Manobo"}, ["mtb"] = {"Anyin Morofo"}, ["mtc"] = {"Munit"}, ["mtd"] = {"Mualang"}, ["mte"] = {"Mono (Solomon Islands)"}, ["mtf"] = {"Murik (Papua New Guinea)"}, ["mtg"] = {"Una"}, ["mth"] = {"Munggui"}, ["mti"] = {"Maiwa (Papua New Guinea)"}, ["mtj"] = {"Moskona"}, ["mtk"] = {"Mbe'"}, ["mtl"] = {"Montol"}, ["mtm"] = {"Mator"}, ["mtn"] = {"Matagalpa"}, ["mto"] = {"Totontepec Mixe"}, ["mtp"] = {"Wichí Lhamtés Nocten"}, ["mtq"] = {"Muong"}, ["mtr"] = {"Mewari"}, ["mts"] = {"Yora"}, ["mtt"] = {"Mota"}, ["mtu"] = {"Tututepec Mixtec"}, ["mtv"] = {"Asaro'o"}, ["mtw"] = {"Southern Binukidnon"}, ["mtx"] = {"Tidaá Mixtec"}, ["mty"] = {"Nabi"}, ["mua"] = {"Mundang"}, ["mub"] = {"Mubi"}, ["muc"] = {"Ajumbu"}, ["mud"] = {"Mednyj Aleut"}, ["mue"] = {"Media Lengua"}, ["mug"] = {"Musgu"}, ["muh"] = {"Mündü"}, ["mui"] = {"Musi"}, ["muj"] = {"Mabire"}, ["muk"] = {"Mugom"}, ["mul"] = {"Multiple languages"}, ["mum"] = {"Maiwala"}, ["mun"] = {"Munda languages"}, ["muo"] = {"Nyong"}, ["mup"] = {"Malvi"}, ["muq"] = {"Eastern Xiangxi Miao"}, ["mur"] = {"Murle"}, ["mus"] = {"Creek"}, ["mut"] = {"Western Muria"}, ["muu"] = {"Yaaku"}, ["muv"] = {"Muthuvan"}, ["mux"] = {"Bo-Ung"}, ["muy"] = {"Muyang"}, ["muz"] = {"Mursi"}, ["mva"] = {"Manam"}, ["mvb"] = {"Mattole"}, ["mvd"] = {"Mamboru"}, ["mve"] = {"Marwari (Pakistan)"}, ["mvf"] = {"Peripheral Mongolian"}, ["mvg"] = {"Yucuañe Mixtec"}, ["mvh"] = {"Mulgi"}, ["mvi"] = {"Miyako"}, ["mvk"] = {"Mekmek"}, ["mvl"] = {"Mbara (Australia)"}, ["mvn"] = {"Minaveha"}, ["mvo"] = {"Marovo"}, ["mvp"] = {"Duri"}, ["mvq"] = {"Moere"}, ["mvr"] = {"Marau"}, ["mvs"] = {"Massep"}, ["mvt"] = {"Mpotovoro"}, ["mvu"] = {"Marfa"}, ["mvv"] = {"Tagal Murut"}, ["mvw"] = {"Machinga"}, ["mvx"] = {"Meoswar"}, ["mvy"] = {"Indus Kohistani"}, ["mvz"] = {"Mesqan"}, ["mwa"] = {"Mwatebu"}, ["mwb"] = {"Juwal"}, ["mwc"] = {"Are"}, ["mwe"] = {"Mwera (Chimwera)"}, ["mwf"] = {"Murrinh-Patha"}, ["mwg"] = {"Aiklep"}, ["mwh"] = {"Mouk-Aria"}, ["mwi"] = {"Labo", "Ninde"}, ["mwk"] = {"Kita Maninkakan"}, ["mwl"] = {"Mirandese"}, ["mwm"] = {"Sar"}, ["mwn"] = {"Nyamwanga"}, ["mwo"] = {"Central Maewo"}, ["mwp"] = {"Kala Lagaw Ya"}, ["mwq"] = {"Mün Chin"}, ["mwr"] = {"Marwari"}, ["mws"] = {"Mwimbi-Muthambi"}, ["mwt"] = {"Moken"}, ["mwu"] = {"Mittu"}, ["mwv"] = {"Mentawai"}, ["mww"] = {"Hmong Daw"}, ["mwz"] = {"Moingi"}, ["mxa"] = {"Northwest Oaxaca Mixtec"}, ["mxb"] = {"Tezoatlán Mixtec"}, ["mxc"] = {"Manyika"}, ["mxd"] = {"Modang"}, ["mxe"] = {"Mele-Fila"}, ["mxf"] = {"Malgbe"}, ["mxg"] = {"Mbangala"}, ["mxh"] = {"Mvuba"}, ["mxi"] = {"Mozarabic"}, ["mxj"] = {"Miju-Mishmi", "Geman Deng"}, ["mxk"] = {"Monumbo"}, ["mxl"] = {"Maxi Gbe"}, ["mxm"] = {"Meramera"}, ["mxn"] = {"Moi (Indonesia)"}, ["mxo"] = {"Mbowe"}, ["mxp"] = {"Tlahuitoltepec Mixe"}, ["mxq"] = {"Juquila Mixe"}, ["mxr"] = {"Murik (Malaysia)"}, ["mxs"] = {"Huitepec Mixtec"}, ["mxt"] = {"Jamiltepec Mixtec"}, ["mxu"] = {"Mada (Cameroon)"}, ["mxv"] = {"Metlatónoc Mixtec"}, ["mxw"] = {"Namo"}, ["mxx"] = {"Mahou", "Mawukakan"}, ["mxy"] = {"Southeastern Nochixtlán Mixtec"}, ["mxz"] = {"Central Masela"}, ["myb"] = {"Mbay"}, ["myc"] = {"Mayeka"}, ["mye"] = {"Myene"}, ["myf"] = {"Bambassi"}, ["myg"] = {"Manta"}, ["myh"] = {"Makah"}, ["myj"] = {"Mangayat"}, ["myk"] = {"Mamara Senoufo"}, ["myl"] = {"Moma"}, ["mym"] = {"Me'en"}, ["myn"] = {"Mayan languages"}, ["myo"] = {"Anfillo"}, ["myp"] = {"Pirahã"}, ["myr"] = {"Muniche"}, ["mys"] = {"Mesmes"}, ["myu"] = {"Mundurukú"}, ["myv"] = {"Erzya"}, ["myw"] = {"Muyuw"}, ["myx"] = {"Masaaba"}, ["myy"] = {"Macuna"}, ["myz"] = {"Classical Mandaic"}, ["mza"] = {"Santa María Zacatepec Mixtec"}, ["mzb"] = {"Tumzabt"}, ["mzc"] = {"Madagascar Sign Language"}, ["mzd"] = {"Malimba"}, ["mze"] = {"Morawa"}, ["mzg"] = {"Monastic Sign Language"}, ["mzh"] = {"Wichí Lhamtés Güisnay"}, ["mzi"] = {"Ixcatlán Mazatec"}, ["mzj"] = {"Manya"}, ["mzk"] = {"Nigeria Mambila"}, ["mzl"] = {"Mazatlán Mixe"}, ["mzm"] = {"Mumuye"}, ["mzn"] = {"Mazanderani"}, ["mzo"] = {"Matipuhy"}, ["mzp"] = {"Movima"}, ["mzq"] = {"Mori Atas"}, ["mzr"] = {"Marúbo"}, ["mzs"] = {"Macanese"}, ["mzt"] = {"Mintil"}, ["mzu"] = {"Inapang"}, ["mzv"] = {"Manza"}, ["mzw"] = {"Deg"}, ["mzx"] = {"Mawayana"}, ["mzy"] = {"Mozambican Sign Language"}, ["mzz"] = {"Maiadomu"}, ["naa"] = {"Namla"}, ["nab"] = {"Southern Nambikuára"}, ["nac"] = {"Narak"}, ["nae"] = {"Naka'ela"}, ["naf"] = {"Nabak"}, ["nag"] = {"Naga Pidgin"}, ["nah"] = {"Nahuatl languages"}, ["nai"] = {"North American Indian languages"}, ["naj"] = {"Nalu"}, ["nak"] = {"Nakanai"}, ["nal"] = {"Nalik"}, ["nam"] = {"Ngan'gityemerri"}, ["nan"] = {"Min Nan Chinese"}, ["nao"] = {"Naaba"}, ["nap"] = {"Neapolitan"}, ["naq"] = {"Khoekhoe", "Nama (Namibia)"}, ["nar"] = {"Iguta"}, ["nas"] = {"Naasioi"}, ["nat"] = {"Ca̱hungwa̱rya̱", "Hungworo"}, ["naw"] = {"Nawuri"}, ["nax"] = {"Nakwi"}, ["nay"] = {"Ngarrindjeri"}, ["naz"] = {"Coatepec Nahuatl"}, ["nba"] = {"Nyemba"}, ["nbb"] = {"Ndoe"}, ["nbc"] = {"Chang Naga"}, ["nbd"] = {"Ngbinda"}, ["nbe"] = {"Konyak Naga"}, ["nbg"] = {"Nagarchal"}, ["nbh"] = {"Ngamo"}, ["nbi"] = {"Mao Naga"}, ["nbj"] = {"Ngarinyman"}, ["nbk"] = {"Nake"}, ["nbm"] = {"Ngbaka Ma'bo"}, ["nbn"] = {"Kuri"}, ["nbo"] = {"Nkukoli"}, ["nbp"] = {"Nnam"}, ["nbq"] = {"Nggem"}, ["nbr"] = {"Numana"}, ["nbs"] = {"Namibian Sign Language"}, ["nbt"] = {"Na"}, ["nbu"] = {"Rongmei Naga"}, ["nbv"] = {"Ngamambo"}, ["nbw"] = {"Southern Ngbandi"}, ["nby"] = {"Ningera"}, ["nca"] = {"Iyo"}, ["ncb"] = {"Central Nicobarese"}, ["ncc"] = {"Ponam"}, ["ncd"] = {"Nachering"}, ["nce"] = {"Yale"}, ["ncf"] = {"Notsi"}, ["ncg"] = {"Nisga'a"}, ["nch"] = {"Central Huasteca Nahuatl"}, ["nci"] = {"Classical Nahuatl"}, ["ncj"] = {"Northern Puebla Nahuatl"}, ["nck"] = {"Na-kara"}, ["ncl"] = {"Michoacán Nahuatl"}, ["ncm"] = {"Nambo"}, ["ncn"] = {"Nauna"}, ["nco"] = {"Sibe"}, ["ncq"] = {"Northern Katang"}, ["ncr"] = {"Ncane"}, ["ncs"] = {"Nicaraguan Sign Language"}, ["nct"] = {"Chothe Naga"}, ["ncu"] = {"Chumburung"}, ["ncx"] = {"Central Puebla Nahuatl"}, ["ncz"] = {"Natchez"}, ["nda"] = {"Ndasa"}, ["ndb"] = {"Kenswei Nsei"}, ["ndc"] = {"Ndau"}, ["ndd"] = {"Nde-Nsele-Nta"}, ["ndf"] = {"Nadruvian"}, ["ndg"] = {"Ndengereko"}, ["ndh"] = {"Ndali"}, ["ndi"] = {"Samba Leko"}, ["ndj"] = {"Ndamba"}, ["ndk"] = {"Ndaka"}, ["ndl"] = {"Ndolo"}, ["ndm"] = {"Ndam"}, ["ndn"] = {"Ngundi"}, ["ndp"] = {"Ndo"}, ["ndq"] = {"Ndombe"}, ["ndr"] = {"Ndoola"}, ["nds"] = {"Low German", "Low Saxon"}, ["ndt"] = {"Ndunga"}, ["ndu"] = {"Dugun"}, ["ndv"] = {"Ndut"}, ["ndw"] = {"Ndobo"}, ["ndx"] = {"Nduga"}, ["ndy"] = {"Lutos"}, ["ndz"] = {"Ndogo"}, ["nea"] = {"Eastern Ngad'a"}, ["neb"] = {"Toura (Côte d'Ivoire)"}, ["nec"] = {"Nedebang"}, ["ned"] = {"Nde-Gbite"}, ["nee"] = {"Nêlêmwa-Nixumwak"}, ["nef"] = {"Nefamese"}, ["neg"] = {"Negidal"}, ["neh"] = {"Nyenkha"}, ["nei"] = {"Neo-Hittite"}, ["nej"] = {"Neko"}, ["nek"] = {"Neku"}, ["nem"] = {"Nemi"}, ["nen"] = {"Nengone"}, ["neo"] = {"Ná-Meo"}, ["neq"] = {"North Central Mixe"}, ["ner"] = {"Yahadian"}, ["nes"] = {"Bhoti Kinnauri"}, ["net"] = {"Nete"}, ["neu"] = {"Neo"}, ["nev"] = {"Nyaheun"}, ["new"] = {"Newari", "Nepal Bhasa"}, ["nex"] = {"Neme"}, ["ney"] = {"Neyo"}, ["nez"] = {"Nez Perce"}, ["nfa"] = {"Dhao"}, ["nfd"] = {"Ahwai"}, ["nfl"] = {"Ayiwo", "Äiwoo"}, ["nfr"] = {"Nafaanra"}, ["nfu"] = {"Mfumte"}, ["nga"] = {"Ngbaka"}, ["ngb"] = {"Northern Ngbandi"}, ["ngc"] = {"Ngombe (Democratic Republic of Congo)"}, ["ngd"] = {"Ngando (Central African Republic)"}, ["nge"] = {"Ngemba"}, ["ngf"] = {"Trans-New Guinea languages"}, ["ngg"] = {"Ngbaka Manza"}, ["ngh"] = {"Nǁng"}, ["ngi"] = {"Ngizim"}, ["ngj"] = {"Ngie"}, ["ngk"] = {"Dalabon"}, ["ngl"] = {"Lomwe"}, ["ngm"] = {"Ngatik Men's Creole"}, ["ngn"] = {"Ngwo"}, ["ngp"] = {"Ngulu"}, ["ngq"] = {"Ngurimi", "Ngoreme"}, ["ngr"] = {"Engdewu"}, ["ngs"] = {"Gvoko"}, ["ngt"] = {"Kriang", "Ngeq"}, ["ngu"] = {"Guerrero Nahuatl"}, ["ngv"] = {"Nagumi"}, ["ngw"] = {"Ngwaba"}, ["ngx"] = {"Nggwahyi"}, ["ngy"] = {"Tibea"}, ["ngz"] = {"Ngungwel"}, ["nha"] = {"Nhanda"}, ["nhb"] = {"Beng"}, ["nhc"] = {"Tabasco Nahuatl"}, ["nhd"] = {"Chiripá", "Ava Guaraní"}, ["nhe"] = {"Eastern Huasteca Nahuatl"}, ["nhf"] = {"Nhuwala"}, ["nhg"] = {"Tetelcingo Nahuatl"}, ["nhh"] = {"Nahari"}, ["nhi"] = {"Zacatlán-Ahuacatlán-Tepetzintla Nahuatl"}, ["nhk"] = {"Isthmus-Cosoleacaque Nahuatl"}, ["nhm"] = {"Morelos Nahuatl"}, ["nhn"] = {"Central Nahuatl"}, ["nho"] = {"Takuu"}, ["nhp"] = {"Isthmus-Pajapan Nahuatl"}, ["nhq"] = {"Huaxcaleca Nahuatl"}, ["nhr"] = {"Naro"}, ["nht"] = {"Ometepec Nahuatl"}, ["nhu"] = {"Noone"}, ["nhv"] = {"Temascaltepec Nahuatl"}, ["nhw"] = {"Western Huasteca Nahuatl"}, ["nhx"] = {"Isthmus-Mecayapan Nahuatl"}, ["nhy"] = {"Northern Oaxaca Nahuatl"}, ["nhz"] = {"Santa María La Alta Nahuatl"}, ["nia"] = {"Nias"}, ["nib"] = {"Nakame"}, ["nic"] = {"Niger-Kordofanian languages"}, ["nid"] = {"Ngandi"}, ["nie"] = {"Niellim"}, ["nif"] = {"Nek"}, ["nig"] = {"Ngalakgan"}, ["nih"] = {"Nyiha (Tanzania)"}, ["nii"] = {"Nii"}, ["nij"] = {"Ngaju"}, ["nik"] = {"Southern Nicobarese"}, ["nil"] = {"Nila"}, ["nim"] = {"Nilamba"}, ["nin"] = {"Ninzo"}, ["nio"] = {"Nganasan"}, ["niq"] = {"Nandi"}, ["nir"] = {"Nimboran"}, ["nis"] = {"Nimi"}, ["nit"] = {"Southeastern Kolami"}, ["niu"] = {"Niuean"}, ["niv"] = {"Gilyak"}, ["niw"] = {"Nimo"}, ["nix"] = {"Hema"}, ["niy"] = {"Ngiti"}, ["niz"] = {"Ningil"}, ["nja"] = {"Nzanyi"}, ["njb"] = {"Nocte Naga"}, ["njd"] = {"Ndonde Hamba"}, ["njh"] = {"Lotha Naga"}, ["nji"] = {"Gudanji"}, ["njj"] = {"Njen"}, ["njl"] = {"Njalgulgule"}, ["njm"] = {"Angami Naga"}, ["njn"] = {"Liangmai Naga"}, ["njo"] = {"Ao Naga"}, ["njr"] = {"Njerep"}, ["njs"] = {"Nisa"}, ["njt"] = {"Ndyuka-Trio Pidgin"}, ["nju"] = {"Ngadjunmaya"}, ["njx"] = {"Kunyi"}, ["njy"] = {"Njyem"}, ["njz"] = {"Nyishi"}, ["nka"] = {"Nkoya"}, ["nkb"] = {"Khoibu Naga"}, ["nkc"] = {"Nkongho"}, ["nkd"] = {"Koireng"}, ["nke"] = {"Duke"}, ["nkf"] = {"Inpui Naga"}, ["nkg"] = {"Nekgini"}, ["nkh"] = {"Khezha Naga"}, ["nki"] = {"Thangal Naga"}, ["nkj"] = {"Nakai"}, ["nkk"] = {"Nokuku"}, ["nkm"] = {"Namat"}, ["nkn"] = {"Nkangala"}, ["nko"] = {"Nkonya"}, ["nkp"] = {"Niuatoputapu"}, ["nkq"] = {"Nkami"}, ["nkr"] = {"Nukuoro"}, ["nks"] = {"North Asmat"}, ["nkt"] = {"Nyika (Tanzania)"}, ["nku"] = {"Bouna Kulango"}, ["nkv"] = {"Nyika (Malawi and Zambia)"}, ["nkw"] = {"Nkutu"}, ["nkx"] = {"Nkoroo"}, ["nkz"] = {"Nkari"}, ["nla"] = {"Ngombale"}, ["nlc"] = {"Nalca"}, ["nle"] = {"East Nyala"}, ["nlg"] = {"Gela"}, ["nli"] = {"Grangali"}, ["nlj"] = {"Nyali"}, ["nlk"] = {"Ninia Yali"}, ["nll"] = {"Nihali"}, ["nlm"] = {"Mankiyali"}, ["nlo"] = {"Ngul"}, ["nlq"] = {"Lao Naga"}, ["nlu"] = {"Nchumbulu"}, ["nlv"] = {"Orizaba Nahuatl"}, ["nlw"] = {"Walangama"}, ["nlx"] = {"Nahali"}, ["nly"] = {"Nyamal"}, ["nlz"] = {"Nalögo"}, ["nma"] = {"Maram Naga"}, ["nmb"] = {"Big Nambas", "V'ënen Taut"}, ["nmc"] = {"Ngam"}, ["nmd"] = {"Ndumu"}, ["nme"] = {"Mzieme Naga"}, ["nmf"] = {"Tangkhul Naga (India)"}, ["nmg"] = {"Kwasio"}, ["nmh"] = {"Monsang Naga"}, ["nmi"] = {"Nyam"}, ["nmj"] = {"Ngombe (Central African Republic)"}, ["nmk"] = {"Namakura"}, ["nml"] = {"Ndemli"}, ["nmm"] = {"Manangba"}, ["nmn"] = {"ǃXóõ"}, ["nmo"] = {"Moyon Naga"}, ["nmp"] = {"Nimanbur"}, ["nmq"] = {"Nambya"}, ["nmr"] = {"Nimbari"}, ["nms"] = {"Letemboi"}, ["nmt"] = {"Namonuito"}, ["nmu"] = {"Northeast Maidu"}, ["nmv"] = {"Ngamini"}, ["nmw"] = {"Nimoa", "Rifao"}, ["nmx"] = {"Nama (Papua New Guinea)"}, ["nmy"] = {"Namuyi"}, ["nmz"] = {"Nawdm"}, ["nna"] = {"Nyangumarta"}, ["nnb"] = {"Nande"}, ["nnc"] = {"Nancere"}, ["nnd"] = {"West Ambae"}, ["nne"] = {"Ngandyera"}, ["nnf"] = {"Ngaing"}, ["nng"] = {"Maring Naga"}, ["nnh"] = {"Ngiemboon"}, ["nni"] = {"North Nuaulu"}, ["nnj"] = {"Nyangatom"}, ["nnk"] = {"Nankina"}, ["nnl"] = {"Northern Rengma Naga"}, ["nnm"] = {"Namia"}, ["nnn"] = {"Ngete"}, ["nnp"] = {"Wancho Naga"}, ["nnq"] = {"Ngindo"}, ["nnr"] = {"Narungga"}, ["nnt"] = {"Nanticoke"}, ["nnu"] = {"Dwang"}, ["nnv"] = {"Nugunu (Australia)"}, ["nnw"] = {"Southern Nuni"}, ["nny"] = {"Nyangga"}, ["nnz"] = {"Nda'nda'"}, ["noa"] = {"Woun Meu"}, ["noc"] = {"Nuk"}, ["nod"] = {"Northern Thai"}, ["noe"] = {"Nimadi"}, ["nof"] = {"Nomane"}, ["nog"] = {"Nogai"}, ["noh"] = {"Nomu"}, ["noi"] = {"Noiri"}, ["noj"] = {"Nonuya"}, ["nok"] = {"Nooksack"}, ["nol"] = {"Nomlaki"}, ["non"] = {"Old Norse"}, ["nop"] = {"Numanggang"}, ["noq"] = {"Ngongo"}, ["nos"] = {"Eastern Nisu"}, ["not"] = {"Nomatsiguenga"}, ["nou"] = {"Ewage-Notu"}, ["nov"] = {"Novial"}, ["now"] = {"Nyambo"}, ["noy"] = {"Noy"}, ["noz"] = {"Nayi"}, ["npa"] = {"Nar Phu"}, ["npb"] = {"Nupbikha"}, ["npg"] = {"Ponyo-Gongwang Naga"}, ["nph"] = {"Phom Naga"}, ["npi"] = {"Nepali (individual language)"}, ["npl"] = {"Southeastern Puebla Nahuatl"}, ["npn"] = {"Mondropolon"}, ["npo"] = {"Pochuri Naga"}, ["nps"] = {"Nipsan"}, ["npu"] = {"Puimei Naga"}, ["npx"] = {"Noipx"}, ["npy"] = {"Napu"}, ["nqg"] = {"Southern Nago"}, ["nqk"] = {"Kura Ede Nago"}, ["nql"] = {"Ngendelengo"}, ["nqm"] = {"Ndom"}, ["nqn"] = {"Nen"}, ["nqo"] = {"N'Ko", "N’Ko"}, ["nqq"] = {"Kyan-Karyaw Naga"}, ["nqt"] = {"Nteng"}, ["nqy"] = {"Akyaung Ari Naga"}, ["nra"] = {"Ngom"}, ["nrb"] = {"Nara"}, ["nrc"] = {"Noric"}, ["nre"] = {"Southern Rengma Naga"}, ["nrf"] = {"Jèrriais", "Guernésiais", "Sercquiais"}, ["nrg"] = {"Narango"}, ["nri"] = {"Chokri Naga"}, ["nrk"] = {"Ngarla"}, ["nrl"] = {"Ngarluma"}, ["nrm"] = {"Narom"}, ["nrn"] = {"Norn"}, ["nrp"] = {"North Picene"}, ["nrr"] = {"Norra", "Nora"}, ["nrt"] = {"Northern Kalapuya"}, ["nru"] = {"Narua"}, ["nrx"] = {"Ngurmbur"}, ["nrz"] = {"Lala"}, ["nsa"] = {"Sangtam Naga"}, ["nsb"] = {"Lower Nossob"}, ["nsc"] = {"Nshi"}, ["nsd"] = {"Southern Nisu"}, ["nse"] = {"Nsenga"}, ["nsf"] = {"Northwestern Nisu"}, ["nsg"] = {"Ngasa"}, ["nsh"] = {"Ngoshie"}, ["nsi"] = {"Nigerian Sign Language"}, ["nsk"] = {"Naskapi"}, ["nsl"] = {"Norwegian Sign Language"}, ["nsm"] = {"Sumi Naga"}, ["nsn"] = {"Nehan"}, ["nso"] = {"Pedi", "Northern Sotho", "Sepedi"}, ["nsp"] = {"Nepalese Sign Language"}, ["nsq"] = {"Northern Sierra Miwok"}, ["nsr"] = {"Maritime Sign Language"}, ["nss"] = {"Nali"}, ["nst"] = {"Tase Naga"}, ["nsu"] = {"Sierra Negra Nahuatl"}, ["nsv"] = {"Southwestern Nisu"}, ["nsw"] = {"Navut"}, ["nsx"] = {"Nsongo"}, ["nsy"] = {"Nasal"}, ["nsz"] = {"Nisenan"}, ["ntd"] = {"Northern Tidung"}, ["nte"] = {"Nathembo"}, ["ntg"] = {"Ngantangarra"}, ["nti"] = {"Natioro"}, ["ntj"] = {"Ngaanyatjarra"}, ["ntk"] = {"Ikoma-Nata-Isenye"}, ["ntm"] = {"Nateni"}, ["nto"] = {"Ntomba"}, ["ntp"] = {"Northern Tepehuan"}, ["ntr"] = {"Delo"}, ["ntu"] = {"Natügu"}, ["ntw"] = {"Nottoway"}, ["ntx"] = {"Tangkhul Naga (Myanmar)"}, ["nty"] = {"Mantsi"}, ["ntz"] = {"Natanzi"}, ["nua"] = {"Yuanga"}, ["nub"] = {"Nubian languages"}, ["nuc"] = {"Nukuini"}, ["nud"] = {"Ngala"}, ["nue"] = {"Ngundu"}, ["nuf"] = {"Nusu"}, ["nug"] = {"Nungali"}, ["nuh"] = {"Ndunda"}, ["nui"] = {"Ngumbi"}, ["nuj"] = {"Nyole"}, ["nuk"] = {"Nuu-chah-nulth", "Nuuchahnulth"}, ["nul"] = {"Nusa Laut"}, ["num"] = {"Niuafo'ou"}, ["nun"] = {"Anong"}, ["nuo"] = {"Nguôn"}, ["nup"] = {"Nupe-Nupe-Tako"}, ["nuq"] = {"Nukumanu"}, ["nur"] = {"Nukuria"}, ["nus"] = {"Nuer"}, ["nut"] = {"Nung (Viet Nam)"}, ["nuu"] = {"Ngbundu"}, ["nuv"] = {"Northern Nuni"}, ["nuw"] = {"Nguluwan"}, ["nux"] = {"Mehek"}, ["nuy"] = {"Nunggubuyu"}, ["nuz"] = {"Tlamacazapa Nahuatl"}, ["nvh"] = {"Nasarian"}, ["nvm"] = {"Namiae"}, ["nvo"] = {"Nyokon"}, ["nwa"] = {"Nawathinehena"}, ["nwb"] = {"Nyabwa"}, ["nwc"] = {"Classical Newari", "Classical Nepal Bhasa", "Old Newari"}, ["nwe"] = {"Ngwe"}, ["nwg"] = {"Ngayawung"}, ["nwi"] = {"Southwest Tanna"}, ["nwm"] = {"Nyamusa-Molo"}, ["nwo"] = {"Nauo"}, ["nwr"] = {"Nawaru"}, ["nww"] = {"Ndwewe"}, ["nwx"] = {"Middle Newar"}, ["nwy"] = {"Nottoway-Meherrin"}, ["nxa"] = {"Nauete"}, ["nxd"] = {"Ngando (Democratic Republic of Congo)"}, ["nxe"] = {"Nage"}, ["nxg"] = {"Ngad'a"}, ["nxi"] = {"Nindi"}, ["nxk"] = {"Koki Naga"}, ["nxl"] = {"South Nuaulu"}, ["nxm"] = {"Numidian"}, ["nxn"] = {"Ngawun"}, ["nxo"] = {"Ndambomo"}, ["nxq"] = {"Naxi"}, ["nxr"] = {"Ninggerum"}, ["nxx"] = {"Nafri"}, ["nyb"] = {"Nyangbo"}, ["nyc"] = {"Nyanga-li"}, ["nyd"] = {"Nyore", "Olunyole"}, ["nye"] = {"Nyengo"}, ["nyf"] = {"Giryama", "Kigiryama"}, ["nyg"] = {"Nyindu"}, ["nyh"] = {"Nyikina"}, ["nyi"] = {"Ama (Sudan)"}, ["nyj"] = {"Nyanga"}, ["nyk"] = {"Nyaneka"}, ["nyl"] = {"Nyeu"}, ["nym"] = {"Nyamwezi"}, ["nyn"] = {"Nyankole"}, ["nyo"] = {"Nyoro"}, ["nyp"] = {"Nyang'i"}, ["nyq"] = {"Nayini"}, ["nyr"] = {"Nyiha (Malawi)"}, ["nys"] = {"Nyungar"}, ["nyt"] = {"Nyawaygi"}, ["nyu"] = {"Nyungwe"}, ["nyv"] = {"Nyulnyul"}, ["nyw"] = {"Nyaw"}, ["nyx"] = {"Nganyaywana"}, ["nyy"] = {"Nyakyusa-Ngonde"}, ["nza"] = {"Tigon Mbembe"}, ["nzb"] = {"Njebi"}, ["nzd"] = {"Nzadi"}, ["nzi"] = {"Nzima"}, ["nzk"] = {"Nzakara"}, ["nzm"] = {"Zeme Naga"}, ["nzr"] = {"Dir-Nyamzak-Mbarimi"}, ["nzs"] = {"New Zealand Sign Language"}, ["nzu"] = {"Teke-Nzikou"}, ["nzy"] = {"Nzakambay"}, ["nzz"] = {"Nanga Dama Dogon"}, ["oaa"] = {"Orok"}, ["oac"] = {"Oroch"}, ["oar"] = {"Old Aramaic (up to 700 BCE)", "Ancient Aramaic (up to 700 BCE)"}, ["oav"] = {"Old Avar"}, ["obi"] = {"Obispeño"}, ["obk"] = {"Southern Bontok"}, ["obl"] = {"Oblo"}, ["obm"] = {"Moabite"}, ["obo"] = {"Obo Manobo"}, ["obr"] = {"Old Burmese"}, ["obt"] = {"Old Breton"}, ["obu"] = {"Obulom"}, ["oca"] = {"Ocaina"}, ["och"] = {"Old Chinese"}, ["ocm"] = {"Old Cham"}, ["oco"] = {"Old Cornish"}, ["ocu"] = {"Atzingo Matlatzinca"}, ["oda"] = {"Odut"}, ["odk"] = {"Od"}, ["odt"] = {"Old Dutch"}, ["odu"] = {"Odual"}, ["ofo"] = {"Ofo"}, ["ofs"] = {"Old Frisian"}, ["ofu"] = {"Efutop"}, ["ogb"] = {"Ogbia"}, ["ogc"] = {"Ogbah"}, ["oge"] = {"Old Georgian"}, ["ogg"] = {"Ogbogolo"}, ["ogo"] = {"Khana"}, ["ogu"] = {"Ogbronuagum"}, ["oht"] = {"Old Hittite"}, ["ohu"] = {"Old Hungarian"}, ["oia"] = {"Oirata"}, ["oie"] = {"Okolie"}, ["oin"] = {"Inebu One"}, ["ojb"] = {"Northwestern Ojibwa"}, ["ojc"] = {"Central Ojibwa"}, ["ojg"] = {"Eastern Ojibwa"}, ["ojp"] = {"Old Japanese"}, ["ojs"] = {"Severn Ojibwa"}, ["ojv"] = {"Ontong Java"}, ["ojw"] = {"Western Ojibwa"}, ["oka"] = {"Okanagan"}, ["okb"] = {"Okobo"}, ["okc"] = {"Kobo"}, ["okd"] = {"Okodia"}, ["oke"] = {"Okpe (Southwestern Edo)"}, ["okg"] = {"Koko Babangk"}, ["okh"] = {"Koresh-e Rostam"}, ["oki"] = {"Okiek"}, ["okj"] = {"Oko-Juwoi"}, ["okk"] = {"Kwamtim One"}, ["okl"] = {"Old Kentish Sign Language"}, ["okm"] = {"Middle Korean (10th-16th cent.)"}, ["okn"] = {"Oki-No-Erabu"}, ["oko"] = {"Old Korean (3rd-9th cent.)"}, ["okr"] = {"Kirike"}, ["oks"] = {"Oko-Eni-Osayen"}, ["oku"] = {"Oku"}, ["okv"] = {"Orokaiva"}, ["okx"] = {"Okpe (Northwestern Edo)"}, ["okz"] = {"Old Khmer"}, ["ola"] = {"Walungge"}, ["old"] = {"Mochi"}, ["ole"] = {"Olekha"}, ["olk"] = {"Olkol"}, ["olm"] = {"Oloma"}, ["olo"] = {"Livvi"}, ["olr"] = {"Olrat"}, ["olt"] = {"Old Lithuanian"}, ["olu"] = {"Kuvale"}, ["oma"] = {"Omaha-Ponca"}, ["omb"] = {"East Ambae"}, ["omc"] = {"Mochica"}, ["omg"] = {"Omagua"}, ["omi"] = {"Omi"}, ["omk"] = {"Omok"}, ["oml"] = {"Ombo"}, ["omn"] = {"Minoan"}, ["omo"] = {"Utarmbung"}, ["omp"] = {"Old Manipuri"}, ["omq"] = {"Oto-Manguean languages"}, ["omr"] = {"Old Marathi"}, ["omt"] = {"Omotik"}, ["omu"] = {"Omurano"}, ["omv"] = {"Omotic languages"}, ["omw"] = {"South Tairora"}, ["omx"] = {"Old Mon"}, ["omy"] = {"Old Malay"}, ["ona"] = {"Ona"}, ["onb"] = {"Lingao"}, ["one"] = {"Oneida"}, ["ong"] = {"Olo"}, ["oni"] = {"Onin"}, ["onj"] = {"Onjob"}, ["onk"] = {"Kabore One"}, ["onn"] = {"Onobasulu"}, ["ono"] = {"Onondaga"}, ["onp"] = {"Sartang"}, ["onr"] = {"Northern One"}, ["ons"] = {"Ono"}, ["ont"] = {"Ontenu"}, ["onu"] = {"Unua"}, ["onw"] = {"Old Nubian"}, ["onx"] = {"Onin Based Pidgin"}, ["ood"] = {"Tohono O'odham"}, ["oog"] = {"Ong"}, ["oon"] = {"Önge"}, ["oor"] = {"Oorlams"}, ["oos"] = {"Old Ossetic"}, ["opa"] = {"Okpamheri"}, ["opk"] = {"Kopkaka"}, ["opm"] = {"Oksapmin"}, ["opo"] = {"Opao"}, ["opt"] = {"Opata"}, ["opy"] = {"Ofayé"}, ["ora"] = {"Oroha"}, ["orc"] = {"Orma"}, ["ore"] = {"Orejón"}, ["org"] = {"Oring"}, ["orh"] = {"Oroqen"}, ["orn"] = {"Orang Kanaq"}, ["oro"] = {"Orokolo"}, ["orr"] = {"Oruma"}, ["ors"] = {"Orang Seletar"}, ["ort"] = {"Adivasi Oriya"}, ["oru"] = {"Ormuri"}, ["orv"] = {"Old Russian"}, ["orw"] = {"Oro Win"}, ["orx"] = {"Oro"}, ["ory"] = {"Odia (individual language)", "Oriya (individual language)"}, ["orz"] = {"Ormu"}, ["osa"] = {"Osage"}, ["osc"] = {"Oscan"}, ["osi"] = {"Osing"}, ["osn"] = {"Old Sundanese"}, ["oso"] = {"Ososo"}, ["osp"] = {"Old Spanish"}, ["ost"] = {"Osatu"}, ["osu"] = {"Southern One"}, ["osx"] = {"Old Saxon"}, ["ota"] = {"Ottoman Turkish (1500-1928)"}, ["otb"] = {"Old Tibetan"}, ["otd"] = {"Ot Danum"}, ["ote"] = {"Mezquital Otomi"}, ["oti"] = {"Oti"}, ["otk"] = {"Old Turkish"}, ["otl"] = {"Tilapa Otomi"}, ["otm"] = {"Eastern Highland Otomi"}, ["otn"] = {"Tenango Otomi"}, ["oto"] = {"Otomian languages"}, ["otq"] = {"Querétaro Otomi"}, ["otr"] = {"Otoro"}, ["ots"] = {"Estado de México Otomi"}, ["ott"] = {"Temoaya Otomi"}, ["otu"] = {"Otuke"}, ["otw"] = {"Ottawa"}, ["otx"] = {"Texcatepec Otomi"}, ["oty"] = {"Old Tamil"}, ["otz"] = {"Ixtenco Otomi"}, ["oua"] = {"Tagargrent"}, ["oub"] = {"Glio-Oubi"}, ["oue"] = {"Oune"}, ["oui"] = {"Old Uighur"}, ["oum"] = {"Ouma"}, ["ovd"] = {"Elfdalian", "Övdalian"}, ["owi"] = {"Owiniga"}, ["owl"] = {"Old Welsh"}, ["oyb"] = {"Oy"}, ["oyd"] = {"Oyda"}, ["oym"] = {"Wayampi"}, ["oyy"] = {"Oya'oya"}, ["ozm"] = {"Koonzime"}, ["paa"] = {"Papuan languages"}, ["pab"] = {"Parecís"}, ["pac"] = {"Pacoh"}, ["pad"] = {"Paumarí"}, ["pae"] = {"Pagibete"}, ["paf"] = {"Paranawát"}, ["pag"] = {"Pangasinan"}, ["pah"] = {"Tenharim"}, ["pai"] = {"Pe"}, ["pak"] = {"Parakanã"}, ["pal"] = {"Pahlavi"}, ["pam"] = {"Pampanga", "Kapampangan"}, ["pao"] = {"Northern Paiute"}, ["pap"] = {"Papiamento"}, ["paq"] = {"Parya"}, ["par"] = {"Panamint", "Timbisha"}, ["pas"] = {"Papasena"}, ["pau"] = {"Palauan"}, ["pav"] = {"Pakaásnovos"}, ["paw"] = {"Pawnee"}, ["pax"] = {"Pankararé"}, ["pay"] = {"Pech"}, ["paz"] = {"Pankararú"}, ["pbb"] = {"Páez"}, ["pbc"] = {"Patamona"}, ["pbe"] = {"Mezontla Popoloca"}, ["pbf"] = {"Coyotepec Popoloca"}, ["pbg"] = {"Paraujano"}, ["pbh"] = {"E'ñapa Woromaipu"}, ["pbi"] = {"Parkwa"}, ["pbl"] = {"Mak (Nigeria)"}, ["pbm"] = {"Puebla Mazatec"}, ["pbn"] = {"Kpasam"}, ["pbo"] = {"Papel"}, ["pbp"] = {"Badyara"}, ["pbr"] = {"Pangwa"}, ["pbs"] = {"Central Pame"}, ["pbt"] = {"Southern Pashto"}, ["pbu"] = {"Northern Pashto"}, ["pbv"] = {"Pnar"}, ["pby"] = {"Pyu (Papua New Guinea)"}, ["pca"] = {"Santa Inés Ahuatempan Popoloca"}, ["pcb"] = {"Pear"}, ["pcc"] = {"Bouyei"}, ["pcd"] = {"Picard"}, ["pce"] = {"Ruching Palaung"}, ["pcf"] = {"Paliyan"}, ["pcg"] = {"Paniya"}, ["pch"] = {"Pardhan"}, ["pci"] = {"Duruwa"}, ["pcj"] = {"Parenga"}, ["pck"] = {"Paite Chin"}, ["pcl"] = {"Pardhi"}, ["pcm"] = {"Nigerian Pidgin"}, ["pcn"] = {"Piti"}, ["pcp"] = {"Pacahuara"}, ["pcw"] = {"Pyapun"}, ["pda"] = {"Anam"}, ["pdc"] = {"Pennsylvania German"}, ["pdi"] = {"Pa Di"}, ["pdn"] = {"Podena", "Fedan"}, ["pdo"] = {"Padoe"}, ["pdt"] = {"Plautdietsch"}, ["pdu"] = {"Kayan"}, ["pea"] = {"Peranakan Indonesian"}, ["peb"] = {"Eastern Pomo"}, ["ped"] = {"Mala (Papua New Guinea)"}, ["pee"] = {"Taje"}, ["pef"] = {"Northeastern Pomo"}, ["peg"] = {"Pengo"}, ["peh"] = {"Bonan"}, ["pei"] = {"Chichimeca-Jonaz"}, ["pej"] = {"Northern Pomo"}, ["pek"] = {"Penchal"}, ["pel"] = {"Pekal"}, ["pem"] = {"Phende"}, ["peo"] = {"Old Persian (ca. 600-400 B.C.)"}, ["pep"] = {"Kunja"}, ["peq"] = {"Southern Pomo"}, ["pes"] = {"Iranian Persian"}, ["pev"] = {"Pémono"}, ["pex"] = {"Petats"}, ["pey"] = {"Petjo"}, ["pez"] = {"Eastern Penan"}, ["pfa"] = {"Pááfang"}, ["pfe"] = {"Pere"}, ["pfl"] = {"Pfaelzisch"}, ["pga"] = {"Sudanese Creole Arabic"}, ["pgd"] = {"Gāndhārī"}, ["pgg"] = {"Pangwali"}, ["pgi"] = {"Pagi"}, ["pgk"] = {"Rerep"}, ["pgl"] = {"Primitive Irish"}, ["pgn"] = {"Paelignian"}, ["pgs"] = {"Pangseng"}, ["pgu"] = {"Pagu"}, ["pgz"] = {"Papua New Guinean Sign Language"}, ["pha"] = {"Pa-Hng"}, ["phd"] = {"Phudagi"}, ["phg"] = {"Phuong"}, ["phh"] = {"Phukha"}, ["phi"] = {"Philippine languages"}, ["phj"] = {"Pahari"}, ["phk"] = {"Phake"}, ["phl"] = {"Phalura", "Palula"}, ["phm"] = {"Phimbi"}, ["phn"] = {"Phoenician"}, ["pho"] = {"Phunoi"}, ["phq"] = {"Phana'"}, ["phr"] = {"Pahari-Potwari"}, ["pht"] = {"Phu Thai"}, ["phu"] = {"Phuan"}, ["phv"] = {"Pahlavani"}, ["phw"] = {"Phangduwali"}, ["pia"] = {"Pima Bajo"}, ["pib"] = {"Yine"}, ["pic"] = {"Pinji"}, ["pid"] = {"Piaroa"}, ["pie"] = {"Piro"}, ["pif"] = {"Pingelapese"}, ["pig"] = {"Pisabo"}, ["pih"] = {"Pitcairn-Norfolk"}, ["pij"] = {"Pijao"}, ["pil"] = {"Yom"}, ["pim"] = {"Powhatan"}, ["pin"] = {"Piame"}, ["pio"] = {"Piapoco"}, ["pip"] = {"Pero"}, ["pir"] = {"Piratapuyo"}, ["pis"] = {"Pijin"}, ["pit"] = {"Pitta Pitta"}, ["piu"] = {"Pintupi-Luritja"}, ["piv"] = {"Pileni", "Vaeakau-Taumako"}, ["piw"] = {"Pimbwe"}, ["pix"] = {"Piu"}, ["piy"] = {"Piya-Kwonci"}, ["piz"] = {"Pije"}, ["pjt"] = {"Pitjantjatjara"}, ["pka"] = {"Ardhamāgadhī Prākrit"}, ["pkb"] = {"Pokomo", "Kipfokomo"}, ["pkc"] = {"Paekche"}, ["pkg"] = {"Pak-Tong"}, ["pkh"] = {"Pankhu"}, ["pkn"] = {"Pakanha"}, ["pko"] = {"Pökoot"}, ["pkp"] = {"Pukapuka"}, ["pkr"] = {"Attapady Kurumba"}, ["pks"] = {"Pakistan Sign Language"}, ["pkt"] = {"Maleng"}, ["pku"] = {"Paku"}, ["pla"] = {"Miani"}, ["plb"] = {"Polonombauk"}, ["plc"] = {"Central Palawano"}, ["pld"] = {"Polari"}, ["ple"] = {"Palu'e"}, ["plf"] = {"Central Malayo-Polynesian languages"}, ["plg"] = {"Pilagá"}, ["plh"] = {"Paulohi"}, ["plk"] = {"Kohistani Shina"}, ["pll"] = {"Shwe Palaung"}, ["pln"] = {"Palenquero"}, ["plo"] = {"Oluta Popoluca"}, ["plq"] = {"Palaic"}, ["plr"] = {"Palaka Senoufo"}, ["pls"] = {"San Marcos Tlacoyalco Popoloca", "San Marcos Tlalcoyalco Popoloca"}, ["plt"] = {"Plateau Malagasy"}, ["plu"] = {"Palikúr"}, ["plv"] = {"Southwest Palawano"}, ["plw"] = {"Brooke's Point Palawano"}, ["ply"] = {"Bolyu"}, ["plz"] = {"Paluan"}, ["pma"] = {"Paama"}, ["pmb"] = {"Pambia"}, ["pmd"] = {"Pallanganmiddang"}, ["pme"] = {"Pwaamei"}, ["pmf"] = {"Pamona"}, ["pmh"] = {"Māhārāṣṭri Prākrit"}, ["pmi"] = {"Northern Pumi"}, ["pmj"] = {"Southern Pumi"}, ["pml"] = {"Lingua Franca"}, ["pmm"] = {"Pomo"}, ["pmn"] = {"Pam"}, ["pmo"] = {"Pom"}, ["pmq"] = {"Northern Pame"}, ["pmr"] = {"Paynamar"}, ["pms"] = {"Piemontese"}, ["pmt"] = {"Tuamotuan"}, ["pmw"] = {"Plains Miwok"}, ["pmx"] = {"Poumei Naga"}, ["pmy"] = {"Papuan Malay"}, ["pmz"] = {"Southern Pame"}, ["pna"] = {"Punan Bah-Biau"}, ["pnb"] = {"Western Panjabi"}, ["pnc"] = {"Pannei"}, ["pnd"] = {"Mpinda"}, ["pne"] = {"Western Penan"}, ["png"] = {"Pangu", "Pongu"}, ["pnh"] = {"Penrhyn"}, ["pni"] = {"Aoheng"}, ["pnj"] = {"Pinjarup"}, ["pnk"] = {"Paunaka"}, ["pnl"] = {"Paleni"}, ["pnm"] = {"Punan Batu 1"}, ["pnn"] = {"Pinai-Hagahai"}, ["pno"] = {"Panobo"}, ["pnp"] = {"Pancana"}, ["pnq"] = {"Pana (Burkina Faso)"}, ["pnr"] = {"Panim"}, ["pns"] = {"Ponosakan"}, ["pnt"] = {"Pontic"}, ["pnu"] = {"Jiongnai Bunu"}, ["pnv"] = {"Pinigura"}, ["pnw"] = {"Banyjima", "Panytyima"}, ["pnx"] = {"Phong-Kniang"}, ["pny"] = {"Pinyin"}, ["pnz"] = {"Pana (Central African Republic)"}, ["poc"] = {"Poqomam"}, ["poe"] = {"San Juan Atzingo Popoloca"}, ["pof"] = {"Poke"}, ["pog"] = {"Potiguára"}, ["poh"] = {"Poqomchi'"}, ["poi"] = {"Highland Popoluca"}, ["pok"] = {"Pokangá"}, ["pom"] = {"Southeastern Pomo"}, ["pon"] = {"Pohnpeian"}, ["poo"] = {"Central Pomo"}, ["pop"] = {"Pwapwâ"}, ["poq"] = {"Texistepec Popoluca"}, ["pos"] = {"Sayula Popoluca"}, ["pot"] = {"Potawatomi"}, ["pov"] = {"Upper Guinea Crioulo"}, ["pow"] = {"San Felipe Otlaltepec Popoloca"}, ["pox"] = {"Polabian"}, ["poy"] = {"Pogolo"}, ["poz"] = {"Malayo-Polynesian languages"}, ["ppe"] = {"Papi"}, ["ppi"] = {"Paipai"}, ["ppk"] = {"Uma"}, ["ppl"] = {"Pipil", "Nicarao"}, ["ppm"] = {"Papuma"}, ["ppn"] = {"Papapana"}, ["ppo"] = {"Folopa"}, ["ppp"] = {"Pelende"}, ["ppq"] = {"Pei"}, ["pps"] = {"San Luís Temalacayuca Popoloca"}, ["ppt"] = {"Pare"}, ["ppu"] = {"Papora"}, ["pqa"] = {"Pa'a"}, ["pqe"] = {"Eastern Malayo-Polynesian languages"}, ["pqm"] = {"Malecite-Passamaquoddy"}, ["pqw"] = {"Western Malayo-Polynesian languages"}, ["pra"] = {"Prakrit languages"}, ["prc"] = {"Parachi"}, ["prd"] = {"Parsi-Dari"}, ["pre"] = {"Principense"}, ["prf"] = {"Paranan"}, ["prg"] = {"Prussian"}, ["prh"] = {"Porohanon"}, ["pri"] = {"Paicî"}, ["prk"] = {"Parauk"}, ["prl"] = {"Peruvian Sign Language"}, ["prm"] = {"Kibiri"}, ["prn"] = {"Prasuni"}, ["pro"] = {"Old Provençal (to 1500)", "Old Occitan (to 1500)"}, ["prq"] = {"Ashéninka Perené"}, ["prr"] = {"Puri"}, ["prs"] = {"Dari", "Afghan Persian"}, ["prt"] = {"Phai"}, ["pru"] = {"Puragi"}, ["prw"] = {"Parawen"}, ["prx"] = {"Purik"}, ["prz"] = {"Providencia Sign Language"}, ["psa"] = {"Asue Awyu"}, ["psc"] = {"Iranian Sign Language", "Persian Sign Language"}, ["psd"] = {"Plains Indian Sign Language"}, ["pse"] = {"Central Malay"}, ["psg"] = {"Penang Sign Language"}, ["psh"] = {"Southwest Pashai", "Southwest Pashayi"}, ["psi"] = {"Southeast Pashai", "Southeast Pashayi"}, ["psl"] = {"Puerto Rican Sign Language"}, ["psm"] = {"Pauserna"}, ["psn"] = {"Panasuan"}, ["pso"] = {"Polish Sign Language"}, ["psp"] = {"Philippine Sign Language"}, ["psq"] = {"Pasi"}, ["psr"] = {"Portuguese Sign Language"}, ["pss"] = {"Kaulong"}, ["pst"] = {"Central Pashto"}, ["psu"] = {"Sauraseni Prākrit"}, ["psw"] = {"Port Sandwich"}, ["psy"] = {"Piscataway"}, ["pta"] = {"Pai Tavytera"}, ["pth"] = {"Pataxó Hã-Ha-Hãe"}, ["pti"] = {"Pindiini", "Wangkatha"}, ["ptn"] = {"Patani"}, ["pto"] = {"Zo'é"}, ["ptp"] = {"Patep"}, ["ptq"] = {"Pattapu"}, ["ptr"] = {"Piamatsina"}, ["ptt"] = {"Enrekang"}, ["ptu"] = {"Bambam"}, ["ptv"] = {"Port Vato"}, ["ptw"] = {"Pentlatch"}, ["pty"] = {"Pathiya"}, ["pua"] = {"Western Highland Purepecha"}, ["pub"] = {"Purum"}, ["puc"] = {"Punan Merap"}, ["pud"] = {"Punan Aput"}, ["pue"] = {"Puelche"}, ["puf"] = {"Punan Merah"}, ["pug"] = {"Phuie"}, ["pui"] = {"Puinave"}, ["puj"] = {"Punan Tubu"}, ["pum"] = {"Puma"}, ["puo"] = {"Puoc"}, ["pup"] = {"Pulabu"}, ["puq"] = {"Puquina"}, ["pur"] = {"Puruborá"}, ["put"] = {"Putoh"}, ["puu"] = {"Punu"}, ["puw"] = {"Puluwatese"}, ["pux"] = {"Puare"}, ["puy"] = {"Purisimeño"}, ["pwa"] = {"Pawaia"}, ["pwb"] = {"Panawa"}, ["pwg"] = {"Gapapaiwa"}, ["pwi"] = {"Patwin"}, ["pwm"] = {"Molbog"}, ["pwn"] = {"Paiwan"}, ["pwo"] = {"Pwo Western Karen"}, ["pwr"] = {"Powari"}, ["pww"] = {"Pwo Northern Karen"}, ["pxm"] = {"Quetzaltepec Mixe"}, ["pye"] = {"Pye Krumen"}, ["pym"] = {"Fyam"}, ["pyn"] = {"Poyanáwa"}, ["pys"] = {"Paraguayan Sign Language", "Lengua de Señas del Paraguay"}, ["pyu"] = {"Puyuma"}, ["pyx"] = {"Pyu (Myanmar)"}, ["pyy"] = {"Pyen"}, ["pze"] = {"Pesse"}, ["pzh"] = {"Pazeh"}, ["pzn"] = {"Jejara Naga", "Para Naga"}, ["qua"] = {"Quapaw"}, ["qub"] = {"Huallaga Huánuco Quechua"}, ["quc"] = {"K'iche'", "Quiché"}, ["qud"] = {"Calderón Highland Quichua"}, ["quf"] = {"Lambayeque Quechua"}, ["qug"] = {"Chimborazo Highland Quichua"}, ["quh"] = {"South Bolivian Quechua"}, ["qui"] = {"Quileute"}, ["quk"] = {"Chachapoyas Quechua"}, ["qul"] = {"North Bolivian Quechua"}, ["qum"] = {"Sipacapense"}, ["qun"] = {"Quinault"}, ["qup"] = {"Southern Pastaza Quechua"}, ["quq"] = {"Quinqui"}, ["qur"] = {"Yanahuanca Pasco Quechua"}, ["qus"] = {"Santiago del Estero Quichua"}, ["quv"] = {"Sacapulteco"}, ["quw"] = {"Tena Lowland Quichua"}, ["qux"] = {"Yauyos Quechua"}, ["quy"] = {"Ayacucho Quechua"}, ["quz"] = {"Cusco Quechua"}, ["qva"] = {"Ambo-Pasco Quechua"}, ["qvc"] = {"Cajamarca Quechua"}, ["qve"] = {"Eastern Apurímac Quechua"}, ["qvh"] = {"Huamalíes-Dos de Mayo Huánuco Quechua"}, ["qvi"] = {"Imbabura Highland Quichua"}, ["qvj"] = {"Loja Highland Quichua"}, ["qvl"] = {"Cajatambo North Lima Quechua"}, ["qvm"] = {"Margos-Yarowilca-Lauricocha Quechua"}, ["qvn"] = {"North Junín Quechua"}, ["qvo"] = {"Napo Lowland Quechua"}, ["qvp"] = {"Pacaraos Quechua"}, ["qvs"] = {"San Martín Quechua"}, ["qvw"] = {"Huaylla Wanca Quechua"}, ["qvy"] = {"Queyu"}, ["qvz"] = {"Northern Pastaza Quichua"}, ["qwa"] = {"Corongo Ancash Quechua"}, ["qwc"] = {"Classical Quechua"}, ["qwe"] = {"Quechuan (family)"}, ["qwh"] = {"Huaylas Ancash Quechua"}, ["qwm"] = {"Kuman (Russia)"}, ["qws"] = {"Sihuas Ancash Quechua"}, ["qwt"] = {"Kwalhioqua-Tlatskanai"}, ["qxa"] = {"Chiquián Ancash Quechua"}, ["qxc"] = {"Chincha Quechua"}, ["qxh"] = {"Panao Huánuco Quechua"}, ["qxl"] = {"Salasaca Highland Quichua"}, ["qxn"] = {"Northern Conchucos Ancash Quechua"}, ["qxo"] = {"Southern Conchucos Ancash Quechua"}, ["qxp"] = {"Puno Quechua"}, ["qxq"] = {"Qashqa'i"}, ["qxr"] = {"Cañar Highland Quichua"}, ["qxs"] = {"Southern Qiang"}, ["qxt"] = {"Santa Ana de Tusi Pasco Quechua"}, ["qxu"] = {"Arequipa-La Unión Quechua"}, ["qxw"] = {"Jauja Wanca Quechua"}, ["qya"] = {"Quenya"}, ["qyp"] = {"Quiripi"}, ["raa"] = {"Dungmali"}, ["rab"] = {"Camling"}, ["rac"] = {"Rasawa"}, ["rad"] = {"Rade"}, ["raf"] = {"Western Meohang"}, ["rag"] = {"Logooli", "Lulogooli"}, ["rah"] = {"Rabha"}, ["rai"] = {"Ramoaaina"}, ["raj"] = {"Rajasthani"}, ["rak"] = {"Tulu-Bohuai"}, ["ral"] = {"Ralte"}, ["ram"] = {"Canela"}, ["ran"] = {"Riantana"}, ["rao"] = {"Rao"}, ["rap"] = {"Rapanui"}, ["raq"] = {"Saam"}, ["rar"] = {"Rarotongan", "Cook Islands Maori"}, ["ras"] = {"Tegali"}, ["rat"] = {"Razajerdi"}, ["rau"] = {"Raute"}, ["rav"] = {"Sampang"}, ["raw"] = {"Rawang"}, ["rax"] = {"Rang"}, ["ray"] = {"Rapa"}, ["raz"] = {"Rahambuu"}, ["rbb"] = {"Rumai Palaung"}, ["rbk"] = {"Northern Bontok"}, ["rbl"] = {"Miraya Bikol"}, ["rbp"] = {"Barababaraba"}, ["rcf"] = {"Réunion Creole French"}, ["rdb"] = {"Rudbari"}, ["rea"] = {"Rerau"}, ["reb"] = {"Rembong"}, ["ree"] = {"Rejang Kayan"}, ["reg"] = {"Kara (Tanzania)"}, ["rei"] = {"Reli"}, ["rej"] = {"Rejang"}, ["rel"] = {"Rendille"}, ["rem"] = {"Remo"}, ["ren"] = {"Rengao"}, ["rer"] = {"Rer Bare"}, ["res"] = {"Reshe"}, ["ret"] = {"Retta"}, ["rey"] = {"Reyesano"}, ["rga"] = {"Roria"}, ["rge"] = {"Romano-Greek"}, ["rgk"] = {"Rangkas"}, ["rgn"] = {"Romagnol"}, ["rgr"] = {"Resígaro"}, ["rgs"] = {"Southern Roglai"}, ["rgu"] = {"Ringgou"}, ["rhg"] = {"Rohingya"}, ["rhp"] = {"Yahang"}, ["ria"] = {"Riang (India)"}, ["rib"] = {"Bribri Sign Language"}, ["rif"] = {"Tarifit"}, ["ril"] = {"Riang Lang", "Riang (Myanmar)"}, ["rim"] = {"Nyaturu"}, ["rin"] = {"Nungu"}, ["rir"] = {"Ribun"}, ["rit"] = {"Ritharrngu"}, ["riu"] = {"Riung"}, ["rjg"] = {"Rajong"}, ["rji"] = {"Raji"}, ["rjs"] = {"Rajbanshi"}, ["rka"] = {"Kraol"}, ["rkb"] = {"Rikbaktsa"}, ["rkh"] = {"Rakahanga-Manihiki"}, ["rki"] = {"Rakhine"}, ["rkm"] = {"Marka"}, ["rkt"] = {"Rangpuri", "Kamta"}, ["rkw"] = {"Arakwal"}, ["rma"] = {"Rama"}, ["rmb"] = {"Rembarrnga"}, ["rmc"] = {"Carpathian Romani"}, ["rmd"] = {"Traveller Danish"}, ["rme"] = {"Angloromani"}, ["rmf"] = {"Kalo Finnish Romani"}, ["rmg"] = {"Traveller Norwegian"}, ["rmh"] = {"Murkim"}, ["rmi"] = {"Lomavren"}, ["rmk"] = {"Romkun"}, ["rml"] = {"Baltic Romani"}, ["rmm"] = {"Roma"}, ["rmn"] = {"Balkan Romani"}, ["rmo"] = {"Sinte Romani"}, ["rmp"] = {"Rempi"}, ["rmq"] = {"Caló"}, ["rms"] = {"Romanian Sign Language"}, ["rmt"] = {"Domari"}, ["rmu"] = {"Tavringer Romani"}, ["rmv"] = {"Romanova"}, ["rmw"] = {"Welsh Romani"}, ["rmx"] = {"Romam"}, ["rmy"] = {"Vlax Romani"}, ["rmz"] = {"Marma"}, ["rnb"] = {"Brunca Sign Language"}, ["rnd"] = {"Ruund"}, ["rng"] = {"Ronga"}, ["rnl"] = {"Ranglong"}, ["rnn"] = {"Roon"}, ["rnp"] = {"Rongpo"}, ["rnr"] = {"Nari Nari"}, ["rnw"] = {"Rungwa"}, ["roa"] = {"Romance languages"}, ["rob"] = {"Tae'"}, ["roc"] = {"Cacgia Roglai"}, ["rod"] = {"Rogo"}, ["roe"] = {"Ronji"}, ["rof"] = {"Rombo"}, ["rog"] = {"Northern Roglai"}, ["rol"] = {"Romblomanon"}, ["rom"] = {"Romany"}, ["roo"] = {"Rotokas"}, ["rop"] = {"Kriol"}, ["ror"] = {"Rongga"}, ["rou"] = {"Runga"}, ["row"] = {"Dela-Oenale"}, ["rpn"] = {"Repanbitip"}, ["rpt"] = {"Rapting"}, ["rri"] = {"Ririo"}, ["rro"] = {"Waima"}, ["rrt"] = {"Arritinngithigh"}, ["rsb"] = {"Romano-Serbian"}, ["rsk"] = {"Ruthenian", "Rusnak"}, ["rsl"] = {"Russian Sign Language"}, ["rsm"] = {"Miriwoong Sign Language"}, ["rsn"] = {"Rwandan Sign Language"}, ["rsw"] = {"Rishiwa"}, ["rtc"] = {"Rungtu Chin"}, ["rth"] = {"Ratahan"}, ["rtm"] = {"Rotuman"}, ["rts"] = {"Yurats"}, ["rtw"] = {"Rathawi"}, ["rub"] = {"Gungu"}, ["ruc"] = {"Ruuli"}, ["rue"] = {"Rusyn"}, ["ruf"] = {"Luguru"}, ["rug"] = {"Roviana"}, ["ruh"] = {"Ruga"}, ["rui"] = {"Rufiji"}, ["ruk"] = {"Che"}, ["ruo"] = {"Istro Romanian"}, ["rup"] = {"Macedo-Romanian", "Aromanian", "Arumanian"}, ["ruq"] = {"Megleno Romanian"}, ["rut"] = {"Rutul"}, ["ruu"] = {"Lanas Lobu"}, ["ruy"] = {"Mala (Nigeria)"}, ["ruz"] = {"Ruma"}, ["rwa"] = {"Rawo"}, ["rwk"] = {"Rwa"}, ["rwl"] = {"Ruwila"}, ["rwm"] = {"Amba (Uganda)"}, ["rwo"] = {"Rawa"}, ["rwr"] = {"Marwari (India)"}, ["rxd"] = {"Ngardi"}, ["rxw"] = {"Karuwali", "Garuwali"}, ["ryn"] = {"Northern Amami-Oshima"}, ["rys"] = {"Yaeyama"}, ["ryu"] = {"Central Okinawan"}, ["rzh"] = {"Rāziḥī"}, ["saa"] = {"Saba"}, ["sab"] = {"Buglere"}, ["sac"] = {"Meskwaki"}, ["sad"] = {"Sandawe"}, ["sae"] = {"Sabanê"}, ["saf"] = {"Safaliba"}, ["sah"] = {"Yakut"}, ["sai"] = {"South American Indian languages"}, ["saj"] = {"Sahu"}, ["sak"] = {"Sake"}, ["sal"] = {"Salishan languages"}, ["sam"] = {"Samaritan Aramaic"}, ["sao"] = {"Sause"}, ["saq"] = {"Samburu"}, ["sar"] = {"Saraveca"}, ["sas"] = {"Sasak"}, ["sat"] = {"Santali"}, ["sau"] = {"Saleman"}, ["sav"] = {"Saafi-Saafi"}, ["saw"] = {"Sawi"}, ["sax"] = {"Sa"}, ["say"] = {"Saya"}, ["saz"] = {"Saurashtra"}, ["sba"] = {"Ngambay"}, ["sbb"] = {"Simbo"}, ["sbc"] = {"Kele (Papua New Guinea)"}, ["sbd"] = {"Southern Samo"}, ["sbe"] = {"Saliba"}, ["sbf"] = {"Chabu", "Shabo"}, ["sbg"] = {"Seget"}, ["sbh"] = {"Sori-Harengan"}, ["sbi"] = {"Seti"}, ["sbj"] = {"Surbakhal"}, ["sbk"] = {"Safwa"}, ["sbl"] = {"Botolan Sambal"}, ["sbm"] = {"Sagala"}, ["sbn"] = {"Sindhi Bhil"}, ["sbo"] = {"Sabüm"}, ["sbp"] = {"Sangu (Tanzania)"}, ["sbq"] = {"Sileibi"}, ["sbr"] = {"Sembakung Murut"}, ["sbs"] = {"Subiya"}, ["sbt"] = {"Kimki"}, ["sbu"] = {"Stod Bhoti"}, ["sbv"] = {"Sabine"}, ["sbw"] = {"Simba"}, ["sbx"] = {"Seberuang"}, ["sby"] = {"Soli"}, ["sbz"] = {"Sara Kaba"}, ["scb"] = {"Chut"}, ["sce"] = {"Dongxiang"}, ["scf"] = {"San Miguel Creole French"}, ["scg"] = {"Sanggau"}, ["sch"] = {"Sakachep"}, ["sci"] = {"Sri Lankan Creole Malay"}, ["sck"] = {"Sadri"}, ["scl"] = {"Shina"}, ["scn"] = {"Sicilian"}, ["sco"] = {"Scots"}, ["scp"] = {"Hyolmo", "Helambu Sherpa"}, ["scq"] = {"Sa'och"}, ["scs"] = {"North Slavey"}, ["sct"] = {"Southern Katang"}, ["scu"] = {"Shumcho"}, ["scv"] = {"Sheni"}, ["scw"] = {"Sha"}, ["scx"] = {"Sicel"}, ["sda"] = {"Toraja-Sa'dan"}, ["sdb"] = {"Shabak"}, ["sdc"] = {"Sassarese Sardinian"}, ["sde"] = {"Surubu"}, ["sdf"] = {"Sarli"}, ["sdg"] = {"Savi"}, ["sdh"] = {"Southern Kurdish"}, ["sdj"] = {"Suundi"}, ["sdk"] = {"Sos Kundi"}, ["sdl"] = {"Saudi Arabian Sign Language"}, ["sdn"] = {"Gallurese Sardinian"}, ["sdo"] = {"Bukar-Sadung Bidayuh"}, ["sdp"] = {"Sherdukpen"}, ["sdq"] = {"Semandang"}, ["sdr"] = {"Oraon Sadri"}, ["sds"] = {"Sened"}, ["sdt"] = {"Shuadit"}, ["sdu"] = {"Sarudu"}, ["sdv"] = {"Eastern Sudanic languages"}, ["sdx"] = {"Sibu Melanau"}, ["sdz"] = {"Sallands"}, ["sea"] = {"Semai"}, ["seb"] = {"Shempire Senoufo"}, ["sec"] = {"Sechelt"}, ["sed"] = {"Sedang"}, ["see"] = {"Seneca"}, ["sef"] = {"Cebaara Senoufo"}, ["seg"] = {"Segeju"}, ["seh"] = {"Sena"}, ["sei"] = {"Seri"}, ["sej"] = {"Sene"}, ["sek"] = {"Sekani"}, ["sel"] = {"Selkup"}, ["sem"] = {"Semitic languages"}, ["sen"] = {"Nanerigé Sénoufo"}, ["seo"] = {"Suarmin"}, ["sep"] = {"Sìcìté Sénoufo"}, ["seq"] = {"Senara Sénoufo"}, ["ser"] = {"Serrano"}, ["ses"] = {"Koyraboro Senni Songhai"}, ["set"] = {"Sentani"}, ["seu"] = {"Serui-Laut"}, ["sev"] = {"Nyarafolo Senoufo"}, ["sew"] = {"Sewa Bay"}, ["sey"] = {"Secoya"}, ["sez"] = {"Senthang Chin"}, ["sfb"] = {"Langue des signes de Belgique Francophone", "French Belgian Sign Language"}, ["sfe"] = {"Eastern Subanen"}, ["sfm"] = {"Small Flowery Miao"}, ["sfs"] = {"South African Sign Language"}, ["sfw"] = {"Sehwi"}, ["sga"] = {"Old Irish (to 900)"}, ["sgb"] = {"Mag-antsi Ayta"}, ["sgc"] = {"Kipsigis"}, ["sgd"] = {"Surigaonon"}, ["sge"] = {"Segai"}, ["sgg"] = {"Swiss-German Sign Language"}, ["sgh"] = {"Shughni"}, ["sgi"] = {"Suga"}, ["sgj"] = {"Surgujia"}, ["sgk"] = {"Sangkong"}, ["sgm"] = {"Singa"}, ["sgn"] = {"Sign languages"}, ["sgp"] = {"Singpho"}, ["sgr"] = {"Sangisari"}, ["sgs"] = {"Samogitian"}, ["sgt"] = {"Brokpake"}, ["sgu"] = {"Salas"}, ["sgw"] = {"Sebat Bet Gurage"}, ["sgx"] = {"Sierra Leone Sign Language"}, ["sgy"] = {"Sanglechi"}, ["sgz"] = {"Sursurunga"}, ["sha"] = {"Shall-Zwall"}, ["shb"] = {"Ninam"}, ["shc"] = {"Sonde"}, ["shd"] = {"Kundal Shahi"}, ["she"] = {"Sheko"}, ["shg"] = {"Shua"}, ["shh"] = {"Shoshoni"}, ["shi"] = {"Tachelhit"}, ["shj"] = {"Shatt"}, ["shk"] = {"Shilluk"}, ["shl"] = {"Shendu"}, ["shm"] = {"Shahrudi"}, ["shn"] = {"Shan"}, ["sho"] = {"Shanga"}, ["shp"] = {"Shipibo-Conibo"}, ["shq"] = {"Sala"}, ["shr"] = {"Shi"}, ["shs"] = {"Shuswap"}, ["sht"] = {"Shasta"}, ["shu"] = {"Chadian Arabic"}, ["shv"] = {"Shehri"}, ["shw"] = {"Shwai"}, ["shx"] = {"She"}, ["shy"] = {"Tachawit"}, ["shz"] = {"Syenara Senoufo"}, ["sia"] = {"Akkala Sami"}, ["sib"] = {"Sebop"}, ["sid"] = {"Sidamo"}, ["sie"] = {"Simaa"}, ["sif"] = {"Siamou"}, ["sig"] = {"Paasaal"}, ["sih"] = {"Zire", "Sîshëë"}, ["sii"] = {"Shom Peng"}, ["sij"] = {"Numbami"}, ["sik"] = {"Sikiana"}, ["sil"] = {"Tumulung Sisaala"}, ["sim"] = {"Mende (Papua New Guinea)"}, ["sio"] = {"Siouan languages"}, ["sip"] = {"Sikkimese"}, ["siq"] = {"Sonia"}, ["sir"] = {"Siri"}, ["sis"] = {"Siuslaw"}, ["sit"] = {"Sino-Tibetan languages"}, ["siu"] = {"Sinagen"}, ["siv"] = {"Sumariup"}, ["siw"] = {"Siwai"}, ["six"] = {"Sumau"}, ["siy"] = {"Sivandi"}, ["siz"] = {"Siwi"}, ["sja"] = {"Epena"}, ["sjb"] = {"Sajau Basap"}, ["sjd"] = {"Kildin Sami"}, ["sje"] = {"Pite Sami"}, ["sjg"] = {"Assangori"}, ["sjk"] = {"Kemi Sami"}, ["sjl"] = {"Sajalong", "Miji"}, ["sjm"] = {"Mapun"}, ["sjn"] = {"Sindarin"}, ["sjo"] = {"Xibe"}, ["sjp"] = {"Surjapuri"}, ["sjr"] = {"Siar-Lak"}, ["sjs"] = {"Senhaja De Srair"}, ["sjt"] = {"Ter Sami"}, ["sju"] = {"Ume Sami"}, ["sjw"] = {"Shawnee"}, ["ska"] = {"Skagit"}, ["skb"] = {"Saek"}, ["skc"] = {"Ma Manda"}, ["skd"] = {"Southern Sierra Miwok"}, ["ske"] = {"Seke (Vanuatu)"}, ["skf"] = {"Sakirabiá"}, ["skg"] = {"Sakalava Malagasy"}, ["skh"] = {"Sikule"}, ["ski"] = {"Sika"}, ["skj"] = {"Seke (Nepal)"}, ["skm"] = {"Kutong"}, ["skn"] = {"Kolibugan Subanon"}, ["sko"] = {"Seko Tengah"}, ["skp"] = {"Sekapan"}, ["skq"] = {"Sininkere"}, ["skr"] = {"Saraiki", "Seraiki"}, ["sks"] = {"Maia"}, ["skt"] = {"Sakata"}, ["sku"] = {"Sakao"}, ["skv"] = {"Skou"}, ["skw"] = {"Skepi Creole Dutch"}, ["skx"] = {"Seko Padang"}, ["sky"] = {"Sikaiana"}, ["skz"] = {"Sekar"}, ["sla"] = {"Slavic languages"}, ["slc"] = {"Sáliba"}, ["sld"] = {"Sissala"}, ["sle"] = {"Sholaga"}, ["slf"] = {"Swiss-Italian Sign Language"}, ["slg"] = {"Selungai Murut"}, ["slh"] = {"Southern Puget Sound Salish"}, ["sli"] = {"Lower Silesian"}, ["slj"] = {"Salumá"}, ["sll"] = {"Salt-Yui"}, ["slm"] = {"Pangutaran Sama"}, ["sln"] = {"Salinan"}, ["slp"] = {"Lamaholot"}, ["slr"] = {"Salar"}, ["sls"] = {"Singapore Sign Language"}, ["slt"] = {"Sila"}, ["slu"] = {"Selaru"}, ["slw"] = {"Sialum"}, ["slx"] = {"Salampasu"}, ["sly"] = {"Selayar"}, ["slz"] = {"Ma'ya"}, ["sma"] = {"Southern Sami"}, ["smb"] = {"Simbari"}, ["smc"] = {"Som"}, ["smf"] = {"Auwe"}, ["smg"] = {"Simbali"}, ["smh"] = {"Samei"}, ["smi"] = {"Sami languages"}, ["smj"] = {"Lule Sami"}, ["smk"] = {"Bolinao"}, ["sml"] = {"Central Sama"}, ["smm"] = {"Musasa"}, ["smn"] = {"Inari Sami"}, ["smp"] = {"Samaritan"}, ["smq"] = {"Samo"}, ["smr"] = {"Simeulue"}, ["sms"] = {"Skolt Sami"}, ["smt"] = {"Simte"}, ["smu"] = {"Somray"}, ["smv"] = {"Samvedi"}, ["smw"] = {"Sumbawa"}, ["smx"] = {"Samba"}, ["smy"] = {"Semnani"}, ["smz"] = {"Simeku"}, ["snc"] = {"Sinaugoro"}, ["sne"] = {"Bau Bidayuh"}, ["snf"] = {"Noon"}, ["sng"] = {"Sanga (Democratic Republic of Congo)"}, ["sni"] = {"Sensi"}, ["snj"] = {"Riverain Sango"}, ["snk"] = {"Soninke"}, ["snl"] = {"Sangil"}, ["snm"] = {"Southern Ma'di"}, ["snn"] = {"Siona"}, ["sno"] = {"Snohomish"}, ["snp"] = {"Siane"}, ["snq"] = {"Sangu (Gabon)"}, ["snr"] = {"Sihan"}, ["sns"] = {"South West Bay", "Nahavaq"}, ["snu"] = {"Senggi", "Viid"}, ["snv"] = {"Sa'ban"}, ["snw"] = {"Selee"}, ["snx"] = {"Sam"}, ["sny"] = {"Saniyo-Hiyewe"}, ["snz"] = {"Kou"}, ["soa"] = {"Thai Song"}, ["sob"] = {"Sobei"}, ["soc"] = {"So (Democratic Republic of Congo)"}, ["sod"] = {"Songoora"}, ["soe"] = {"Songomeno"}, ["sog"] = {"Sogdian"}, ["soh"] = {"Aka"}, ["soi"] = {"Sonha"}, ["soj"] = {"Soi"}, ["sok"] = {"Sokoro"}, ["sol"] = {"Solos"}, ["son"] = {"Songhai languages"}, ["soo"] = {"Songo"}, ["sop"] = {"Songe"}, ["soq"] = {"Kanasi"}, ["sor"] = {"Somrai"}, ["sos"] = {"Seeku"}, ["sou"] = {"Southern Thai"}, ["sov"] = {"Sonsorol"}, ["sow"] = {"Sowanda"}, ["sox"] = {"Swo"}, ["soy"] = {"Miyobe"}, ["soz"] = {"Temi"}, ["spb"] = {"Sepa (Indonesia)"}, ["spc"] = {"Sapé"}, ["spd"] = {"Saep"}, ["spe"] = {"Sepa (Papua New Guinea)"}, ["spg"] = {"Sian"}, ["spi"] = {"Saponi"}, ["spk"] = {"Sengo"}, ["spl"] = {"Selepet"}, ["spm"] = {"Akukem"}, ["spn"] = {"Sanapaná"}, ["spo"] = {"Spokane"}, ["spp"] = {"Supyire Senoufo"}, ["spq"] = {"Loreto-Ucayali Spanish"}, ["spr"] = {"Saparua"}, ["sps"] = {"Saposa"}, ["spt"] = {"Spiti Bhoti"}, ["spu"] = {"Sapuan"}, ["spv"] = {"Sambalpuri", "Kosli"}, ["spx"] = {"South Picene"}, ["spy"] = {"Sabaot"}, ["sqa"] = {"Shama-Sambuga"}, ["sqh"] = {"Shau"}, ["sqj"] = {"Albanian languages"}, ["sqk"] = {"Albanian Sign Language"}, ["sqm"] = {"Suma"}, ["sqn"] = {"Susquehannock"}, ["sqo"] = {"Sorkhei"}, ["sqq"] = {"Sou"}, ["sqr"] = {"Siculo Arabic"}, ["sqs"] = {"Sri Lankan Sign Language"}, ["sqt"] = {"Soqotri"}, ["squ"] = {"Squamish"}, ["sqx"] = {"Kufr Qassem Sign Language (KQSL)"}, ["sra"] = {"Saruga"}, ["srb"] = {"Sora"}, ["src"] = {"Logudorese Sardinian"}, ["sre"] = {"Sara"}, ["srf"] = {"Nafi"}, ["srg"] = {"Sulod"}, ["srh"] = {"Sarikoli"}, ["sri"] = {"Siriano"}, ["srk"] = {"Serudung Murut"}, ["srl"] = {"Isirawa"}, ["srm"] = {"Saramaccan"}, ["srn"] = {"Sranan Tongo"}, ["sro"] = {"Campidanese Sardinian"}, ["srq"] = {"Sirionó"}, ["srr"] = {"Serer"}, ["srs"] = {"Sarsi"}, ["srt"] = {"Sauri"}, ["sru"] = {"Suruí"}, ["srv"] = {"Southern Sorsoganon"}, ["srw"] = {"Serua"}, ["srx"] = {"Sirmauri"}, ["sry"] = {"Sera"}, ["srz"] = {"Shahmirzadi"}, ["ssa"] = {"Nilo-Saharan languages"}, ["ssb"] = {"Southern Sama"}, ["ssc"] = {"Suba-Simbiti"}, ["ssd"] = {"Siroi"}, ["sse"] = {"Balangingi", "Bangingih Sama"}, ["ssf"] = {"Thao"}, ["ssg"] = {"Seimat"}, ["ssh"] = {"Shihhi Arabic"}, ["ssi"] = {"Sansi"}, ["ssj"] = {"Sausi"}, ["ssk"] = {"Sunam"}, ["ssl"] = {"Western Sisaala"}, ["ssm"] = {"Semnam"}, ["ssn"] = {"Waata"}, ["sso"] = {"Sissano"}, ["ssp"] = {"Spanish Sign Language"}, ["ssq"] = {"So'a"}, ["ssr"] = {"Swiss-French Sign Language"}, ["sss"] = {"Sô"}, ["sst"] = {"Sinasina"}, ["ssu"] = {"Susuami"}, ["ssv"] = {"Shark Bay"}, ["ssx"] = {"Samberigi"}, ["ssy"] = {"Saho"}, ["ssz"] = {"Sengseng"}, ["sta"] = {"Settla"}, ["stb"] = {"Northern Subanen"}, ["std"] = {"Sentinel"}, ["ste"] = {"Liana-Seti"}, ["stf"] = {"Seta"}, ["stg"] = {"Trieng"}, ["sth"] = {"Shelta"}, ["sti"] = {"Bulo Stieng"}, ["stj"] = {"Matya Samo"}, ["stk"] = {"Arammba"}, ["stl"] = {"Stellingwerfs"}, ["stm"] = {"Setaman"}, ["stn"] = {"Owa"}, ["sto"] = {"Stoney"}, ["stp"] = {"Southeastern Tepehuan"}, ["stq"] = {"Saterfriesisch"}, ["str"] = {"Straits Salish"}, ["sts"] = {"Shumashti"}, ["stt"] = {"Budeh Stieng"}, ["stu"] = {"Samtao"}, ["stv"] = {"Silt'e"}, ["stw"] = {"Satawalese"}, ["sty"] = {"Siberian Tatar"}, ["sua"] = {"Sulka"}, ["sub"] = {"Suku"}, ["suc"] = {"Western Subanon"}, ["sue"] = {"Suena"}, ["sug"] = {"Suganga"}, ["sui"] = {"Suki"}, ["suj"] = {"Shubi"}, ["suk"] = {"Sukuma"}, ["suo"] = {"Bouni"}, ["suq"] = {"Tirmaga-Chai Suri", "Suri"}, ["sur"] = {"Mwaghavul"}, ["sus"] = {"Susu"}, ["sut"] = {"Subtiaba"}, ["suv"] = {"Puroik"}, ["suw"] = {"Sumbwa"}, ["sux"] = {"Sumerian"}, ["suy"] = {"Suyá"}, ["suz"] = {"Sunwar"}, ["sva"] = {"Svan"}, ["svb"] = {"Ulau-Suain"}, ["svc"] = {"Vincentian Creole English"}, ["sve"] = {"Serili"}, ["svk"] = {"Slovakian Sign Language"}, ["svm"] = {"Slavomolisano"}, ["svs"] = {"Savosavo"}, ["svx"] = {"Skalvian"}, ["swb"] = {"Maore Comorian"}, ["swc"] = {"Congo Swahili"}, ["swf"] = {"Sere"}, ["swg"] = {"Swabian"}, ["swh"] = {"Swahili (individual language)", "Kiswahili"}, ["swi"] = {"Sui"}, ["swj"] = {"Sira"}, ["swk"] = {"Malawi Sena"}, ["swl"] = {"Swedish Sign Language"}, ["swm"] = {"Samosa"}, ["swn"] = {"Sawknah"}, ["swo"] = {"Shanenawa"}, ["swp"] = {"Suau"}, ["swq"] = {"Sharwa"}, ["swr"] = {"Saweru"}, ["sws"] = {"Seluwasan"}, ["swt"] = {"Sawila"}, ["swu"] = {"Suwawa"}, ["swv"] = {"Shekhawati"}, ["sww"] = {"Sowa"}, ["swx"] = {"Suruahá"}, ["swy"] = {"Sarua"}, ["sxb"] = {"Suba"}, ["sxc"] = {"Sicanian"}, ["sxe"] = {"Sighu"}, ["sxg"] = {"Shuhi", "Shixing"}, ["sxk"] = {"Southern Kalapuya"}, ["sxl"] = {"Selian"}, ["sxm"] = {"Samre"}, ["sxn"] = {"Sangir"}, ["sxo"] = {"Sorothaptic"}, ["sxr"] = {"Saaroa"}, ["sxs"] = {"Sasaru"}, ["sxu"] = {"Upper Saxon"}, ["sxw"] = {"Saxwe Gbe"}, ["sya"] = {"Siang"}, ["syb"] = {"Central Subanen"}, ["syc"] = {"Classical Syriac"}, ["syd"] = {"Samoyedic languages"}, ["syi"] = {"Seki"}, ["syk"] = {"Sukur"}, ["syl"] = {"Sylheti"}, ["sym"] = {"Maya Samo"}, ["syn"] = {"Senaya"}, ["syo"] = {"Suoy"}, ["syr"] = {"Syriac"}, ["sys"] = {"Sinyar"}, ["syw"] = {"Kagate"}, ["syx"] = {"Samay"}, ["syy"] = {"Al-Sayyid Bedouin Sign Language"}, ["sza"] = {"Semelai"}, ["szb"] = {"Ngalum"}, ["szc"] = {"Semaq Beri"}, ["sze"] = {"Seze"}, ["szg"] = {"Sengele"}, ["szl"] = {"Silesian"}, ["szn"] = {"Sula"}, ["szp"] = {"Suabo"}, ["szs"] = {"Solomon Islands Sign Language"}, ["szv"] = {"Isu (Fako Division)"}, ["szw"] = {"Sawai"}, ["szy"] = {"Sakizaya"}, ["taa"] = {"Lower Tanana"}, ["tab"] = {"Tabassaran"}, ["tac"] = {"Lowland Tarahumara"}, ["tad"] = {"Tause"}, ["tae"] = {"Tariana"}, ["taf"] = {"Tapirapé"}, ["tag"] = {"Tagoi"}, ["tai"] = {"Tai languages"}, ["taj"] = {"Eastern Tamang"}, ["tak"] = {"Tala"}, ["tal"] = {"Tal"}, ["tan"] = {"Tangale"}, ["tao"] = {"Yami"}, ["tap"] = {"Taabwa"}, ["taq"] = {"Tamasheq"}, ["tar"] = {"Central Tarahumara"}, ["tas"] = {"Tay Boi"}, ["tau"] = {"Upper Tanana"}, ["tav"] = {"Tatuyo"}, ["taw"] = {"Tai"}, ["tax"] = {"Tamki"}, ["tay"] = {"Atayal"}, ["taz"] = {"Tocho"}, ["tba"] = {"Aikanã"}, ["tbc"] = {"Takia"}, ["tbd"] = {"Kaki Ae"}, ["tbe"] = {"Tanimbili"}, ["tbf"] = {"Mandara"}, ["tbg"] = {"North Tairora"}, ["tbh"] = {"Dharawal", "Thurawal"}, ["tbi"] = {"Gaam"}, ["tbj"] = {"Tiang"}, ["tbk"] = {"Calamian Tagbanwa"}, ["tbl"] = {"Tboli"}, ["tbm"] = {"Tagbu"}, ["tbn"] = {"Barro Negro Tunebo"}, ["tbo"] = {"Tawala"}, ["tbp"] = {"Taworta", "Diebroud"}, ["tbq"] = {"Tibeto-Burman languages"}, ["tbr"] = {"Tumtum"}, ["tbs"] = {"Tanguat"}, ["tbt"] = {"Tembo (Kitembo)"}, ["tbu"] = {"Tubar"}, ["tbv"] = {"Tobo"}, ["tbw"] = {"Tagbanwa"}, ["tbx"] = {"Kapin"}, ["tby"] = {"Tabaru"}, ["tbz"] = {"Ditammari"}, ["tca"] = {"Ticuna"}, ["tcb"] = {"Tanacross"}, ["tcc"] = {"Datooga"}, ["tcd"] = {"Tafi"}, ["tce"] = {"Southern Tutchone"}, ["tcf"] = {"Malinaltepec Me'phaa", "Malinaltepec Tlapanec"}, ["tcg"] = {"Tamagario"}, ["tch"] = {"Turks And Caicos Creole English"}, ["tci"] = {"Wára"}, ["tck"] = {"Tchitchege"}, ["tcl"] = {"Taman (Myanmar)"}, ["tcm"] = {"Tanahmerah"}, ["tcn"] = {"Tichurong"}, ["tco"] = {"Taungyo"}, ["tcp"] = {"Tawr Chin"}, ["tcq"] = {"Kaiy"}, ["tcs"] = {"Torres Strait Creole", "Yumplatok"}, ["tct"] = {"T'en"}, ["tcu"] = {"Southeastern Tarahumara"}, ["tcw"] = {"Tecpatlán Totonac"}, ["tcx"] = {"Toda"}, ["tcy"] = {"Tulu"}, ["tcz"] = {"Thado Chin"}, ["tda"] = {"Tagdal"}, ["tdb"] = {"Panchpargania"}, ["tdc"] = {"Emberá-Tadó"}, ["tdd"] = {"Tai Nüa"}, ["tde"] = {"Tiranige Diga Dogon"}, ["tdf"] = {"Talieng"}, ["tdg"] = {"Western Tamang"}, ["tdh"] = {"Thulung"}, ["tdi"] = {"Tomadino"}, ["tdj"] = {"Tajio"}, ["tdk"] = {"Tambas"}, ["tdl"] = {"Sur"}, ["tdm"] = {"Taruma"}, ["tdn"] = {"Tondano"}, ["tdo"] = {"Teme"}, ["tdq"] = {"Tita"}, ["tdr"] = {"Todrah"}, ["tds"] = {"Doutai"}, ["tdt"] = {"Tetun Dili"}, ["tdv"] = {"Toro"}, ["tdx"] = {"Tandroy-Mahafaly Malagasy"}, ["tdy"] = {"Tadyawan"}, ["tea"] = {"Temiar"}, ["teb"] = {"Tetete"}, ["tec"] = {"Terik"}, ["ted"] = {"Tepo Krumen"}, ["tee"] = {"Huehuetla Tepehua"}, ["tef"] = {"Teressa"}, ["teg"] = {"Teke-Tege"}, ["teh"] = {"Tehuelche"}, ["tei"] = {"Torricelli"}, ["tek"] = {"Ibali Teke"}, ["tem"] = {"Timne"}, ["ten"] = {"Tama (Colombia)"}, ["teo"] = {"Teso"}, ["tep"] = {"Tepecano"}, ["teq"] = {"Temein"}, ["ter"] = {"Tereno"}, ["tes"] = {"Tengger"}, ["tet"] = {"Tetum"}, ["teu"] = {"Soo"}, ["tev"] = {"Teor"}, ["tew"] = {"Tewa (USA)"}, ["tex"] = {"Tennet"}, ["tey"] = {"Tulishi"}, ["tez"] = {"Tetserret"}, ["tfi"] = {"Tofin Gbe"}, ["tfn"] = {"Tanaina"}, ["tfo"] = {"Tefaro"}, ["tfr"] = {"Teribe"}, ["tft"] = {"Ternate"}, ["tga"] = {"Sagalla"}, ["tgb"] = {"Tobilung"}, ["tgc"] = {"Tigak"}, ["tgd"] = {"Ciwogai"}, ["tge"] = {"Eastern Gorkha Tamang"}, ["tgf"] = {"Chalikha"}, ["tgh"] = {"Tobagonian Creole English"}, ["tgi"] = {"Lawunuia"}, ["tgj"] = {"Tagin"}, ["tgn"] = {"Tandaganon"}, ["tgo"] = {"Sudest"}, ["tgp"] = {"Tangoa"}, ["tgq"] = {"Tring"}, ["tgr"] = {"Tareng"}, ["tgs"] = {"Nume"}, ["tgt"] = {"Central Tagbanwa"}, ["tgu"] = {"Tanggu"}, ["tgv"] = {"Tingui-Boto"}, ["tgw"] = {"Tagwana Senoufo"}, ["tgx"] = {"Tagish"}, ["tgy"] = {"Togoyo"}, ["tgz"] = {"Tagalaka"}, ["thd"] = {"Kuuk Thaayorre", "Thayore"}, ["the"] = {"Chitwania Tharu"}, ["thf"] = {"Thangmi"}, ["thh"] = {"Northern Tarahumara"}, ["thi"] = {"Tai Long"}, ["thk"] = {"Tharaka", "Kitharaka"}, ["thl"] = {"Dangaura Tharu"}, ["thm"] = {"Aheu"}, ["thn"] = {"Thachanadan"}, ["thp"] = {"Thompson"}, ["thq"] = {"Kochila Tharu"}, ["thr"] = {"Rana Tharu"}, ["ths"] = {"Thakali"}, ["tht"] = {"Tahltan"}, ["thu"] = {"Thuri"}, ["thv"] = {"Tahaggart Tamahaq"}, ["thy"] = {"Tha"}, ["thz"] = {"Tayart Tamajeq"}, ["tia"] = {"Tidikelt Tamazight"}, ["tic"] = {"Tira"}, ["tif"] = {"Tifal"}, ["tig"] = {"Tigre"}, ["tih"] = {"Timugon Murut"}, ["tii"] = {"Tiene"}, ["tij"] = {"Tilung"}, ["tik"] = {"Tikar"}, ["til"] = {"Tillamook"}, ["tim"] = {"Timbe"}, ["tin"] = {"Tindi"}, ["tio"] = {"Teop"}, ["tip"] = {"Trimuris"}, ["tiq"] = {"Tiéfo"}, ["tis"] = {"Masadiit Itneg"}, ["tit"] = {"Tinigua"}, ["tiu"] = {"Adasen"}, ["tiv"] = {"Tiv"}, ["tiw"] = {"Tiwi"}, ["tix"] = {"Southern Tiwa"}, ["tiy"] = {"Tiruray"}, ["tiz"] = {"Tai Hongjin"}, ["tja"] = {"Tajuasohn"}, ["tjg"] = {"Tunjung"}, ["tji"] = {"Northern Tujia"}, ["tjj"] = {"Tjungundji"}, ["tjl"] = {"Tai Laing"}, ["tjm"] = {"Timucua"}, ["tjn"] = {"Tonjon"}, ["tjo"] = {"Temacine Tamazight"}, ["tjp"] = {"Tjupany"}, ["tjs"] = {"Southern Tujia"}, ["tju"] = {"Tjurruru"}, ["tjw"] = {"Djabwurrung"}, ["tka"] = {"Truká"}, ["tkb"] = {"Buksa"}, ["tkd"] = {"Tukudede"}, ["tke"] = {"Takwane"}, ["tkf"] = {"Tukumanféd"}, ["tkg"] = {"Tesaka Malagasy"}, ["tkl"] = {"Tokelau"}, ["tkm"] = {"Takelma"}, ["tkn"] = {"Toku-No-Shima"}, ["tkp"] = {"Tikopia"}, ["tkq"] = {"Tee"}, ["tkr"] = {"Tsakhur"}, ["tks"] = {"Takestani"}, ["tkt"] = {"Kathoriya Tharu"}, ["tku"] = {"Upper Necaxa Totonac"}, ["tkv"] = {"Mur Pano"}, ["tkw"] = {"Teanu"}, ["tkx"] = {"Tangko"}, ["tkz"] = {"Takua"}, ["tla"] = {"Southwestern Tepehuan"}, ["tlb"] = {"Tobelo"}, ["tlc"] = {"Yecuatla Totonac"}, ["tld"] = {"Talaud"}, ["tlf"] = {"Telefol"}, ["tlg"] = {"Tofanma"}, ["tlh"] = {"Klingon", "tlhIngan Hol"}, ["tli"] = {"Tlingit"}, ["tlj"] = {"Talinga-Bwisi"}, ["tlk"] = {"Taloki"}, ["tll"] = {"Tetela"}, ["tlm"] = {"Tolomako"}, ["tln"] = {"Talondo'"}, ["tlo"] = {"Talodi"}, ["tlp"] = {"Filomena Mata-Coahuitlán Totonac"}, ["tlq"] = {"Tai Loi"}, ["tlr"] = {"Talise"}, ["tls"] = {"Tambotalo"}, ["tlt"] = {"Sou Nama", "Teluti"}, ["tlu"] = {"Tulehu"}, ["tlv"] = {"Taliabu"}, ["tlx"] = {"Khehek"}, ["tly"] = {"Talysh"}, ["tma"] = {"Tama (Chad)"}, ["tmb"] = {"Katbol", "Avava"}, ["tmc"] = {"Tumak"}, ["tmd"] = {"Haruai"}, ["tme"] = {"Tremembé"}, ["tmf"] = {"Toba-Maskoy"}, ["tmg"] = {"Ternateño"}, ["tmh"] = {"Tamashek"}, ["tmi"] = {"Tutuba"}, ["tmj"] = {"Samarokena"}, ["tml"] = {"Tamnim Citak"}, ["tmm"] = {"Tai Thanh"}, ["tmn"] = {"Taman (Indonesia)"}, ["tmo"] = {"Temoq"}, ["tmq"] = {"Tumleo"}, ["tmr"] = {"Jewish Babylonian Aramaic (ca. 200-1200 CE)"}, ["tms"] = {"Tima"}, ["tmt"] = {"Tasmate"}, ["tmu"] = {"Iau"}, ["tmv"] = {"Tembo (Motembo)"}, ["tmw"] = {"Temuan"}, ["tmy"] = {"Tami"}, ["tmz"] = {"Tamanaku"}, ["tna"] = {"Tacana"}, ["tnb"] = {"Western Tunebo"}, ["tnc"] = {"Tanimuca-Retuarã"}, ["tnd"] = {"Angosturas Tunebo"}, ["tng"] = {"Tobanga"}, ["tnh"] = {"Maiani"}, ["tni"] = {"Tandia"}, ["tnk"] = {"Kwamera"}, ["tnl"] = {"Lenakel"}, ["tnm"] = {"Tabla"}, ["tnn"] = {"North Tanna"}, ["tno"] = {"Toromono"}, ["tnp"] = {"Whitesands"}, ["tnq"] = {"Taino"}, ["tnr"] = {"Ménik"}, ["tns"] = {"Tenis"}, ["tnt"] = {"Tontemboan"}, ["tnu"] = {"Tay Khang"}, ["tnv"] = {"Tangchangya"}, ["tnw"] = {"Tonsawang"}, ["tnx"] = {"Tanema"}, ["tny"] = {"Tongwe"}, ["tnz"] = {"Ten'edn"}, ["tob"] = {"Toba"}, ["toc"] = {"Coyutla Totonac"}, ["tod"] = {"Toma"}, ["tof"] = {"Gizrra"}, ["tog"] = {"Tonga (Nyasa)"}, ["toh"] = {"Gitonga"}, ["toi"] = {"Tonga (Zambia)"}, ["toj"] = {"Tojolabal"}, ["tok"] = {"Toki Pona"}, ["tol"] = {"Tolowa"}, ["tom"] = {"Tombulu"}, ["too"] = {"Xicotepec De Juárez Totonac"}, ["top"] = {"Papantla Totonac"}, ["toq"] = {"Toposa"}, ["tor"] = {"Togbo-Vara Banda"}, ["tos"] = {"Highland Totonac"}, ["tou"] = {"Tho"}, ["tov"] = {"Upper Taromi"}, ["tow"] = {"Jemez"}, ["tox"] = {"Tobian"}, ["toy"] = {"Topoiyo"}, ["toz"] = {"To"}, ["tpa"] = {"Taupota"}, ["tpc"] = {"Azoyú Me'phaa", "Azoyú Tlapanec"}, ["tpe"] = {"Tippera"}, ["tpf"] = {"Tarpia"}, ["tpg"] = {"Kula"}, ["tpi"] = {"Tok Pisin"}, ["tpj"] = {"Tapieté"}, ["tpk"] = {"Tupinikin"}, ["tpl"] = {"Tlacoapa Me'phaa", "Tlacoapa Tlapanec"}, ["tpm"] = {"Tampulma"}, ["tpn"] = {"Tupinambá"}, ["tpo"] = {"Tai Pao"}, ["tpp"] = {"Pisaflores Tepehua"}, ["tpq"] = {"Tukpa"}, ["tpr"] = {"Tuparí"}, ["tpt"] = {"Tlachichilco Tepehua"}, ["tpu"] = {"Tampuan"}, ["tpv"] = {"Tanapag"}, ["tpx"] = {"Acatepec Me'phaa", "Acatepec Tlapanec"}, ["tpy"] = {"Trumai"}, ["tpz"] = {"Tinputz"}, ["tqb"] = {"Tembé"}, ["tql"] = {"Lehali"}, ["tqm"] = {"Turumsa"}, ["tqn"] = {"Tenino"}, ["tqo"] = {"Toaripi"}, ["tqp"] = {"Tomoip"}, ["tqq"] = {"Tunni"}, ["tqr"] = {"Torona"}, ["tqt"] = {"Western Totonac"}, ["tqu"] = {"Touo"}, ["tqw"] = {"Tonkawa"}, ["tra"] = {"Tirahi"}, ["trb"] = {"Terebu"}, ["trc"] = {"Copala Triqui"}, ["trd"] = {"Turi"}, ["tre"] = {"East Tarangan"}, ["trf"] = {"Trinidadian Creole English"}, ["trg"] = {"Lishán Didán"}, ["trh"] = {"Turaka"}, ["tri"] = {"Trió"}, ["trj"] = {"Toram"}, ["trk"] = {"Turkic languages"}, ["trl"] = {"Traveller Scottish"}, ["trm"] = {"Tregami"}, ["trn"] = {"Trinitario"}, ["tro"] = {"Tarao Naga"}, ["trp"] = {"Kok Borok"}, ["trq"] = {"San Martín Itunyoso Triqui"}, ["trr"] = {"Taushiro"}, ["trs"] = {"Chicahuaxtla Triqui"}, ["trt"] = {"Tunggare"}, ["tru"] = {"Turoyo", "Surayt"}, ["trv"] = {"Sediq", "Seediq", "Taroko"}, ["trw"] = {"Torwali"}, ["trx"] = {"Tringgus-Sembaan Bidayuh"}, ["try"] = {"Turung"}, ["trz"] = {"Torá"}, ["tsa"] = {"Tsaangi"}, ["tsb"] = {"Tsamai"}, ["tsc"] = {"Tswa"}, ["tsd"] = {"Tsakonian"}, ["tse"] = {"Tunisian Sign Language"}, ["tsg"] = {"Tausug"}, ["tsh"] = {"Tsuvan"}, ["tsi"] = {"Tsimshian"}, ["tsj"] = {"Tshangla"}, ["tsk"] = {"Tseku"}, ["tsl"] = {"Ts'ün-Lao"}, ["tsm"] = {"Turkish Sign Language", "Türk İşaret Dili"}, ["tsp"] = {"Northern Toussian"}, ["tsq"] = {"Thai Sign Language"}, ["tsr"] = {"Akei"}, ["tss"] = {"Taiwan Sign Language"}, ["tst"] = {"Tondi Songway Kiini"}, ["tsu"] = {"Tsou"}, ["tsv"] = {"Tsogo"}, ["tsw"] = {"Tsishingini"}, ["tsx"] = {"Mubami"}, ["tsy"] = {"Tebul Sign Language"}, ["tsz"] = {"Purepecha"}, ["tta"] = {"Tutelo"}, ["ttb"] = {"Gaa"}, ["ttc"] = {"Tektiteko"}, ["ttd"] = {"Tauade"}, ["tte"] = {"Bwanabwana"}, ["ttf"] = {"Tuotomb"}, ["ttg"] = {"Tutong"}, ["tth"] = {"Upper Ta'oih"}, ["tti"] = {"Tobati"}, ["ttj"] = {"Tooro"}, ["ttk"] = {"Totoro"}, ["ttl"] = {"Totela"}, ["ttm"] = {"Northern Tutchone"}, ["ttn"] = {"Towei"}, ["tto"] = {"Lower Ta'oih"}, ["ttp"] = {"Tombelala"}, ["ttq"] = {"Tawallammat Tamajaq"}, ["ttr"] = {"Tera"}, ["tts"] = {"Northeastern Thai"}, ["ttt"] = {"Muslim Tat"}, ["ttu"] = {"Torau"}, ["ttv"] = {"Titan"}, ["ttw"] = {"Long Wat"}, ["tty"] = {"Sikaritai"}, ["ttz"] = {"Tsum"}, ["tua"] = {"Wiarumus"}, ["tub"] = {"Tübatulabal"}, ["tuc"] = {"Mutu"}, ["tud"] = {"Tuxá"}, ["tue"] = {"Tuyuca"}, ["tuf"] = {"Central Tunebo"}, ["tug"] = {"Tunia"}, ["tuh"] = {"Taulil"}, ["tui"] = {"Tupuri"}, ["tuj"] = {"Tugutil"}, ["tul"] = {"Tula"}, ["tum"] = {"Tumbuka"}, ["tun"] = {"Tunica"}, ["tuo"] = {"Tucano"}, ["tup"] = {"Tupi languages"}, ["tuq"] = {"Tedaga"}, ["tus"] = {"Tuscarora"}, ["tut"] = {"Altaic languages"}, ["tuu"] = {"Tututni"}, ["tuv"] = {"Turkana"}, ["tuw"] = {"Tungus languages"}, ["tux"] = {"Tuxináwa"}, ["tuy"] = {"Tugen"}, ["tuz"] = {"Turka"}, ["tva"] = {"Vaghua"}, ["tvd"] = {"Tsuvadi"}, ["tve"] = {"Te'un"}, ["tvi"] = {"Tulai"}, ["tvk"] = {"Southeast Ambrym"}, ["tvl"] = {"Tuvalu"}, ["tvm"] = {"Tela-Masbuar"}, ["tvn"] = {"Tavoyan"}, ["tvo"] = {"Tidore"}, ["tvs"] = {"Taveta"}, ["tvt"] = {"Tutsa Naga"}, ["tvu"] = {"Tunen"}, ["tvw"] = {"Sedoa"}, ["tvx"] = {"Taivoan"}, ["tvy"] = {"Timor Pidgin"}, ["twa"] = {"Twana"}, ["twb"] = {"Western Tawbuid"}, ["twc"] = {"Teshenawa"}, ["twd"] = {"Twents"}, ["twe"] = {"Tewa (Indonesia)"}, ["twf"] = {"Northern Tiwa"}, ["twg"] = {"Tereweng"}, ["twh"] = {"Tai Dón"}, ["twl"] = {"Tawara"}, ["twm"] = {"Tawang Monpa"}, ["twn"] = {"Twendi"}, ["two"] = {"Tswapong"}, ["twp"] = {"Ere"}, ["twq"] = {"Tasawaq"}, ["twr"] = {"Southwestern Tarahumara"}, ["twt"] = {"Turiwára"}, ["twu"] = {"Termanu"}, ["tww"] = {"Tuwari"}, ["twx"] = {"Tewe"}, ["twy"] = {"Tawoyan"}, ["txa"] = {"Tombonuo"}, ["txb"] = {"Tokharian B"}, ["txc"] = {"Tsetsaut"}, ["txe"] = {"Totoli"}, ["txg"] = {"Tangut"}, ["txh"] = {"Thracian"}, ["txi"] = {"Ikpeng"}, ["txj"] = {"Tarjumo"}, ["txm"] = {"Tomini"}, ["txn"] = {"West Tarangan"}, ["txo"] = {"Toto"}, ["txq"] = {"Tii"}, ["txr"] = {"Tartessian"}, ["txs"] = {"Tonsea"}, ["txt"] = {"Citak"}, ["txu"] = {"Kayapó"}, ["txx"] = {"Tatana"}, ["txy"] = {"Tanosy Malagasy"}, ["tya"] = {"Tauya"}, ["tye"] = {"Kyanga"}, ["tyh"] = {"O'du"}, ["tyi"] = {"Teke-Tsaayi"}, ["tyj"] = {"Tai Do", "Tai Yo"}, ["tyl"] = {"Thu Lao"}, ["tyn"] = {"Kombai"}, ["typ"] = {"Thaypan"}, ["tyr"] = {"Tai Daeng"}, ["tys"] = {"Tày Sa Pa"}, ["tyt"] = {"Tày Tac"}, ["tyu"] = {"Kua"}, ["tyv"] = {"Tuvinian"}, ["tyx"] = {"Teke-Tyee"}, ["tyy"] = {"Tiyaa"}, ["tyz"] = {"Tày"}, ["tza"] = {"Tanzanian Sign Language"}, ["tzh"] = {"Tzeltal"}, ["tzj"] = {"Tz'utujil"}, ["tzl"] = {"Talossan"}, ["tzm"] = {"Central Atlas Tamazight"}, ["tzn"] = {"Tugun"}, ["tzo"] = {"Tzotzil"}, ["tzx"] = {"Tabriak"}, ["uam"] = {"Uamué"}, ["uan"] = {"Kuan"}, ["uar"] = {"Tairuma"}, ["uba"] = {"Ubang"}, ["ubi"] = {"Ubi"}, ["ubl"] = {"Buhi'non Bikol"}, ["ubr"] = {"Ubir"}, ["ubu"] = {"Umbu-Ungu"}, ["uby"] = {"Ubykh"}, ["uda"] = {"Uda"}, ["ude"] = {"Udihe"}, ["udg"] = {"Muduga"}, ["udi"] = {"Udi"}, ["udj"] = {"Ujir"}, ["udl"] = {"Wuzlam"}, ["udm"] = {"Udmurt"}, ["udu"] = {"Uduk"}, ["ues"] = {"Kioko"}, ["ufi"] = {"Ufim"}, ["uga"] = {"Ugaritic"}, ["ugb"] = {"Kuku-Ugbanh"}, ["uge"] = {"Ughele"}, ["ugh"] = {"Kubachi"}, ["ugn"] = {"Ugandan Sign Language"}, ["ugo"] = {"Ugong"}, ["ugy"] = {"Uruguayan Sign Language"}, ["uha"] = {"Uhami"}, ["uhn"] = {"Damal"}, ["uis"] = {"Uisai"}, ["uiv"] = {"Iyive"}, ["uji"] = {"Tanjijili"}, ["uka"] = {"Kaburi"}, ["ukg"] = {"Ukuriguma"}, ["ukh"] = {"Ukhwejo"}, ["uki"] = {"Kui (India)"}, ["ukk"] = {"Muak Sa-aak"}, ["ukl"] = {"Ukrainian Sign Language"}, ["ukp"] = {"Ukpe-Bayobiri"}, ["ukq"] = {"Ukwa"}, ["uks"] = {"Urubú-Kaapor Sign Language", "Kaapor Sign Language"}, ["uku"] = {"Ukue"}, ["ukv"] = {"Kuku"}, ["ukw"] = {"Ukwuani-Aboh-Ndoni"}, ["uky"] = {"Kuuk-Yak"}, ["ula"] = {"Fungwa"}, ["ulb"] = {"Ulukwumi"}, ["ulc"] = {"Ulch"}, ["ule"] = {"Lule"}, ["ulf"] = {"Usku", "Afra"}, ["uli"] = {"Ulithian"}, ["ulk"] = {"Meriam Mir"}, ["ull"] = {"Ullatan"}, ["ulm"] = {"Ulumanda'"}, ["uln"] = {"Unserdeutsch"}, ["ulu"] = {"Uma' Lung"}, ["ulw"] = {"Ulwa"}, ["uly"] = {"Buli"}, ["uma"] = {"Umatilla"}, ["umb"] = {"Umbundu"}, ["umc"] = {"Marrucinian"}, ["umd"] = {"Umbindhamu"}, ["umg"] = {"Morrobalama", "Umbuygamu"}, ["umi"] = {"Ukit"}, ["umm"] = {"Umon"}, ["umn"] = {"Makyan Naga"}, ["umo"] = {"Umotína"}, ["ump"] = {"Umpila"}, ["umr"] = {"Umbugarla"}, ["ums"] = {"Pendau"}, ["umu"] = {"Munsee"}, ["una"] = {"North Watut"}, ["und"] = {"Undetermined"}, ["une"] = {"Uneme"}, ["ung"] = {"Ngarinyin"}, ["uni"] = {"Uni"}, ["unk"] = {"Enawené-Nawé"}, ["unm"] = {"Unami"}, ["unn"] = {"Kurnai"}, ["unr"] = {"Mundari"}, ["unu"] = {"Unubahe"}, ["unx"] = {"Munda"}, ["unz"] = {"Unde Kaili"}, ["uon"] = {"Kulon"}, ["upi"] = {"Umeda"}, ["upv"] = {"Uripiv-Wala-Rano-Atchin"}, ["ura"] = {"Urarina"}, ["urb"] = {"Urubú-Kaapor", "Kaapor"}, ["urc"] = {"Urningangg"}, ["ure"] = {"Uru"}, ["urf"] = {"Uradhi"}, ["urg"] = {"Urigina"}, ["urh"] = {"Urhobo"}, ["uri"] = {"Urim"}, ["urj"] = {"Uralic languages"}, ["urk"] = {"Urak Lawoi'"}, ["url"] = {"Urali"}, ["urm"] = {"Urapmin"}, ["urn"] = {"Uruangnirin"}, ["uro"] = {"Ura (Papua New Guinea)"}, ["urp"] = {"Uru-Pa-In"}, ["urr"] = {"Lehalurup", "Löyöp"}, ["urt"] = {"Urat"}, ["uru"] = {"Urumi"}, ["urv"] = {"Uruava"}, ["urw"] = {"Sop"}, ["urx"] = {"Urimo"}, ["ury"] = {"Orya"}, ["urz"] = {"Uru-Eu-Wau-Wau"}, ["usa"] = {"Usarufa"}, ["ush"] = {"Ushojo"}, ["usi"] = {"Usui"}, ["usk"] = {"Usaghade"}, ["usp"] = {"Uspanteco"}, ["uss"] = {"us-Saare"}, ["usu"] = {"Uya"}, ["uta"] = {"Otank"}, ["ute"] = {"Ute-Southern Paiute"}, ["uth"] = {"ut-Hun"}, ["utp"] = {"Amba (Solomon Islands)"}, ["utr"] = {"Etulo"}, ["utu"] = {"Utu"}, ["uum"] = {"Urum"}, ["uur"] = {"Ura (Vanuatu)"}, ["uuu"] = {"U"}, ["uve"] = {"West Uvean", "Fagauvea"}, ["uvh"] = {"Uri"}, ["uvl"] = {"Lote"}, ["uwa"] = {"Kuku-Uwanh"}, ["uya"] = {"Doko-Uyanga"}, ["uzn"] = {"Northern Uzbek"}, ["uzs"] = {"Southern Uzbek"}, ["vaa"] = {"Vaagri Booli"}, ["vae"] = {"Vale"}, ["vaf"] = {"Vafsi"}, ["vag"] = {"Vagla"}, ["vah"] = {"Varhadi-Nagpuri"}, ["vai"] = {"Vai"}, ["vaj"] = {"Sekele", "Northwestern ǃKung", "Vasekele"}, ["val"] = {"Vehes"}, ["vam"] = {"Vanimo"}, ["van"] = {"Valman"}, ["vao"] = {"Vao"}, ["vap"] = {"Vaiphei"}, ["var"] = {"Huarijio"}, ["vas"] = {"Vasavi"}, ["vau"] = {"Vanuma"}, ["vav"] = {"Varli"}, ["vay"] = {"Wayu"}, ["vbb"] = {"Southeast Babar"}, ["vbk"] = {"Southwestern Bontok"}, ["vec"] = {"Venetian"}, ["ved"] = {"Veddah"}, ["vel"] = {"Veluws"}, ["vem"] = {"Vemgo-Mabas"}, ["veo"] = {"Ventureño"}, ["vep"] = {"Veps"}, ["ver"] = {"Mom Jango"}, ["vgr"] = {"Vaghri"}, ["vgt"] = {"Vlaamse Gebarentaal", "Flemish Sign Language"}, ["vic"] = {"Virgin Islands Creole English"}, ["vid"] = {"Vidunda"}, ["vif"] = {"Vili"}, ["vig"] = {"Viemo"}, ["vil"] = {"Vilela"}, ["vin"] = {"Vinza"}, ["vis"] = {"Vishavan"}, ["vit"] = {"Viti"}, ["viv"] = {"Iduna"}, ["vjk"] = {"Bajjika"}, ["vka"] = {"Kariyarra"}, ["vkj"] = {"Kujarge"}, ["vkk"] = {"Kaur"}, ["vkl"] = {"Kulisusu"}, ["vkm"] = {"Kamakan"}, ["vkn"] = {"Koro Nulu"}, ["vko"] = {"Kodeoha"}, ["vkp"] = {"Korlai Creole Portuguese"}, ["vkt"] = {"Tenggarong Kutai Malay"}, ["vku"] = {"Kurrama"}, ["vkz"] = {"Koro Zuba"}, ["vlp"] = {"Valpei"}, ["vls"] = {"Vlaams"}, ["vma"] = {"Martuyhunira"}, ["vmb"] = {"Barbaram"}, ["vmc"] = {"Juxtlahuaca Mixtec"}, ["vmd"] = {"Mudu Koraga"}, ["vme"] = {"East Masela"}, ["vmf"] = {"Mainfränkisch"}, ["vmg"] = {"Lungalunga"}, ["vmh"] = {"Maraghei"}, ["vmi"] = {"Miwa"}, ["vmj"] = {"Ixtayutla Mixtec"}, ["vmk"] = {"Makhuwa-Shirima"}, ["vml"] = {"Malgana"}, ["vmm"] = {"Mitlatongo Mixtec"}, ["vmp"] = {"Soyaltepec Mazatec"}, ["vmq"] = {"Soyaltepec Mixtec"}, ["vmr"] = {"Marenje"}, ["vms"] = {"Moksela"}, ["vmu"] = {"Muluridyi"}, ["vmv"] = {"Valley Maidu"}, ["vmw"] = {"Makhuwa"}, ["vmx"] = {"Tamazola Mixtec"}, ["vmy"] = {"Ayautla Mazatec"}, ["vmz"] = {"Mazatlán Mazatec"}, ["vnk"] = {"Vano", "Lovono"}, ["vnm"] = {"Vinmavis", "Neve'ei"}, ["vnp"] = {"Vunapu"}, ["vor"] = {"Voro"}, ["vot"] = {"Votic"}, ["vra"] = {"Vera'a"}, ["vro"] = {"Võro"}, ["vrs"] = {"Varisi"}, ["vrt"] = {"Burmbar", "Banam Bay"}, ["vsi"] = {"Moldova Sign Language"}, ["vsl"] = {"Venezuelan Sign Language"}, ["vsv"] = {"Valencian Sign Language", "Llengua de signes valenciana"}, ["vto"] = {"Vitou"}, ["vum"] = {"Vumbu"}, ["vun"] = {"Vunjo"}, ["vut"] = {"Vute"}, ["vwa"] = {"Awa (China)"}, ["waa"] = {"Walla Walla"}, ["wab"] = {"Wab"}, ["wac"] = {"Wasco-Wishram"}, ["wad"] = {"Wamesa", "Wondama"}, ["wae"] = {"Walser"}, ["waf"] = {"Wakoná"}, ["wag"] = {"Wa'ema"}, ["wah"] = {"Watubela"}, ["wai"] = {"Wares"}, ["waj"] = {"Waffa"}, ["wak"] = {"Wakashan languages"}, ["wal"] = {"Wolaytta", "Wolaitta"}, ["wam"] = {"Wampanoag"}, ["wan"] = {"Wan"}, ["wao"] = {"Wappo"}, ["wap"] = {"Wapishana"}, ["waq"] = {"Wagiman"}, ["war"] = {"Waray (Philippines)"}, ["was"] = {"Washo"}, ["wat"] = {"Kaninuwa"}, ["wau"] = {"Waurá"}, ["wav"] = {"Waka"}, ["waw"] = {"Waiwai"}, ["wax"] = {"Watam", "Marangis"}, ["way"] = {"Wayana"}, ["waz"] = {"Wampur"}, ["wba"] = {"Warao"}, ["wbb"] = {"Wabo"}, ["wbe"] = {"Waritai"}, ["wbf"] = {"Wara"}, ["wbh"] = {"Wanda"}, ["wbi"] = {"Vwanji"}, ["wbj"] = {"Alagwa"}, ["wbk"] = {"Waigali"}, ["wbl"] = {"Wakhi"}, ["wbm"] = {"Wa"}, ["wbp"] = {"Warlpiri"}, ["wbq"] = {"Waddar"}, ["wbr"] = {"Wagdi"}, ["wbs"] = {"West Bengal Sign Language"}, ["wbt"] = {"Warnman"}, ["wbv"] = {"Wajarri"}, ["wbw"] = {"Woi"}, ["wca"] = {"Yanomámi"}, ["wci"] = {"Waci Gbe"}, ["wdd"] = {"Wandji"}, ["wdg"] = {"Wadaginam"}, ["wdj"] = {"Wadjiginy"}, ["wdk"] = {"Wadikali"}, ["wdt"] = {"Wendat"}, ["wdu"] = {"Wadjigu"}, ["wdy"] = {"Wadjabangayi"}, ["wea"] = {"Wewaw"}, ["wec"] = {"Wè Western"}, ["wed"] = {"Wedau"}, ["weg"] = {"Wergaia"}, ["weh"] = {"Weh"}, ["wei"] = {"Kiunum"}, ["wem"] = {"Weme Gbe"}, ["wen"] = {"Sorbian languages"}, ["weo"] = {"Wemale"}, ["wep"] = {"Westphalien"}, ["wer"] = {"Weri"}, ["wes"] = {"Cameroon Pidgin"}, ["wet"] = {"Perai"}, ["weu"] = {"Rawngtu Chin"}, ["wew"] = {"Wejewa"}, ["wfg"] = {"Yafi", "Zorop"}, ["wga"] = {"Wagaya"}, ["wgb"] = {"Wagawaga"}, ["wgg"] = {"Wangkangurru", "Wangganguru"}, ["wgi"] = {"Wahgi"}, ["wgo"] = {"Waigeo"}, ["wgu"] = {"Wirangu"}, ["wgy"] = {"Warrgamay"}, ["wha"] = {"Sou Upaa", "Manusela"}, ["whg"] = {"North Wahgi"}, ["whk"] = {"Wahau Kenyah"}, ["whu"] = {"Wahau Kayan"}, ["wib"] = {"Southern Toussian"}, ["wic"] = {"Wichita"}, ["wie"] = {"Wik-Epa"}, ["wif"] = {"Wik-Keyangan"}, ["wig"] = {"Wik Ngathan"}, ["wih"] = {"Wik-Me'anha"}, ["wii"] = {"Minidien"}, ["wij"] = {"Wik-Iiyanh"}, ["wik"] = {"Wikalkan"}, ["wil"] = {"Wilawila"}, ["wim"] = {"Wik-Mungkan"}, ["win"] = {"Ho-Chunk"}, ["wir"] = {"Wiraféd"}, ["wiu"] = {"Wiru"}, ["wiv"] = {"Vitu"}, ["wiy"] = {"Wiyot"}, ["wja"] = {"Waja"}, ["wji"] = {"Warji"}, ["wka"] = {"Kw'adza"}, ["wkb"] = {"Kumbaran"}, ["wkd"] = {"Wakde", "Mo"}, ["wkl"] = {"Kalanadi"}, ["wkr"] = {"Keerray-Woorroong"}, ["wku"] = {"Kunduvadi"}, ["wkw"] = {"Wakawaka"}, ["wky"] = {"Wangkayutyuru"}, ["wla"] = {"Walio"}, ["wlc"] = {"Mwali Comorian"}, ["wle"] = {"Wolane"}, ["wlg"] = {"Kunbarlang"}, ["wlh"] = {"Welaun"}, ["wli"] = {"Waioli"}, ["wlk"] = {"Wailaki"}, ["wll"] = {"Wali (Sudan)"}, ["wlm"] = {"Middle Welsh"}, ["wlo"] = {"Wolio"}, ["wlr"] = {"Wailapa"}, ["wls"] = {"Wallisian"}, ["wlu"] = {"Wuliwuli"}, ["wlv"] = {"Wichí Lhamtés Vejoz"}, ["wlw"] = {"Walak"}, ["wlx"] = {"Wali (Ghana)"}, ["wly"] = {"Waling"}, ["wma"] = {"Mawa (Nigeria)"}, ["wmb"] = {"Wambaya"}, ["wmc"] = {"Wamas"}, ["wmd"] = {"Mamaindé"}, ["wme"] = {"Wambule"}, ["wmg"] = {"Western Minyag"}, ["wmh"] = {"Waima'a"}, ["wmi"] = {"Wamin"}, ["wmm"] = {"Maiwa (Indonesia)"}, ["wmn"] = {"Waamwang"}, ["wmo"] = {"Wom (Papua New Guinea)"}, ["wms"] = {"Wambon"}, ["wmt"] = {"Walmajarri"}, ["wmw"] = {"Mwani"}, ["wmx"] = {"Womo"}, ["wnb"] = {"Mokati"}, ["wnc"] = {"Wantoat"}, ["wnd"] = {"Wandarang"}, ["wne"] = {"Waneci"}, ["wng"] = {"Wanggom"}, ["wni"] = {"Ndzwani Comorian"}, ["wnk"] = {"Wanukaka"}, ["wnm"] = {"Wanggamala"}, ["wnn"] = {"Wunumara"}, ["wno"] = {"Wano"}, ["wnp"] = {"Wanap"}, ["wnu"] = {"Usan"}, ["wnw"] = {"Wintu"}, ["wny"] = {"Wanyi", "Waanyi"}, ["woa"] = {"Kuwema", "Tyaraity"}, ["wob"] = {"Wè Northern"}, ["woc"] = {"Wogeo"}, ["wod"] = {"Wolani"}, ["woe"] = {"Woleaian"}, ["wof"] = {"Gambian Wolof"}, ["wog"] = {"Wogamusin"}, ["woi"] = {"Kamang"}, ["wok"] = {"Longto"}, ["wom"] = {"Wom (Nigeria)"}, ["won"] = {"Wongo"}, ["woo"] = {"Manombai"}, ["wor"] = {"Woria"}, ["wos"] = {"Hanga Hundi"}, ["wow"] = {"Wawonii"}, ["woy"] = {"Weyto"}, ["wpc"] = {"Maco"}, ["wrb"] = {"Waluwarra", "Warluwara"}, ["wrg"] = {"Warungu", "Gudjal"}, ["wrh"] = {"Wiradjuri"}, ["wri"] = {"Wariyangga"}, ["wrk"] = {"Garrwa"}, ["wrl"] = {"Warlmanpa"}, ["wrm"] = {"Warumungu"}, ["wrn"] = {"Warnang"}, ["wro"] = {"Worrorra"}, ["wrp"] = {"Waropen"}, ["wrr"] = {"Wardaman"}, ["wrs"] = {"Waris"}, ["wru"] = {"Waru"}, ["wrv"] = {"Waruna"}, ["wrw"] = {"Gugu Warra"}, ["wrx"] = {"Wae Rana"}, ["wry"] = {"Merwari"}, ["wrz"] = {"Waray (Australia)"}, ["wsa"] = {"Warembori"}, ["wsg"] = {"Adilabad Gondi"}, ["wsi"] = {"Wusi"}, ["wsk"] = {"Waskia"}, ["wsr"] = {"Owenia"}, ["wss"] = {"Wasa"}, ["wsu"] = {"Wasu"}, ["wsv"] = {"Wotapuri-Katarqalai"}, ["wtb"] = {"Matambwe"}, ["wtf"] = {"Watiwa"}, ["wth"] = {"Wathawurrung"}, ["wti"] = {"Berta"}, ["wtk"] = {"Watakataui"}, ["wtm"] = {"Mewati"}, ["wtw"] = {"Wotu"}, ["wua"] = {"Wikngenchera"}, ["wub"] = {"Wunambal"}, ["wud"] = {"Wudu"}, ["wuh"] = {"Wutunhua"}, ["wul"] = {"Silimo"}, ["wum"] = {"Wumbvu"}, ["wun"] = {"Bungu"}, ["wur"] = {"Wurrugu"}, ["wut"] = {"Wutung"}, ["wuu"] = {"Wu Chinese"}, ["wuv"] = {"Wuvulu-Aua"}, ["wux"] = {"Wulna"}, ["wuy"] = {"Wauyai"}, ["wwa"] = {"Waama"}, ["wwb"] = {"Wakabunga"}, ["wwo"] = {"Wetamut", "Dorig"}, ["wwr"] = {"Warrwa"}, ["www"] = {"Wawa"}, ["wxa"] = {"Waxianghua"}, ["wxw"] = {"Wardandi"}, ["wyb"] = {"Wangaaybuwan-Ngiyambaa"}, ["wyi"] = {"Woiwurrung"}, ["wym"] = {"Wymysorys"}, ["wyn"] = {"Wyandot"}, ["wyr"] = {"Wayoró"}, ["wyy"] = {"Western Fijian"}, ["xaa"] = {"Andalusian Arabic"}, ["xab"] = {"Sambe"}, ["xac"] = {"Kachari"}, ["xad"] = {"Adai"}, ["xae"] = {"Aequian"}, ["xag"] = {"Aghwan"}, ["xai"] = {"Kaimbé"}, ["xaj"] = {"Ararandewára"}, ["xak"] = {"Máku"}, ["xal"] = {"Kalmyk", "Oirat"}, ["xam"] = {"ǀXam"}, ["xan"] = {"Xamtanga"}, ["xao"] = {"Khao"}, ["xap"] = {"Apalachee"}, ["xaq"] = {"Aquitanian"}, ["xar"] = {"Karami"}, ["xas"] = {"Kamas"}, ["xat"] = {"Katawixi"}, ["xau"] = {"Kauwera"}, ["xav"] = {"Xavánte"}, ["xaw"] = {"Kawaiisu"}, ["xay"] = {"Kayan Mahakam"}, ["xbb"] = {"Lower Burdekin"}, ["xbc"] = {"Bactrian"}, ["xbd"] = {"Bindal"}, ["xbe"] = {"Bigambal"}, ["xbg"] = {"Bunganditj"}, ["xbi"] = {"Kombio"}, ["xbj"] = {"Birrpayi"}, ["xbm"] = {"Middle Breton"}, ["xbn"] = {"Kenaboi"}, ["xbo"] = {"Bolgarian"}, ["xbp"] = {"Bibbulman"}, ["xbr"] = {"Kambera"}, ["xbw"] = {"Kambiwá"}, ["xby"] = {"Batjala", "Batyala"}, ["xcb"] = {"Cumbric"}, ["xcc"] = {"Camunic"}, ["xce"] = {"Celtiberian"}, ["xcg"] = {"Cisalpine Gaulish"}, ["xch"] = {"Chemakum", "Chimakum"}, ["xcl"] = {"Classical Armenian"}, ["xcm"] = {"Comecrudo"}, ["xcn"] = {"Cotoname"}, ["xco"] = {"Chorasmian"}, ["xcr"] = {"Carian"}, ["xct"] = {"Classical Tibetan"}, ["xcu"] = {"Curonian"}, ["xcv"] = {"Chuvantsy"}, ["xcw"] = {"Coahuilteco"}, ["xcy"] = {"Cayuse"}, ["xda"] = {"Darkinyung"}, ["xdc"] = {"Dacian"}, ["xdk"] = {"Dharuk"}, ["xdm"] = {"Edomite"}, ["xdo"] = {"Kwandu"}, ["xdq"] = {"Kaitag"}, ["xdy"] = {"Malayic Dayak"}, ["xeb"] = {"Eblan"}, ["xed"] = {"Hdi"}, ["xeg"] = {"ǁXegwi"}, ["xel"] = {"Kelo"}, ["xem"] = {"Kembayan"}, ["xep"] = {"Epi-Olmec"}, ["xer"] = {"Xerénte"}, ["xes"] = {"Kesawai"}, ["xet"] = {"Xetá"}, ["xeu"] = {"Keoru-Ahia"}, ["xfa"] = {"Faliscan"}, ["xga"] = {"Galatian"}, ["xgb"] = {"Gbin"}, ["xgd"] = {"Gudang"}, ["xgf"] = {"Gabrielino-Fernandeño"}, ["xgg"] = {"Goreng"}, ["xgi"] = {"Garingbal"}, ["xgl"] = {"Galindan"}, ["xgm"] = {"Dharumbal", "Guwinmal"}, ["xgn"] = {"Mongolian languages"}, ["xgr"] = {"Garza"}, ["xgu"] = {"Unggumi"}, ["xgw"] = {"Guwa"}, ["xha"] = {"Harami"}, ["xhc"] = {"Hunnic"}, ["xhd"] = {"Hadrami"}, ["xhe"] = {"Khetrani"}, ["xhm"] = {"Middle Khmer (1400 to 1850 CE)"}, ["xhr"] = {"Hernican"}, ["xht"] = {"Hattic"}, ["xhu"] = {"Hurrian"}, ["xhv"] = {"Khua"}, ["xib"] = {"Iberian"}, ["xii"] = {"Xiri"}, ["xil"] = {"Illyrian"}, ["xin"] = {"Xinca"}, ["xir"] = {"Xiriâna"}, ["xis"] = {"Kisan"}, ["xiv"] = {"Indus Valley Language"}, ["xiy"] = {"Xipaya"}, ["xjb"] = {"Minjungbal"}, ["xjt"] = {"Jaitmatang"}, ["xka"] = {"Kalkoti"}, ["xkb"] = {"Northern Nago"}, ["xkc"] = {"Kho'ini"}, ["xkd"] = {"Mendalam Kayan"}, ["xke"] = {"Kereho"}, ["xkf"] = {"Khengkha"}, ["xkg"] = {"Kagoro"}, ["xki"] = {"Kenyan Sign Language"}, ["xkj"] = {"Kajali"}, ["xkk"] = {"Kachok", "Kaco'"}, ["xkl"] = {"Mainstream Kenyah"}, ["xkn"] = {"Kayan River Kayan"}, ["xko"] = {"Kiorr"}, ["xkp"] = {"Kabatei"}, ["xkq"] = {"Koroni"}, ["xkr"] = {"Xakriabá"}, ["xks"] = {"Kumbewaha"}, ["xkt"] = {"Kantosi"}, ["xku"] = {"Kaamba"}, ["xkv"] = {"Kgalagadi"}, ["xkw"] = {"Kembra"}, ["xkx"] = {"Karore"}, ["xky"] = {"Uma' Lasan"}, ["xkz"] = {"Kurtokha"}, ["xla"] = {"Kamula"}, ["xlb"] = {"Loup B"}, ["xlc"] = {"Lycian"}, ["xld"] = {"Lydian"}, ["xle"] = {"Lemnian"}, ["xlg"] = {"Ligurian (Ancient)"}, ["xli"] = {"Liburnian"}, ["xln"] = {"Alanic"}, ["xlo"] = {"Loup A"}, ["xlp"] = {"Lepontic"}, ["xls"] = {"Lusitanian"}, ["xlu"] = {"Cuneiform Luwian"}, ["xly"] = {"Elymian"}, ["xma"] = {"Mushungulu"}, ["xmb"] = {"Mbonga"}, ["xmc"] = {"Makhuwa-Marrevone"}, ["xmd"] = {"Mbudum"}, ["xme"] = {"Median"}, ["xmf"] = {"Mingrelian"}, ["xmg"] = {"Mengaka"}, ["xmh"] = {"Kugu-Muminh"}, ["xmj"] = {"Majera"}, ["xmk"] = {"Ancient Macedonian"}, ["xml"] = {"Malaysian Sign Language"}, ["xmm"] = {"Manado Malay"}, ["xmn"] = {"Manichaean Middle Persian"}, ["xmo"] = {"Morerebi"}, ["xmp"] = {"Kuku-Mu'inh"}, ["xmq"] = {"Kuku-Mangk"}, ["xmr"] = {"Meroitic"}, ["xms"] = {"Moroccan Sign Language"}, ["xmt"] = {"Matbat"}, ["xmu"] = {"Kamu"}, ["xmv"] = {"Antankarana Malagasy", "Tankarana Malagasy"}, ["xmw"] = {"Tsimihety Malagasy"}, ["xmx"] = {"Salawati", "Maden"}, ["xmy"] = {"Mayaguduna"}, ["xmz"] = {"Mori Bawah"}, ["xna"] = {"Ancient North Arabian"}, ["xnb"] = {"Kanakanabu"}, ["xnd"] = {"Na-Dene languages"}, ["xng"] = {"Middle Mongolian"}, ["xnh"] = {"Kuanhua"}, ["xni"] = {"Ngarigu"}, ["xnj"] = {"Ngoni (Tanzania)"}, ["xnk"] = {"Nganakarti"}, ["xnm"] = {"Ngumbarl"}, ["xnn"] = {"Northern Kankanay"}, ["xno"] = {"Anglo-Norman"}, ["xnq"] = {"Ngoni (Mozambique)"}, ["xnr"] = {"Kangri"}, ["xns"] = {"Kanashi"}, ["xnt"] = {"Narragansett"}, ["xnu"] = {"Nukunul"}, ["xny"] = {"Nyiyaparli"}, ["xnz"] = {"Kenzi", "Mattoki"}, ["xoc"] = {"O'chi'chi'"}, ["xod"] = {"Kokoda"}, ["xog"] = {"Soga"}, ["xoi"] = {"Kominimung"}, ["xok"] = {"Xokleng"}, ["xom"] = {"Komo (Sudan)"}, ["xon"] = {"Konkomba"}, ["xoo"] = {"Xukurú"}, ["xop"] = {"Kopar"}, ["xor"] = {"Korubo"}, ["xow"] = {"Kowaki"}, ["xpa"] = {"Pirriya"}, ["xpb"] = {"Northeastern Tasmanian", "Pyemmairrener"}, ["xpc"] = {"Pecheneg"}, ["xpd"] = {"Oyster Bay Tasmanian"}, ["xpe"] = {"Liberia Kpelle"}, ["xpf"] = {"Southeast Tasmanian", "Nuenonne"}, ["xpg"] = {"Phrygian"}, ["xph"] = {"North Midlands Tasmanian", "Tyerrenoterpanner"}, ["xpi"] = {"Pictish"}, ["xpj"] = {"Mpalitjanh"}, ["xpk"] = {"Kulina Pano"}, ["xpl"] = {"Port Sorell Tasmanian"}, ["xpm"] = {"Pumpokol"}, ["xpn"] = {"Kapinawá"}, ["xpo"] = {"Pochutec"}, ["xpp"] = {"Puyo-Paekche"}, ["xpq"] = {"Mohegan-Pequot"}, ["xpr"] = {"Parthian"}, ["xps"] = {"Pisidian"}, ["xpt"] = {"Punthamara"}, ["xpu"] = {"Punic"}, ["xpv"] = {"Northern Tasmanian", "Tommeginne"}, ["xpw"] = {"Northwestern Tasmanian", "Peerapper"}, ["xpx"] = {"Southwestern Tasmanian", "Toogee"}, ["xpy"] = {"Puyo"}, ["xpz"] = {"Bruny Island Tasmanian"}, ["xqa"] = {"Karakhanid"}, ["xqt"] = {"Qatabanian"}, ["xra"] = {"Krahô"}, ["xrb"] = {"Eastern Karaboro"}, ["xrd"] = {"Gundungurra"}, ["xre"] = {"Kreye"}, ["xrg"] = {"Minang"}, ["xri"] = {"Krikati-Timbira"}, ["xrm"] = {"Armazic"}, ["xrn"] = {"Arin"}, ["xrr"] = {"Raetic"}, ["xrt"] = {"Aranama-Tamique"}, ["xru"] = {"Marriammu"}, ["xrw"] = {"Karawa"}, ["xsa"] = {"Sabaean"}, ["xsb"] = {"Sambal"}, ["xsc"] = {"Scythian"}, ["xsd"] = {"Sidetic"}, ["xse"] = {"Sempan"}, ["xsh"] = {"Shamang"}, ["xsi"] = {"Sio"}, ["xsj"] = {"Subi"}, ["xsl"] = {"South Slavey"}, ["xsm"] = {"Kasem"}, ["xsn"] = {"Sanga (Nigeria)"}, ["xso"] = {"Solano"}, ["xsp"] = {"Silopi"}, ["xsq"] = {"Makhuwa-Saka"}, ["xsr"] = {"Sherpa"}, ["xsu"] = {"Sanumá"}, ["xsv"] = {"Sudovian"}, ["xsy"] = {"Saisiyat"}, ["xta"] = {"Alcozauca Mixtec"}, ["xtb"] = {"Chazumba Mixtec"}, ["xtc"] = {"Katcha-Kadugli-Miri"}, ["xtd"] = {"Diuxi-Tilantongo Mixtec"}, ["xte"] = {"Ketengban"}, ["xtg"] = {"Transalpine Gaulish"}, ["xth"] = {"Yitha Yitha"}, ["xti"] = {"Sinicahua Mixtec"}, ["xtj"] = {"San Juan Teita Mixtec"}, ["xtl"] = {"Tijaltepec Mixtec"}, ["xtm"] = {"Magdalena Peñasco Mixtec"}, ["xtn"] = {"Northern Tlaxiaco Mixtec"}, ["xto"] = {"Tokharian A"}, ["xtp"] = {"San Miguel Piedras Mixtec"}, ["xtq"] = {"Tumshuqese"}, ["xtr"] = {"Early Tripuri"}, ["xts"] = {"Sindihui Mixtec"}, ["xtt"] = {"Tacahua Mixtec"}, ["xtu"] = {"Cuyamecalco Mixtec"}, ["xtv"] = {"Thawa"}, ["xtw"] = {"Tawandê"}, ["xty"] = {"Yoloxochitl Mixtec"}, ["xua"] = {"Alu Kurumba"}, ["xub"] = {"Betta Kurumba"}, ["xud"] = {"Umiida"}, ["xug"] = {"Kunigami"}, ["xuj"] = {"Jennu Kurumba"}, ["xul"] = {"Ngunawal", "Nunukul"}, ["xum"] = {"Umbrian"}, ["xun"] = {"Unggaranggu"}, ["xuo"] = {"Kuo"}, ["xup"] = {"Upper Umpqua"}, ["xur"] = {"Urartian"}, ["xut"] = {"Kuthant"}, ["xuu"] = {"Kxoe", "Khwedam"}, ["xve"] = {"Venetic"}, ["xvi"] = {"Kamviri"}, ["xvn"] = {"Vandalic"}, ["xvo"] = {"Volscian"}, ["xvs"] = {"Vestinian"}, ["xwa"] = {"Kwaza"}, ["xwc"] = {"Woccon"}, ["xwd"] = {"Wadi Wadi"}, ["xwe"] = {"Xwela Gbe"}, ["xwg"] = {"Kwegu"}, ["xwj"] = {"Wajuk"}, ["xwk"] = {"Wangkumara"}, ["xwl"] = {"Western Xwla Gbe"}, ["xwo"] = {"Written Oirat"}, ["xwr"] = {"Kwerba Mamberamo"}, ["xwt"] = {"Wotjobaluk"}, ["xww"] = {"Wemba Wemba"}, ["xxb"] = {"Boro (Ghana)"}, ["xxk"] = {"Ke'o"}, ["xxm"] = {"Minkin"}, ["xxr"] = {"Koropó"}, ["xxt"] = {"Tambora"}, ["xya"] = {"Yaygir"}, ["xyb"] = {"Yandjibara"}, ["xyj"] = {"Mayi-Yapi"}, ["xyk"] = {"Mayi-Kulan"}, ["xyl"] = {"Yalakalore"}, ["xyt"] = {"Mayi-Thakurti"}, ["xyy"] = {"Yorta Yorta"}, ["xzh"] = {"Zhang-Zhung"}, ["xzm"] = {"Zemgalian"}, ["xzp"] = {"Ancient Zapotec"}, ["yaa"] = {"Yaminahua"}, ["yab"] = {"Yuhup"}, ["yac"] = {"Pass Valley Yali"}, ["yad"] = {"Yagua"}, ["yae"] = {"Pumé"}, ["yaf"] = {"Yaka (Democratic Republic of Congo)"}, ["yag"] = {"Yámana"}, ["yah"] = {"Yazgulyam"}, ["yai"] = {"Yagnobi"}, ["yaj"] = {"Banda-Yangere"}, ["yak"] = {"Yakama"}, ["yal"] = {"Yalunka"}, ["yam"] = {"Yamba"}, ["yan"] = {"Mayangna"}, ["yao"] = {"Yao"}, ["yap"] = {"Yapese"}, ["yaq"] = {"Yaqui"}, ["yar"] = {"Yabarana"}, ["yas"] = {"Nugunu (Cameroon)"}, ["yat"] = {"Yambeta"}, ["yau"] = {"Yuwana"}, ["yav"] = {"Yangben"}, ["yaw"] = {"Yawalapití"}, ["yax"] = {"Yauma"}, ["yay"] = {"Agwagwune"}, ["yaz"] = {"Lokaa"}, ["yba"] = {"Yala"}, ["ybb"] = {"Yemba"}, ["ybe"] = {"West Yugur"}, ["ybh"] = {"Yakha"}, ["ybi"] = {"Yamphu"}, ["ybj"] = {"Hasha"}, ["ybk"] = {"Bokha"}, ["ybl"] = {"Yukuben"}, ["ybm"] = {"Yaben"}, ["ybn"] = {"Yabaâna"}, ["ybo"] = {"Yabong"}, ["ybx"] = {"Yawiyo"}, ["yby"] = {"Yaweyuha"}, ["ych"] = {"Chesu"}, ["ycl"] = {"Lolopo"}, ["ycn"] = {"Yucuna"}, ["ycp"] = {"Chepya"}, ["ycr"] = {"Yilan Creole"}, ["yda"] = {"Yanda"}, ["ydd"] = {"Eastern Yiddish"}, ["yde"] = {"Yangum Dey"}, ["ydg"] = {"Yidgha"}, ["ydk"] = {"Yoidik"}, ["yea"] = {"Ravula"}, ["yec"] = {"Yeniche"}, ["yee"] = {"Yimas"}, ["yei"] = {"Yeni"}, ["yej"] = {"Yevanic"}, ["yel"] = {"Yela"}, ["yer"] = {"Tarok"}, ["yes"] = {"Nyankpa"}, ["yet"] = {"Yetfa"}, ["yeu"] = {"Yerukula"}, ["yev"] = {"Yapunda"}, ["yey"] = {"Yeyi"}, ["yga"] = {"Malyangapa"}, ["ygi"] = {"Yiningayi"}, ["ygl"] = {"Yangum Gel"}, ["ygm"] = {"Yagomi"}, ["ygp"] = {"Gepo"}, ["ygr"] = {"Yagaria"}, ["ygs"] = {"Yolŋu Sign Language"}, ["ygu"] = {"Yugul"}, ["ygw"] = {"Yagwoia"}, ["yha"] = {"Baha Buyang"}, ["yhd"] = {"Judeo-Iraqi Arabic"}, ["yhl"] = {"Hlepho Phowa"}, ["yhs"] = {"Yan-nhaŋu Sign Language"}, ["yia"] = {"Yinggarda"}, ["yif"] = {"Ache"}, ["yig"] = {"Wusa Nasu"}, ["yih"] = {"Western Yiddish"}, ["yii"] = {"Yidiny"}, ["yij"] = {"Yindjibarndi"}, ["yik"] = {"Dongshanba Lalo"}, ["yil"] = {"Yindjilandji"}, ["yim"] = {"Yimchungru Naga"}, ["yin"] = {"Riang Lai", "Yinchia"}, ["yip"] = {"Pholo"}, ["yiq"] = {"Miqie"}, ["yir"] = {"North Awyu"}, ["yis"] = {"Yis"}, ["yit"] = {"Eastern Lalu"}, ["yiu"] = {"Awu"}, ["yiv"] = {"Northern Nisu"}, ["yix"] = {"Axi Yi"}, ["yiz"] = {"Azhe"}, ["yka"] = {"Yakan"}, ["ykg"] = {"Northern Yukaghir"}, ["ykh"] = {"Khamnigan Mongol"}, ["yki"] = {"Yoke"}, ["ykk"] = {"Yakaikeke"}, ["ykl"] = {"Khlula"}, ["ykm"] = {"Kap"}, ["ykn"] = {"Kua-nsi"}, ["yko"] = {"Yasa"}, ["ykr"] = {"Yekora"}, ["ykt"] = {"Kathu"}, ["yku"] = {"Kuamasi"}, ["yky"] = {"Yakoma"}, ["yla"] = {"Yaul"}, ["ylb"] = {"Yaleba"}, ["yle"] = {"Yele"}, ["ylg"] = {"Yelogu"}, ["yli"] = {"Angguruk Yali"}, ["yll"] = {"Yil"}, ["ylm"] = {"Limi"}, ["yln"] = {"Langnian Buyang"}, ["ylo"] = {"Naluo Yi"}, ["ylr"] = {"Yalarnnga"}, ["ylu"] = {"Aribwaung"}, ["yly"] = {"Nyâlayu", "Nyelâyu"}, ["ymb"] = {"Yambes"}, ["ymc"] = {"Southern Muji"}, ["ymd"] = {"Muda"}, ["yme"] = {"Yameo"}, ["ymg"] = {"Yamongeri"}, ["ymh"] = {"Mili"}, ["ymi"] = {"Moji"}, ["ymk"] = {"Makwe"}, ["yml"] = {"Iamalele"}, ["ymm"] = {"Maay"}, ["ymn"] = {"Yamna", "Sunum"}, ["ymo"] = {"Yangum Mon"}, ["ymp"] = {"Yamap"}, ["ymq"] = {"Qila Muji"}, ["ymr"] = {"Malasar"}, ["yms"] = {"Mysian"}, ["ymx"] = {"Northern Muji"}, ["ymz"] = {"Muzi"}, ["yna"] = {"Aluo"}, ["ynd"] = {"Yandruwandha"}, ["yne"] = {"Lang'e"}, ["yng"] = {"Yango"}, ["ynk"] = {"Naukan Yupik"}, ["ynl"] = {"Yangulam"}, ["ynn"] = {"Yana"}, ["yno"] = {"Yong"}, ["ynq"] = {"Yendang"}, ["yns"] = {"Yansi"}, ["ynu"] = {"Yahuna"}, ["yob"] = {"Yoba"}, ["yog"] = {"Yogad"}, ["yoi"] = {"Yonaguni"}, ["yok"] = {"Yokuts"}, ["yol"] = {"Yola"}, ["yom"] = {"Yombe"}, ["yon"] = {"Yongkom"}, ["yot"] = {"Yotti"}, ["yox"] = {"Yoron"}, ["yoy"] = {"Yoy"}, ["ypa"] = {"Phala"}, ["ypb"] = {"Labo Phowa"}, ["ypg"] = {"Phola"}, ["yph"] = {"Phupha"}, ["ypk"] = {"Yupik languages"}, ["ypm"] = {"Phuma"}, ["ypn"] = {"Ani Phowa"}, ["ypo"] = {"Alo Phola"}, ["ypp"] = {"Phupa"}, ["ypz"] = {"Phuza"}, ["yra"] = {"Yerakai"}, ["yrb"] = {"Yareba"}, ["yre"] = {"Yaouré"}, ["yrk"] = {"Nenets"}, ["yrl"] = {"Nhengatu"}, ["yrm"] = {"Yirrk-Mel"}, ["yrn"] = {"Yerong"}, ["yro"] = {"Yaroamë"}, ["yrs"] = {"Yarsun"}, ["yrw"] = {"Yarawata"}, ["yry"] = {"Yarluyandi"}, ["ysc"] = {"Yassic"}, ["ysd"] = {"Samatao"}, ["ysg"] = {"Sonaga"}, ["ysl"] = {"Yugoslavian Sign Language"}, ["ysm"] = {"Myanmar Sign Language"}, ["ysn"] = {"Sani"}, ["yso"] = {"Nisi (China)"}, ["ysp"] = {"Southern Lolopo"}, ["ysr"] = {"Sirenik Yupik"}, ["yss"] = {"Yessan-Mayo"}, ["ysy"] = {"Sanie"}, ["yta"] = {"Talu"}, ["ytl"] = {"Tanglang"}, ["ytp"] = {"Thopho"}, ["ytw"] = {"Yout Wam"}, ["yty"] = {"Yatay"}, ["yua"] = {"Yucateco", "Yucatec Maya"}, ["yub"] = {"Yugambal"}, ["yuc"] = {"Yuchi"}, ["yud"] = {"Judeo-Tripolitanian Arabic"}, ["yue"] = {"Yue Chinese", "Cantonese"}, ["yuf"] = {"Havasupai-Walapai-Yavapai"}, ["yug"] = {"Yug"}, ["yui"] = {"Yurutí"}, ["yuj"] = {"Karkar-Yuri"}, ["yuk"] = {"Yuki"}, ["yul"] = {"Yulu"}, ["yum"] = {"Quechan"}, ["yun"] = {"Bena (Nigeria)"}, ["yup"] = {"Yukpa"}, ["yuq"] = {"Yuqui"}, ["yur"] = {"Yurok"}, ["yut"] = {"Yopno"}, ["yuw"] = {"Yau (Morobe Province)"}, ["yux"] = {"Southern Yukaghir"}, ["yuy"] = {"East Yugur"}, ["yuz"] = {"Yuracare"}, ["yva"] = {"Yawa"}, ["yvt"] = {"Yavitero"}, ["ywa"] = {"Kalou"}, ["ywg"] = {"Yinhawangka"}, ["ywl"] = {"Western Lalu"}, ["ywn"] = {"Yawanawa"}, ["ywq"] = {"Wuding-Luquan Yi"}, ["ywr"] = {"Yawuru"}, ["ywt"] = {"Xishanba Lalo", "Central Lalo"}, ["ywu"] = {"Wumeng Nasu"}, ["yww"] = {"Yawarawarga"}, ["yxa"] = {"Mayawali"}, ["yxg"] = {"Yagara"}, ["yxl"] = {"Yardliyawarra"}, ["yxm"] = {"Yinwum"}, ["yxu"] = {"Yuyu"}, ["yxy"] = {"Yabula Yabula"}, ["yyr"] = {"Yir Yoront"}, ["yyu"] = {"Yau (Sandaun Province)"}, ["yyz"] = {"Ayizi"}, ["yzg"] = {"E'ma Buyang"}, ["yzk"] = {"Zokhuo"}, ["zaa"] = {"Sierra de Juárez Zapotec"}, ["zab"] = {"Western Tlacolula Valley Zapotec", "San Juan Guelavía Zapotec"}, ["zac"] = {"Ocotlán Zapotec"}, ["zad"] = {"Cajonos Zapotec"}, ["zae"] = {"Yareni Zapotec"}, ["zaf"] = {"Ayoquesco Zapotec"}, ["zag"] = {"Zaghawa"}, ["zah"] = {"Zangwal"}, ["zai"] = {"Isthmus Zapotec"}, ["zaj"] = {"Zaramo"}, ["zak"] = {"Zanaki"}, ["zal"] = {"Zauzou"}, ["zam"] = {"Miahuatlán Zapotec"}, ["zao"] = {"Ozolotepec Zapotec"}, ["zap"] = {"Zapotec"}, ["zaq"] = {"Aloápam Zapotec"}, ["zar"] = {"Rincón Zapotec"}, ["zas"] = {"Santo Domingo Albarradas Zapotec"}, ["zat"] = {"Tabaa Zapotec"}, ["zau"] = {"Zangskari"}, ["zav"] = {"Yatzachi Zapotec"}, ["zaw"] = {"Mitla Zapotec"}, ["zax"] = {"Xadani Zapotec"}, ["zay"] = {"Zayse-Zergulla", "Zaysete"}, ["zaz"] = {"Zari"}, ["zba"] = {"Balaibalan"}, ["zbc"] = {"Central Berawan"}, ["zbe"] = {"East Berawan"}, ["zbl"] = {"Blissymbols", "Bliss", "Blissymbolics"}, ["zbt"] = {"Batui"}, ["zbu"] = {"Bu (Bauchi State)"}, ["zbw"] = {"West Berawan"}, ["zca"] = {"Coatecas Altas Zapotec"}, ["zcd"] = {"Las Delicias Zapotec"}, ["zch"] = {"Central Hongshuihe Zhuang"}, ["zdj"] = {"Ngazidja Comorian"}, ["zea"] = {"Zeeuws"}, ["zeg"] = {"Zenag"}, ["zeh"] = {"Eastern Hongshuihe Zhuang"}, ["zem"] = {"Zeem"}, ["zen"] = {"Zenaga"}, ["zga"] = {"Kinga"}, ["zgb"] = {"Guibei Zhuang"}, ["zgh"] = {"Standard Moroccan Tamazight"}, ["zgm"] = {"Minz Zhuang"}, ["zgn"] = {"Guibian Zhuang"}, ["zgr"] = {"Magori"}, ["zhb"] = {"Zhaba"}, ["zhd"] = {"Dai Zhuang"}, ["zhi"] = {"Zhire"}, ["zhn"] = {"Nong Zhuang"}, ["zhw"] = {"Zhoa"}, ["zhx"] = {"Chinese (family)"}, ["zia"] = {"Zia"}, ["zib"] = {"Zimbabwe Sign Language"}, ["zik"] = {"Zimakani"}, ["zil"] = {"Zialo"}, ["zim"] = {"Mesme"}, ["zin"] = {"Zinza"}, ["ziw"] = {"Zigula"}, ["ziz"] = {"Zizilivakan"}, ["zka"] = {"Kaimbulawa"}, ["zkd"] = {"Kadu"}, ["zkg"] = {"Koguryo"}, ["zkh"] = {"Khorezmian"}, ["zkk"] = {"Karankawa"}, ["zkn"] = {"Kanan"}, ["zko"] = {"Kott"}, ["zkp"] = {"São Paulo Kaingáng"}, ["zkr"] = {"Zakhring"}, ["zkt"] = {"Kitan"}, ["zku"] = {"Kaurna"}, ["zkv"] = {"Krevinian"}, ["zkz"] = {"Khazar"}, ["zla"] = {"Zula"}, ["zle"] = {"East Slavic languages"}, ["zlj"] = {"Liujiang Zhuang"}, ["zlm"] = {"Malay (individual language)"}, ["zln"] = {"Lianshan Zhuang"}, ["zlq"] = {"Liuqian Zhuang"}, ["zls"] = {"South Slavic languages"}, ["zlu"] = {"Zul"}, ["zlw"] = {"West Slavic languages"}, ["zma"] = {"Manda (Australia)"}, ["zmb"] = {"Zimba"}, ["zmc"] = {"Margany"}, ["zmd"] = {"Maridan"}, ["zme"] = {"Mangerr"}, ["zmf"] = {"Mfinu"}, ["zmg"] = {"Marti Ke"}, ["zmh"] = {"Makolkol"}, ["zmi"] = {"Negeri Sembilan Malay"}, ["zmj"] = {"Maridjabin"}, ["zmk"] = {"Mandandanyi"}, ["zml"] = {"Matngala"}, ["zmm"] = {"Marimanindji", "Marramaninyshi"}, ["zmn"] = {"Mbangwe"}, ["zmo"] = {"Molo"}, ["zmp"] = {"Mpuono"}, ["zmq"] = {"Mituku"}, ["zmr"] = {"Maranunggu"}, ["zms"] = {"Mbesa"}, ["zmt"] = {"Maringarr"}, ["zmu"] = {"Muruwari"}, ["zmv"] = {"Mbariman-Gudhinma"}, ["zmw"] = {"Mbo (Democratic Republic of Congo)"}, ["zmx"] = {"Bomitaba"}, ["zmy"] = {"Mariyedi"}, ["zmz"] = {"Mbandja"}, ["zna"] = {"Zan Gula"}, ["znd"] = {"Zande languages"}, ["zne"] = {"Zande (individual language)"}, ["zng"] = {"Mang"}, ["znk"] = {"Manangkari"}, ["zns"] = {"Mangas"}, ["zoc"] = {"Copainalá Zoque"}, ["zoh"] = {"Chimalapa Zoque"}, ["zom"] = {"Zou"}, ["zoo"] = {"Asunción Mixtepec Zapotec"}, ["zoq"] = {"Tabasco Zoque"}, ["zor"] = {"Rayón Zoque"}, ["zos"] = {"Francisco León Zoque"}, ["zpa"] = {"Lachiguiri Zapotec"}, ["zpb"] = {"Yautepec Zapotec"}, ["zpc"] = {"Choapan Zapotec"}, ["zpd"] = {"Southeastern Ixtlán Zapotec"}, ["zpe"] = {"Petapa Zapotec"}, ["zpf"] = {"San Pedro Quiatoni Zapotec"}, ["zpg"] = {"Guevea De Humboldt Zapotec"}, ["zph"] = {"Totomachapan Zapotec"}, ["zpi"] = {"Santa María Quiegolani Zapotec"}, ["zpj"] = {"Quiavicuzas Zapotec"}, ["zpk"] = {"Tlacolulita Zapotec"}, ["zpl"] = {"Lachixío Zapotec"}, ["zpm"] = {"Mixtepec Zapotec"}, ["zpn"] = {"Santa Inés Yatzechi Zapotec"}, ["zpo"] = {"Amatlán Zapotec"}, ["zpp"] = {"El Alto Zapotec"}, ["zpq"] = {"Zoogocho Zapotec"}, ["zpr"] = {"Santiago Xanica Zapotec"}, ["zps"] = {"Coatlán Zapotec"}, ["zpt"] = {"San Vicente Coatlán Zapotec"}, ["zpu"] = {"Yalálag Zapotec"}, ["zpv"] = {"Chichicapan Zapotec"}, ["zpw"] = {"Zaniza Zapotec"}, ["zpx"] = {"San Baltazar Loxicha Zapotec"}, ["zpy"] = {"Mazaltepec Zapotec"}, ["zpz"] = {"Texmelucan Zapotec"}, ["zqe"] = {"Qiubei Zhuang"}, ["zra"] = {"Kara (Korea)"}, ["zrg"] = {"Mirgan"}, ["zrn"] = {"Zerenkel"}, ["zro"] = {"Záparo"}, ["zrp"] = {"Zarphatic"}, ["zrs"] = {"Mairasi"}, ["zsa"] = {"Sarasira"}, ["zsk"] = {"Kaskean"}, ["zsl"] = {"Zambian Sign Language"}, ["zsm"] = {"Standard Malay"}, ["zsr"] = {"Southern Rincon Zapotec"}, ["zsu"] = {"Sukurum"}, ["zte"] = {"Elotepec Zapotec"}, ["ztg"] = {"Xanaguía Zapotec"}, ["ztl"] = {"Lapaguía-Guivini Zapotec"}, ["ztm"] = {"San Agustín Mixtepec Zapotec"}, ["ztn"] = {"Santa Catarina Albarradas Zapotec"}, ["ztp"] = {"Loxicha Zapotec"}, ["ztq"] = {"Quioquitani-Quierí Zapotec"}, ["zts"] = {"Tilquiapan Zapotec"}, ["ztt"] = {"Tejalapan Zapotec"}, ["ztu"] = {"Güilá Zapotec"}, ["ztx"] = {"Zaachila Zapotec"}, ["zty"] = {"Yatee Zapotec"}, ["zuh"] = {"Tokano"}, ["zum"] = {"Kumzari"}, ["zun"] = {"Zuni"}, ["zuy"] = {"Zumaya"}, ["zwa"] = {"Zay"}, ["zxx"] = {"No linguistic content", "Not applicable"}, ["zyb"] = {"Yongbei Zhuang"}, ["zyg"] = {"Yang Zhuang"}, ["zyj"] = {"Youjiang Zhuang"}, ["zyn"] = {"Yongnan Zhuang"}, ["zyp"] = {"Zyphe Chin"}, ["zza"] = {"Zaza", "Dimili", "Dimli (macrolanguage)", "Kirdki", "Kirmanjki (macrolanguage)", "Zazaki"}, ["zzj"] = {"Zuojiang Zhuang"} } local deprecated = { ["in"] = {"Indonesian"}, ["iw"] = {"Hebrew"}, ["ji"] = {"Yiddish"}, ["jw"] = {"Javanese"}, ["mo"] = {"Moldavian", "Moldovan"}, ["aam"] = {"Aramanik"}, ["adp"] = {"Adap"}, ["agp"] = {"Paranan"}, ["ais"] = {"Nataoran Amis"}, ["ajp"] = {"South Levantine Arabic"}, ["ajt"] = {"Judeo-Tunisian Arabic"}, ["aoh"] = {"Arma"}, ["asd"] = {"Asas"}, ["aue"] = {"ǂKxʼauǁʼein"}, ["ayx"] = {"Ayi (China)"}, ["ayy"] = {"Tayabas Ayta"}, ["baz"] = {"Tunen"}, ["bbz"] = {"Babalia Creole Arabic"}, ["bgm"] = {"Baga Mboteni"}, ["bhk"] = {"Albay Bicolano"}, ["bic"] = {"Bikaru"}, ["bij"] = {"Vaghat-Ya-Bijim-Legeri"}, ["bjd"] = {"Bandjigali"}, ["bjq"] = {"Southern Betsimisaraka Malagasy"}, ["bkb"] = {"Finallig"}, ["blg"] = {"Balau"}, ["bmy"] = {"Bemba (Democratic Republic of Congo)"}, ["bpb"] = {"Barbacoas"}, ["btb"] = {"Beti (Cameroon)"}, ["btl"] = {"Bhatola"}, ["bxx"] = {"Borna (Democratic Republic of Congo)"}, ["byy"] = {"Buya"}, ["cbe"] = {"Chipiajes"}, ["cbh"] = {"Cagua"}, ["cca"] = {"Cauca"}, ["ccq"] = {"Chaungtha"}, ["cdg"] = {"Chamari"}, ["cjr"] = {"Chorotega"}, ["cka"] = {"Khumi Awa Chin"}, ["cmk"] = {"Chimakum"}, ["coy"] = {"Coyaima"}, ["cqu"] = {"Chilean Quechua"}, ["cug"] = {"Chungmboko", "Cung"}, ["cum"] = {"Cumeral"}, ["daf"] = {"Dan"}, ["dap"] = {"Nisi (India)"}, ["dgu"] = {"Degaru"}, ["dha"] = {"Dhanwar (India)"}, ["dit"] = {"Dirari"}, ["djl"] = {"Djiwarli"}, ["dkl"] = {"Kolum So Dogon"}, ["drh"] = {"Darkhat"}, ["drr"] = {"Dororo"}, ["drw"] = {"Darwazi"}, ["dud"] = {"Hun-Saare"}, ["duj"] = {"Dhuwal"}, ["dwl"] = {"Walo Kumbe Dogon"}, ["ekc"] = {"Eastern Karnic"}, ["elp"] = {"Elpaputih"}, ["emo"] = {"Emok"}, ["gav"] = {"Gabutamon"}, ["gbc"] = {"Garawa"}, ["gfx"] = {"Mangetti Dune ǃXung"}, ["ggn"] = {"Eastern Gurung"}, ["ggo"] = {"Southern Gondi"}, ["ggr"] = {"Aghu Tharnggalu"}, ["gio"] = {"Gelao"}, ["gji"] = {"Geji"}, ["gli"] = {"Guliguli"}, ["gti"] = {"Gbati-ri"}, ["guv"] = {"Gey"}, ["hrr"] = {"Horuru"}, ["iap"] = {"Iapama"}, ["ibi"] = {"Ibilo"}, ["ill"] = {"Iranun"}, ["ilw"] = {"Talur"}, ["ime"] = {"Imeraguen"}, ["izi"] = {"Izi-Ezaa-Ikwo-Mgbo"}, ["jar"] = {"Jarawa (Nigeria)"}, ["jeg"] = {"Jeng"}, ["kbf"] = {"Kakauhua"}, ["kdv"] = {"Kado"}, ["kgc"] = {"Kasseng"}, ["kgd"] = {"Kataang"}, ["kgh"] = {"Upper Tanudan Kalinga"}, ["kgm"] = {"Karipúna"}, ["kjf"] = {"Khalaj [Indo-Iranian]"}, ["koj"] = {"Sara Dunjo"}, ["kox"] = {"Coxima"}, ["kpp"] = {"Paku Karen"}, ["krm"] = {"Krim"}, ["ksa"] = {"Shuwa-Zamani"}, ["ktr"] = {"Kota Marudu Tinagas"}, ["kvs"] = {"Kunggara"}, ["kwq"] = {"Kwak"}, ["kxe"] = {"Kakihum"}, ["kxl"] = {"Nepali Kurux"}, ["kxu"] = {"Kui (India)"}, ["kzh"] = {"Kenuzi-Dongola"}, ["kzj"] = {"Coastal Kadazan"}, ["kzt"] = {"Tambunan Dusun"}, ["lak"] = {"Laka (Nigeria)"}, ["lba"] = {"Lui"}, ["leg"] = {"Lengua"}, ["lii"] = {"Lingkhim"}, ["llo"] = {"Khlor"}, ["lmm"] = {"Lamam"}, ["lmz"] = {"Lumbee"}, ["lno"] = {"Lango (South Sudan)"}, ["lsg"] = {"Lyons Sign Language"}, ["meg"] = {"Mea"}, ["mgx"] = {"Omati"}, ["mhh"] = {"Maskoy Pidgin"}, ["mja"] = {"Mahei"}, ["mld"] = {"Malakhel"}, ["mnt"] = {"Maykulan"}, ["mof"] = {"Mohegan-Montauk-Narragansett"}, ["mst"] = {"Cataelano Mandaya"}, ["mvm"] = {"Muya"}, ["mwd"] = {"Mudbura"}, ["mwj"] = {"Maligo"}, ["mwx"] = {"Mediak"}, ["mwy"] = {"Mosiro"}, ["myd"] = {"Maramba"}, ["myi"] = {"Mina (India)"}, ["myq"] = {"Forest Maninka"}, ["myt"] = {"Sangab Mandaya"}, ["nad"] = {"Nijadali"}, ["nbf"] = {"Naxi"}, ["nbx"] = {"Ngura"}, ["ncp"] = {"Ndaktup"}, ["ngo"] = {"Ngoni"}, ["nln"] = {"Durango Nahuatl"}, ["nlr"] = {"Ngarla"}, ["nns"] = {"Ningye"}, ["nnx"] = {"Ngong"}, ["nom"] = {"Nocamán"}, ["noo"] = {"Nootka"}, ["nts"] = {"Natagaimas"}, ["nxu"] = {"Narau"}, ["ome"] = {"Omejes"}, ["oun"] = {"ǃOǃung"}, ["pat"] = {"Papitalai"}, ["pbz"] = {"Palu"}, ["pcr"] = {"Panang"}, ["pgy"] = {"Pongyong"}, ["pii"] = {"Pini"}, ["plj"] = {"Polci"}, ["plp"] = {"Palpa"}, ["pmc"] = {"Palumata"}, ["pmk"] = {"Pamlico"}, ["pmu"] = {"Mirpur Panjabi"}, ["pod"] = {"Ponares"}, ["ppa"] = {"Pao"}, ["ppr"] = {"Piru"}, ["prb"] = {"Lua'"}, ["prp"] = {"Parsi"}, ["pry"] = {"Pray 3"}, ["puk"] = {"Pu Ko"}, ["puz"] = {"Purum Naga"}, ["rie"] = {"Rien"}, ["rmr"] = {"Caló"}, ["rna"] = {"Runa"}, ["rsi"] = {"Rennellese Sign Language"}, ["sap"] = {"Sanapaná"}, ["sca"] = {"Sansu"}, ["sdm"] = {"Semandang"}, ["sgl"] = {"Sanglechi-Ishkashimi"}, ["sgo"] = {"Songa"}, ["skk"] = {"Sok"}, ["slq"] = {"Salchuq"}, ["smd"] = {"Sama"}, ["snb"] = {"Sebuyau"}, ["snh"] = {"Shinabo"}, ["sul"] = {"Surigaonon"}, ["sum"] = {"Sumo-Mayangna"}, ["svr"] = {"Savara"}, ["szd"] = {"Seru"}, ["tbb"] = {"Tapeba"}, ["tdu"] = {"Tempasuk Dusun"}, ["tgg"] = {"Tangga"}, ["thc"] = {"Tai Hang Tong"}, ["thw"] = {"Thudam"}, ["thx"] = {"The"}, ["tid"] = {"Tidong"}, ["tie"] = {"Tingal"}, ["tkk"] = {"Takpa"}, ["tlw"] = {"South Wemale"}, ["tmk"] = {"Northwestern Tamang"}, ["tmp"] = {"Tai Mène"}, ["tne"] = {"Tinoc Kallahan"}, ["tnf"] = {"Tangshewi"}, ["toe"] = {"Tomedes"}, ["tpw"] = {"Tupí"}, ["tsf"] = {"Southwestern Tamang"}, ["unp"] = {"Worora"}, ["uok"] = {"Uokha"}, ["uun"] = {"Kulon-Pazeh"}, ["vki"] = {"Ija-Zuba"}, ["wgw"] = {"Wagawaga"}, ["wit"] = {"Wintu"}, ["wiw"] = {"Wirangu"}, ["wra"] = {"Warapu"}, ["wrd"] = {"Warduji"}, ["wya"] = {"Wyandot"}, ["xba"] = {"Kamba (Brazil)"}, ["xbx"] = {"Kabixí"}, ["xia"] = {"Xiandao"}, ["xip"] = {"Xipináwa"}, ["xkh"] = {"Karahawyana"}, ["xrq"] = {"Karranga"}, ["xss"] = {"Assan"}, ["xtz"] = {"Tasmanian"}, ["ybd"] = {"Yangbye"}, ["yds"] = {"Yiddish Sign Language"}, ["yen"] = {"Yendang"}, ["yiy"] = {"Yir Yoront"}, ["yma"] = {"Yamphe"}, ["ymt"] = {"Mator-Taygi-Karagas"}, ["ynh"] = {"Yangho"}, ["yos"] = {"Yos"}, ["yri"] = {"Yarí"}, ["yuu"] = {"Yugh"}, ["zir"] = {"Ziriya"}, ["zkb"] = {"Koibal"}, ["zua"] = {"Zeem"} } return { active = active, deprecated = deprecated, } 90939c58de6a6d2fcd35fcf808d04acfa67bc8fd Module:Language/data/iana scripts 828 241 707 706 2023-06-06T18:16:29Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Language/data/iana_scripts]]: w Scribunto text/plain -- File-Date: 2023-05-11 return { ["Adlm"] = {"Adlam"}, ["Afak"] = {"Afaka"}, ["Aghb"] = {"Caucasian Albanian"}, ["Ahom"] = {"Ahom", "Tai Ahom"}, ["Arab"] = {"Arabic"}, ["Aran"] = {"Arabic (Nastaliq variant)"}, ["Armi"] = {"Imperial Aramaic"}, ["Armn"] = {"Armenian"}, ["Avst"] = {"Avestan"}, ["Bali"] = {"Balinese"}, ["Bamu"] = {"Bamum"}, ["Bass"] = {"Bassa Vah"}, ["Batk"] = {"Batak"}, ["Beng"] = {"Bengali", "Bangla"}, ["Bhks"] = {"Bhaiksuki"}, ["Blis"] = {"Blissymbols"}, ["Bopo"] = {"Bopomofo"}, ["Brah"] = {"Brahmi"}, ["Brai"] = {"Braille"}, ["Bugi"] = {"Buginese"}, ["Buhd"] = {"Buhid"}, ["Cakm"] = {"Chakma"}, ["Cans"] = {"Unified Canadian Aboriginal Syllabics"}, ["Cari"] = {"Carian"}, ["Cham"] = {"Cham"}, ["Cher"] = {"Cherokee"}, ["Chrs"] = {"Chorasmian"}, ["Cirt"] = {"Cirth"}, ["Copt"] = {"Coptic"}, ["Cpmn"] = {"Cypro-Minoan"}, ["Cprt"] = {"Cypriot syllabary"}, ["Cyrl"] = {"Cyrillic"}, ["Cyrs"] = {"Cyrillic (Old Church Slavonic variant)"}, ["Deva"] = {"Devanagari", "Nagari"}, ["Diak"] = {"Dives Akuru"}, ["Dogr"] = {"Dogra"}, ["Dsrt"] = {"Deseret", "Mormon"}, ["Dupl"] = {"Duployan shorthand", "Duployan stenography"}, ["Egyd"] = {"Egyptian demotic"}, ["Egyh"] = {"Egyptian hieratic"}, ["Egyp"] = {"Egyptian hieroglyphs"}, ["Elba"] = {"Elbasan"}, ["Elym"] = {"Elymaic"}, ["Ethi"] = {"Ethiopic", "Geʻez", "Ge'ez"}, ["Geok"] = {"Khutsuri (Asomtavruli and Nuskhuri)"}, ["Geor"] = {"Georgian (Mkhedruli and Mtavruli)"}, ["Glag"] = {"Glagolitic"}, ["Gong"] = {"Gunjala Gondi"}, ["Gonm"] = {"Masaram Gondi"}, ["Goth"] = {"Gothic"}, ["Gran"] = {"Grantha"}, ["Grek"] = {"Greek"}, ["Gujr"] = {"Gujarati"}, ["Guru"] = {"Gurmukhi"}, ["Hanb"] = {"Han with Bopomofo (alias for Han + Bopomofo)"}, ["Hang"] = {"Hangul", "Hangŭl", "Hangeul"}, ["Hani"] = {"Han", "Hanzi", "Kanji", "Hanja"}, ["Hano"] = {"Hanunoo", "Hanunóo"}, ["Hans"] = {"Han (Simplified variant)"}, ["Hant"] = {"Han (Traditional variant)"}, ["Hatr"] = {"Hatran"}, ["Hebr"] = {"Hebrew"}, ["Hira"] = {"Hiragana"}, ["Hluw"] = {"Anatolian Hieroglyphs", "Luwian Hieroglyphs", "Hittite Hieroglyphs"}, ["Hmng"] = {"Pahawh Hmong"}, ["Hmnp"] = {"Nyiakeng Puachue Hmong"}, ["Hrkt"] = {"Japanese syllabaries (alias for Hiragana + Katakana)"}, ["Hung"] = {"Old Hungarian", "Hungarian Runic"}, ["Inds"] = {"Indus", "Harappan"}, ["Ital"] = {"Old Italic (Etruscan, Oscan, etc.)"}, ["Jamo"] = {"Jamo (alias for Jamo subset of Hangul)"}, ["Java"] = {"Javanese"}, ["Jpan"] = {"Japanese (alias for Han + Hiragana + Katakana)"}, ["Jurc"] = {"Jurchen"}, ["Kali"] = {"Kayah Li"}, ["Kana"] = {"Katakana"}, ["Kawi"] = {"Kawi"}, ["Khar"] = {"Kharoshthi"}, ["Khmr"] = {"Khmer"}, ["Khoj"] = {"Khojki"}, ["Kitl"] = {"Khitan large script"}, ["Kits"] = {"Khitan small script"}, ["Knda"] = {"Kannada"}, ["Kore"] = {"Korean (alias for Hangul + Han)"}, ["Kpel"] = {"Kpelle"}, ["Kthi"] = {"Kaithi"}, ["Lana"] = {"Tai Tham", "Lanna"}, ["Laoo"] = {"Lao"}, ["Latf"] = {"Latin (Fraktur variant)"}, ["Latg"] = {"Latin (Gaelic variant)"}, ["Latn"] = {"Latin"}, ["Leke"] = {"Leke"}, ["Lepc"] = {"Lepcha", "Róng"}, ["Limb"] = {"Limbu"}, ["Lina"] = {"Linear A"}, ["Linb"] = {"Linear B"}, ["Lisu"] = {"Lisu", "Fraser"}, ["Loma"] = {"Loma"}, ["Lyci"] = {"Lycian"}, ["Lydi"] = {"Lydian"}, ["Mahj"] = {"Mahajani"}, ["Maka"] = {"Makasar"}, ["Mand"] = {"Mandaic", "Mandaean"}, ["Mani"] = {"Manichaean"}, ["Marc"] = {"Marchen"}, ["Maya"] = {"Mayan hieroglyphs"}, ["Medf"] = {"Medefaidrin", "Oberi Okaime", "Oberi Ɔkaimɛ"}, ["Mend"] = {"Mende Kikakui"}, ["Merc"] = {"Meroitic Cursive"}, ["Mero"] = {"Meroitic Hieroglyphs"}, ["Mlym"] = {"Malayalam"}, ["Modi"] = {"Modi", "Moḍī"}, ["Mong"] = {"Mongolian"}, ["Moon"] = {"Moon", "Moon code", "Moon script", "Moon type"}, ["Mroo"] = {"Mro", "Mru"}, ["Mtei"] = {"Meitei Mayek", "Meithei", "Meetei"}, ["Mult"] = {"Multani"}, ["Mymr"] = {"Myanmar", "Burmese"}, ["Nagm"] = {"Nag Mundari"}, ["Nand"] = {"Nandinagari"}, ["Narb"] = {"Old North Arabian", "Ancient North Arabian"}, ["Nbat"] = {"Nabataean"}, ["Newa"] = {"Newa", "Newar", "Newari", "Nepāla lipi"}, ["Nkdb"] = {"Naxi Dongba", "na²¹ɕi³³ to³³ba²¹", "Nakhi Tomba"}, ["Nkgb"] = {"Naxi Geba", "na²¹ɕi³³ gʌ²¹ba²¹", "'Na-'Khi ²Ggŏ-¹baw", "Nakhi Geba"}, ["Nkoo"] = {"N’Ko", "N'Ko"}, ["Nshu"] = {"Nüshu"}, ["Ogam"] = {"Ogham"}, ["Olck"] = {"Ol Chiki", "Ol Cemet'", "Ol", "Santali"}, ["Orkh"] = {"Old Turkic", "Orkhon Runic"}, ["Orya"] = {"Oriya", "Odia"}, ["Osge"] = {"Osage"}, ["Osma"] = {"Osmanya"}, ["Ougr"] = {"Old Uyghur"}, ["Palm"] = {"Palmyrene"}, ["Pauc"] = {"Pau Cin Hau"}, ["Pcun"] = {"Proto-Cuneiform"}, ["Pelm"] = {"Proto-Elamite"}, ["Perm"] = {"Old Permic"}, ["Phag"] = {"Phags-pa"}, ["Phli"] = {"Inscriptional Pahlavi"}, ["Phlp"] = {"Psalter Pahlavi"}, ["Phlv"] = {"Book Pahlavi"}, ["Phnx"] = {"Phoenician"}, ["Piqd"] = {"Klingon (KLI pIqaD)"}, ["Plrd"] = {"Miao", "Pollard"}, ["Prti"] = {"Inscriptional Parthian"}, ["Psin"] = {"Proto-Sinaitic"}, ["Ranj"] = {"Ranjana"}, ["Rjng"] = {"Rejang", "Redjang", "Kaganga"}, ["Rohg"] = {"Hanifi Rohingya"}, ["Roro"] = {"Rongorongo"}, ["Runr"] = {"Runic"}, ["Samr"] = {"Samaritan"}, ["Sara"] = {"Sarati"}, ["Sarb"] = {"Old South Arabian"}, ["Saur"] = {"Saurashtra"}, ["Sgnw"] = {"SignWriting"}, ["Shaw"] = {"Shavian", "Shaw"}, ["Shrd"] = {"Sharada", "Śāradā"}, ["Shui"] = {"Shuishu"}, ["Sidd"] = {"Siddham", "Siddhaṃ", "Siddhamātṛkā"}, ["Sind"] = {"Khudawadi", "Sindhi"}, ["Sinh"] = {"Sinhala"}, ["Sogd"] = {"Sogdian"}, ["Sogo"] = {"Old Sogdian"}, ["Sora"] = {"Sora Sompeng"}, ["Soyo"] = {"Soyombo"}, ["Sund"] = {"Sundanese"}, ["Sunu"] = {"Sunuwar"}, ["Sylo"] = {"Syloti Nagri"}, ["Syrc"] = {"Syriac"}, ["Syre"] = {"Syriac (Estrangelo variant)"}, ["Syrj"] = {"Syriac (Western variant)"}, ["Syrn"] = {"Syriac (Eastern variant)"}, ["Tagb"] = {"Tagbanwa"}, ["Takr"] = {"Takri", "Ṭākrī", "Ṭāṅkrī"}, ["Tale"] = {"Tai Le"}, ["Talu"] = {"New Tai Lue"}, ["Taml"] = {"Tamil"}, ["Tang"] = {"Tangut"}, ["Tavt"] = {"Tai Viet"}, ["Telu"] = {"Telugu"}, ["Teng"] = {"Tengwar"}, ["Tfng"] = {"Tifinagh", "Berber"}, ["Tglg"] = {"Tagalog", "Baybayin", "Alibata"}, ["Thaa"] = {"Thaana"}, ["Thai"] = {"Thai"}, ["Tibt"] = {"Tibetan"}, ["Tirh"] = {"Tirhuta"}, ["Tnsa"] = {"Tangsa"}, ["Toto"] = {"Toto"}, ["Ugar"] = {"Ugaritic"}, ["Vaii"] = {"Vai"}, ["Visp"] = {"Visible Speech"}, ["Vith"] = {"Vithkuqi"}, ["Wara"] = {"Warang Citi", "Varang Kshiti"}, ["Wcho"] = {"Wancho"}, ["Wole"] = {"Woleai"}, ["Xpeo"] = {"Old Persian"}, ["Xsux"] = {"Sumero-Akkadian cuneiform"}, ["Yezi"] = {"Yezidi"}, ["Yiii"] = {"Yi"}, ["Zanb"] = {"Zanabazar Square", "Zanabazarin Dörböljin Useg", "Xewtee Dörböljin Bicig", "Horizontal Square Script"}, ["Zinh"] = {"Code for inherited script"}, ["Zmth"] = {"Mathematical notation"}, ["Zsye"] = {"Symbols (Emoji variant)"}, ["Zsym"] = {"Symbols"}, ["Zxxx"] = {"Code for unwritten documents"}, ["Zyyy"] = {"Code for undetermined script"}, ["Zzzz"] = {"Code for uncoded script"} } 279ed2c472c8154d84ff2ea23c214e64c168d7e9 Module:Language/data/iana regions 828 242 709 708 2023-06-06T18:16:29Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Language/data/iana_regions]]: w Scribunto text/plain -- File-Date: 2023-05-11 return { ["AC"] = {"Ascension Island"}, ["AD"] = {"Andorra"}, ["AE"] = {"United Arab Emirates"}, ["AF"] = {"Afghanistan"}, ["AG"] = {"Antigua and Barbuda"}, ["AI"] = {"Anguilla"}, ["AL"] = {"Albania"}, ["AM"] = {"Armenia"}, ["AO"] = {"Angola"}, ["AQ"] = {"Antarctica"}, ["AR"] = {"Argentina"}, ["AS"] = {"American Samoa"}, ["AT"] = {"Austria"}, ["AU"] = {"Australia"}, ["AW"] = {"Aruba"}, ["AX"] = {"Åland Islands"}, ["AZ"] = {"Azerbaijan"}, ["BA"] = {"Bosnia and Herzegovina"}, ["BB"] = {"Barbados"}, ["BD"] = {"Bangladesh"}, ["BE"] = {"Belgium"}, ["BF"] = {"Burkina Faso"}, ["BG"] = {"Bulgaria"}, ["BH"] = {"Bahrain"}, ["BI"] = {"Burundi"}, ["BJ"] = {"Benin"}, ["BL"] = {"Saint Barthélemy"}, ["BM"] = {"Bermuda"}, ["BN"] = {"Brunei Darussalam"}, ["BO"] = {"Bolivia"}, ["BQ"] = {"Bonaire, Sint Eustatius and Saba"}, ["BR"] = {"Brazil"}, ["BS"] = {"Bahamas"}, ["BT"] = {"Bhutan"}, ["BV"] = {"Bouvet Island"}, ["BW"] = {"Botswana"}, ["BY"] = {"Belarus"}, ["BZ"] = {"Belize"}, ["CA"] = {"Canada"}, ["CC"] = {"Cocos (Keeling) Islands"}, ["CD"] = {"The Democratic Republic of the Congo"}, ["CF"] = {"Central African Republic"}, ["CG"] = {"Congo"}, ["CH"] = {"Switzerland"}, ["CI"] = {"Côte d'Ivoire"}, ["CK"] = {"Cook Islands"}, ["CL"] = {"Chile"}, ["CM"] = {"Cameroon"}, ["CN"] = {"China"}, ["CO"] = {"Colombia"}, ["CP"] = {"Clipperton Island"}, ["CQ"] = {"Sark"}, ["CR"] = {"Costa Rica"}, ["CU"] = {"Cuba"}, ["CV"] = {"Cabo Verde", "Cape Verde"}, ["CW"] = {"Curaçao"}, ["CX"] = {"Christmas Island"}, ["CY"] = {"Cyprus"}, ["CZ"] = {"Czechia", "Czech Republic"}, ["DE"] = {"Germany"}, ["DG"] = {"Diego Garcia"}, ["DJ"] = {"Djibouti"}, ["DK"] = {"Denmark"}, ["DM"] = {"Dominica"}, ["DO"] = {"Dominican Republic"}, ["DZ"] = {"Algeria"}, ["EA"] = {"Ceuta, Melilla"}, ["EC"] = {"Ecuador"}, ["EE"] = {"Estonia"}, ["EG"] = {"Egypt"}, ["EH"] = {"Western Sahara"}, ["ER"] = {"Eritrea"}, ["ES"] = {"Spain"}, ["ET"] = {"Ethiopia"}, ["EU"] = {"European Union"}, ["EZ"] = {"Eurozone"}, ["FI"] = {"Finland"}, ["FJ"] = {"Fiji"}, ["FK"] = {"Falkland Islands (Malvinas)"}, ["FM"] = {"Federated States of Micronesia"}, ["FO"] = {"Faroe Islands"}, ["FR"] = {"France"}, ["GA"] = {"Gabon"}, ["GB"] = {"United Kingdom"}, ["GD"] = {"Grenada"}, ["GE"] = {"Georgia"}, ["GF"] = {"French Guiana"}, ["GG"] = {"Guernsey"}, ["GH"] = {"Ghana"}, ["GI"] = {"Gibraltar"}, ["GL"] = {"Greenland"}, ["GM"] = {"Gambia"}, ["GN"] = {"Guinea"}, ["GP"] = {"Guadeloupe"}, ["GQ"] = {"Equatorial Guinea"}, ["GR"] = {"Greece"}, ["GS"] = {"South Georgia and the South Sandwich Islands"}, ["GT"] = {"Guatemala"}, ["GU"] = {"Guam"}, ["GW"] = {"Guinea-Bissau"}, ["GY"] = {"Guyana"}, ["HK"] = {"Hong Kong"}, ["HM"] = {"Heard Island and McDonald Islands"}, ["HN"] = {"Honduras"}, ["HR"] = {"Croatia"}, ["HT"] = {"Haiti"}, ["HU"] = {"Hungary"}, ["IC"] = {"Canary Islands"}, ["ID"] = {"Indonesia"}, ["IE"] = {"Ireland"}, ["IL"] = {"Israel"}, ["IM"] = {"Isle of Man"}, ["IN"] = {"India"}, ["IO"] = {"British Indian Ocean Territory"}, ["IQ"] = {"Iraq"}, ["IR"] = {"Islamic Republic of Iran"}, ["IS"] = {"Iceland"}, ["IT"] = {"Italy"}, ["JE"] = {"Jersey"}, ["JM"] = {"Jamaica"}, ["JO"] = {"Jordan"}, ["JP"] = {"Japan"}, ["KE"] = {"Kenya"}, ["KG"] = {"Kyrgyzstan"}, ["KH"] = {"Cambodia"}, ["KI"] = {"Kiribati"}, ["KM"] = {"Comoros"}, ["KN"] = {"Saint Kitts and Nevis"}, ["KP"] = {"Democratic People's Republic of Korea"}, ["KR"] = {"Republic of Korea"}, ["KW"] = {"Kuwait"}, ["KY"] = {"Cayman Islands"}, ["KZ"] = {"Kazakhstan"}, ["LA"] = {"Lao People's Democratic Republic"}, ["LB"] = {"Lebanon"}, ["LC"] = {"Saint Lucia"}, ["LI"] = {"Liechtenstein"}, ["LK"] = {"Sri Lanka"}, ["LR"] = {"Liberia"}, ["LS"] = {"Lesotho"}, ["LT"] = {"Lithuania"}, ["LU"] = {"Luxembourg"}, ["LV"] = {"Latvia"}, ["LY"] = {"Libya"}, ["MA"] = {"Morocco"}, ["MC"] = {"Monaco"}, ["MD"] = {"Moldova"}, ["ME"] = {"Montenegro"}, ["MF"] = {"Saint Martin (French part)"}, ["MG"] = {"Madagascar"}, ["MH"] = {"Marshall Islands"}, ["MK"] = {"North Macedonia"}, ["ML"] = {"Mali"}, ["MM"] = {"Myanmar"}, ["MN"] = {"Mongolia"}, ["MO"] = {"Macao"}, ["MP"] = {"Northern Mariana Islands"}, ["MQ"] = {"Martinique"}, ["MR"] = {"Mauritania"}, ["MS"] = {"Montserrat"}, ["MT"] = {"Malta"}, ["MU"] = {"Mauritius"}, ["MV"] = {"Maldives"}, ["MW"] = {"Malawi"}, ["MX"] = {"Mexico"}, ["MY"] = {"Malaysia"}, ["MZ"] = {"Mozambique"}, ["NA"] = {"Namibia"}, ["NC"] = {"New Caledonia"}, ["NE"] = {"Niger"}, ["NF"] = {"Norfolk Island"}, ["NG"] = {"Nigeria"}, ["NI"] = {"Nicaragua"}, ["NL"] = {"Netherlands"}, ["NO"] = {"Norway"}, ["NP"] = {"Nepal"}, ["NR"] = {"Nauru"}, ["NU"] = {"Niue"}, ["NZ"] = {"New Zealand"}, ["OM"] = {"Oman"}, ["PA"] = {"Panama"}, ["PE"] = {"Peru"}, ["PF"] = {"French Polynesia"}, ["PG"] = {"Papua New Guinea"}, ["PH"] = {"Philippines"}, ["PK"] = {"Pakistan"}, ["PL"] = {"Poland"}, ["PM"] = {"Saint Pierre and Miquelon"}, ["PN"] = {"Pitcairn"}, ["PR"] = {"Puerto Rico"}, ["PS"] = {"State of Palestine"}, ["PT"] = {"Portugal"}, ["PW"] = {"Palau"}, ["PY"] = {"Paraguay"}, ["QA"] = {"Qatar"}, ["RE"] = {"Réunion"}, ["RO"] = {"Romania"}, ["RS"] = {"Serbia"}, ["RU"] = {"Russian Federation"}, ["RW"] = {"Rwanda"}, ["SA"] = {"Saudi Arabia"}, ["SB"] = {"Solomon Islands"}, ["SC"] = {"Seychelles"}, ["SD"] = {"Sudan"}, ["SE"] = {"Sweden"}, ["SG"] = {"Singapore"}, ["SH"] = {"Saint Helena, Ascension and Tristan da Cunha"}, ["SI"] = {"Slovenia"}, ["SJ"] = {"Svalbard and Jan Mayen"}, ["SK"] = {"Slovakia"}, ["SL"] = {"Sierra Leone"}, ["SM"] = {"San Marino"}, ["SN"] = {"Senegal"}, ["SO"] = {"Somalia"}, ["SR"] = {"Suriname"}, ["SS"] = {"South Sudan"}, ["ST"] = {"Sao Tome and Principe"}, ["SV"] = {"El Salvador"}, ["SX"] = {"Sint Maarten (Dutch part)"}, ["SY"] = {"Syrian Arab Republic"}, ["SZ"] = {"Eswatini", "eSwatini", "Swaziland"}, ["TA"] = {"Tristan da Cunha"}, ["TC"] = {"Turks and Caicos Islands"}, ["TD"] = {"Chad"}, ["TF"] = {"French Southern Territories"}, ["TG"] = {"Togo"}, ["TH"] = {"Thailand"}, ["TJ"] = {"Tajikistan"}, ["TK"] = {"Tokelau"}, ["TL"] = {"Timor-Leste"}, ["TM"] = {"Turkmenistan"}, ["TN"] = {"Tunisia"}, ["TO"] = {"Tonga"}, ["TR"] = {"Türkiye", "Turkey"}, ["TT"] = {"Trinidad and Tobago"}, ["TV"] = {"Tuvalu"}, ["TW"] = {"Taiwan, Province of China"}, ["TZ"] = {"United Republic of Tanzania"}, ["UA"] = {"Ukraine"}, ["UG"] = {"Uganda"}, ["UM"] = {"United States Minor Outlying Islands"}, ["UN"] = {"United Nations"}, ["US"] = {"United States"}, ["UY"] = {"Uruguay"}, ["UZ"] = {"Uzbekistan"}, ["VA"] = {"Holy See (Vatican City State)"}, ["VC"] = {"Saint Vincent and the Grenadines"}, ["VE"] = {"Venezuela"}, ["VG"] = {"British Virgin Islands"}, ["VI"] = {"U.S. Virgin Islands"}, ["VN"] = {"Viet Nam"}, ["VU"] = {"Vanuatu"}, ["WF"] = {"Wallis and Futuna"}, ["WS"] = {"Samoa"}, ["YE"] = {"Yemen"}, ["YT"] = {"Mayotte"}, ["ZA"] = {"South Africa"}, ["ZM"] = {"Zambia"}, ["ZW"] = {"Zimbabwe"}, ["001"] = {"World"}, ["002"] = {"Africa"}, ["003"] = {"North America"}, ["005"] = {"South America"}, ["009"] = {"Oceania"}, ["011"] = {"Western Africa"}, ["013"] = {"Central America"}, ["014"] = {"Eastern Africa"}, ["015"] = {"Northern Africa"}, ["017"] = {"Middle Africa"}, ["018"] = {"Southern Africa"}, ["019"] = {"Americas"}, ["021"] = {"Northern America"}, ["029"] = {"Caribbean"}, ["030"] = {"Eastern Asia"}, ["034"] = {"Southern Asia"}, ["035"] = {"South-Eastern Asia"}, ["039"] = {"Southern Europe"}, ["053"] = {"Australia and New Zealand"}, ["054"] = {"Melanesia"}, ["057"] = {"Micronesia"}, ["061"] = {"Polynesia"}, ["142"] = {"Asia"}, ["143"] = {"Central Asia"}, ["145"] = {"Western Asia"}, ["150"] = {"Europe"}, ["151"] = {"Eastern Europe"}, ["154"] = {"Northern Europe"}, ["155"] = {"Western Europe"}, ["202"] = {"Sub-Saharan Africa"}, ["419"] = {"Latin America and the Caribbean"} } 9b8ad87e9a14bff745205a082bcd25cbcd8713ee Module:Language/data/iana variants 828 243 711 710 2023-06-06T18:16:29Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Language/data/iana_variants]]: w Scribunto text/plain -- File-Date: 2023-05-11 return { ["1606nict"] = { ["descriptions"] = {"Late Middle French (to 1606)"}, ["prefixes"] = {"frm"}, }, ["1694acad"] = { ["descriptions"] = {"Early Modern French"}, ["prefixes"] = {"fr"}, }, ["1901"] = { ["descriptions"] = {"Traditional German orthography"}, ["prefixes"] = {"de"}, }, ["1959acad"] = { ["descriptions"] = {"\"Academic\" (\"governmental\") variant of Belarusian as codified in 1959"}, ["prefixes"] = {"be"}, }, ["1994"] = { ["descriptions"] = {"Standardized Resian orthography"}, ["prefixes"] = {"sl-rozaj", "sl-rozaj-biske", "sl-rozaj-njiva", "sl-rozaj-osojs", "sl-rozaj-solba"}, }, ["1996"] = { ["descriptions"] = {"German orthography of 1996"}, ["prefixes"] = {"de"}, }, ["abl1943"] = { ["descriptions"] = {"Orthographic formulation of 1943 - Official in Brazil (Formulário Ortográfico de 1943 - Oficial no Brasil)"}, ["prefixes"] = {"pt-br"}, }, ["akuapem"] = { ["descriptions"] = {"Akuapem Twi"}, ["prefixes"] = {"tw"}, }, ["alalc97"] = { ["descriptions"] = {"ALA-LC Romanization, 1997 edition"}, ["prefixes"] = {}, }, ["aluku"] = { ["descriptions"] = {"Aluku dialect", "Boni dialect"}, ["prefixes"] = {"djk"}, }, ["ao1990"] = { ["descriptions"] = {"Portuguese Language Orthographic Agreement of 1990 (Acordo Ortográfico da Língua Portuguesa de 1990)"}, ["prefixes"] = {"pt", "gl"}, }, ["aranes"] = { ["descriptions"] = {"Aranese"}, ["prefixes"] = {"oc"}, }, ["arkaika"] = { ["descriptions"] = {"Arcaicam Esperantom", "Arkaika Esperanto"}, ["prefixes"] = {"eo"}, }, ["asante"] = { ["descriptions"] = {"Asante Twi", "Ashanti Twi"}, ["prefixes"] = {"tw"}, }, ["auvern"] = { ["descriptions"] = {"Auvergnat"}, ["prefixes"] = {"oc"}, }, ["baku1926"] = { ["descriptions"] = {"Unified Turkic Latin Alphabet (Historical)"}, ["prefixes"] = {"az", "ba", "crh", "kk", "krc", "ky", "sah", "tk", "tt", "uz"}, }, ["balanka"] = { ["descriptions"] = {"The Balanka dialect of Anii"}, ["prefixes"] = {"blo"}, }, ["barla"] = { ["descriptions"] = {"The Barlavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["basiceng"] = { ["descriptions"] = {"Basic English"}, ["prefixes"] = {"en"}, }, ["bauddha"] = { ["descriptions"] = {"Buddhist Hybrid Sanskrit"}, ["prefixes"] = {"sa"}, }, ["bciav"] = { ["descriptions"] = {"BCI Blissymbolics AV"}, ["prefixes"] = {"zbl"}, }, ["bcizbl"] = { ["descriptions"] = {"BCI Blissymbolics"}, ["prefixes"] = {"zbl"}, }, ["biscayan"] = { ["descriptions"] = {"Biscayan dialect of Basque"}, ["prefixes"] = {"eu"}, }, ["biske"] = { ["descriptions"] = {"The San Giorgio dialect of Resian", "The Bila dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["bohoric"] = { ["descriptions"] = {"Slovene in Bohorič alphabet"}, ["prefixes"] = {"sl"}, }, ["boont"] = { ["descriptions"] = {"Boontling"}, ["prefixes"] = {"en"}, }, ["bornholm"] = { ["descriptions"] = {"Bornholmsk"}, ["prefixes"] = {"da"}, }, ["cisaup"] = { ["descriptions"] = {"Cisalpine"}, ["prefixes"] = {"oc"}, }, ["colb1945"] = { ["descriptions"] = {"Portuguese-Brazilian Orthographic Convention of 1945 (Convenção Ortográfica Luso-Brasileira de 1945)"}, ["prefixes"] = {"pt"}, }, ["cornu"] = { ["descriptions"] = {"Cornu-English", "Cornish English", "Anglo-Cornish"}, ["prefixes"] = {"en"}, }, ["creiss"] = { ["descriptions"] = {"Occitan variants of the Croissant area"}, ["prefixes"] = {"oc"}, }, ["dajnko"] = { ["descriptions"] = {"Slovene in Dajnko alphabet"}, ["prefixes"] = {"sl"}, }, ["ekavsk"] = { ["descriptions"] = {"Serbian with Ekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["emodeng"] = { ["descriptions"] = {"Early Modern English (1500-1700)"}, ["prefixes"] = {"en"}, }, ["fonipa"] = { ["descriptions"] = {"International Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonkirsh"] = { ["descriptions"] = {"Kirshenbaum Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonnapa"] = { ["descriptions"] = {"North American Phonetic Alphabet", "Americanist Phonetic Notation"}, ["prefixes"] = {}, }, ["fonupa"] = { ["descriptions"] = {"Uralic Phonetic Alphabet"}, ["prefixes"] = {}, }, ["fonxsamp"] = { ["descriptions"] = {"X-SAMPA transcription"}, ["prefixes"] = {}, }, ["gallo"] = { ["descriptions"] = {"Gallo"}, ["prefixes"] = {"fr"}, }, ["gascon"] = { ["descriptions"] = {"Gascon"}, ["prefixes"] = {"oc"}, }, ["grclass"] = { ["descriptions"] = {"Classical Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["grital"] = { ["descriptions"] = {"Italian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-cisaup", "oc-nicard", "oc-provenc"}, }, ["grmistr"] = { ["descriptions"] = {"Mistralian or Mistralian-inspired Occitan orthography"}, ["prefixes"] = {"oc", "oc-aranes", "oc-auvern", "oc-cisaup", "oc-creiss", "oc-gascon", "oc-lemosin", "oc-lengadoc", "oc-nicard", "oc-provenc", "oc-vivaraup"}, }, ["hepburn"] = { ["descriptions"] = {"Hepburn romanization"}, ["prefixes"] = {"ja-latn"}, }, ["hognorsk"] = { ["descriptions"] = {"Norwegian in Høgnorsk (High Norwegian) orthography"}, ["prefixes"] = {"nn"}, }, ["hsistemo"] = { ["descriptions"] = {"Standard H-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, }, ["ijekavsk"] = { ["descriptions"] = {"Serbian with Ijekavian pronunciation"}, ["prefixes"] = {"sr", "sr-latn", "sr-cyrl"}, }, ["itihasa"] = { ["descriptions"] = {"Epic Sanskrit"}, ["prefixes"] = {"sa"}, }, ["ivanchov"] = { ["descriptions"] = {"Bulgarian in 1899 orthography"}, ["prefixes"] = {"bg"}, }, ["jauer"] = { ["descriptions"] = {"Jauer dialect of Romansh"}, ["prefixes"] = {"rm"}, }, ["jyutping"] = { ["descriptions"] = {"Jyutping Cantonese Romanization"}, ["prefixes"] = {"yue"}, }, ["kkcor"] = { ["descriptions"] = {"Common Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["kociewie"] = { ["descriptions"] = {"The Kociewie dialect of Polish"}, ["prefixes"] = {"pl"}, }, ["kscor"] = { ["descriptions"] = {"Standard Cornish orthography of Revived Cornish", "Kernowek Standard"}, ["prefixes"] = {"kw"}, }, ["laukika"] = { ["descriptions"] = {"Classical Sanskrit"}, ["prefixes"] = {"sa"}, }, ["lemosin"] = { ["descriptions"] = {"Limousin"}, ["prefixes"] = {"oc"}, }, ["lengadoc"] = { ["descriptions"] = {"Languedocien"}, ["prefixes"] = {"oc"}, }, ["lipaw"] = { ["descriptions"] = {"The Lipovaz dialect of Resian", "The Lipovec dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["ltg1929"] = { ["descriptions"] = {"The Latgalian language orthography codified in 1929"}, ["prefixes"] = {"ltg"}, }, ["ltg2007"] = { ["descriptions"] = {"The Latgalian language orthography codified in the language law in 2007"}, ["prefixes"] = {"ltg"}, }, ["luna1918"] = { ["descriptions"] = {"Post-1917 Russian orthography"}, ["prefixes"] = {"ru"}, }, ["metelko"] = { ["descriptions"] = {"Slovene in Metelko alphabet"}, ["prefixes"] = {"sl"}, }, ["monoton"] = { ["descriptions"] = {"Monotonic Greek"}, ["prefixes"] = {"el"}, }, ["ndyuka"] = { ["descriptions"] = {"Ndyuka dialect", "Aukan dialect"}, ["prefixes"] = {"djk"}, }, ["nedis"] = { ["descriptions"] = {"Natisone dialect", "Nadiza dialect"}, ["prefixes"] = {"sl"}, }, ["newfound"] = { ["descriptions"] = {"Newfoundland English"}, ["prefixes"] = {"en-ca"}, }, ["nicard"] = { ["descriptions"] = {"Niçard"}, ["prefixes"] = {"oc"}, }, ["njiva"] = { ["descriptions"] = {"The Gniva dialect of Resian", "The Njiva dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["nulik"] = { ["descriptions"] = {"Volapük nulik", "Volapük perevidöl", "Volapük nulädik", "de Jong's Volapük", "New Volapük", "Revised Volapük", "Modern Volapük"}, ["prefixes"] = {"vo"}, }, ["osojs"] = { ["descriptions"] = {"The Oseacco dialect of Resian", "The Osojane dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["oxendict"] = { ["descriptions"] = {"Oxford English Dictionary spelling"}, ["prefixes"] = {"en"}, }, ["pahawh2"] = { ["descriptions"] = {"Pahawh Hmong Second Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh3"] = { ["descriptions"] = {"Pahawh Hmong Third Stage Reduced orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pahawh4"] = { ["descriptions"] = {"Pahawh Hmong Final Version orthography"}, ["prefixes"] = {"mww", "hnj"}, }, ["pamaka"] = { ["descriptions"] = {"Pamaka dialect"}, ["prefixes"] = {"djk"}, }, ["peano"] = { ["descriptions"] = {"Latino Sine Flexione", "Interlingua de API", "Interlingua de Peano"}, ["prefixes"] = {"la"}, }, ["petr1708"] = { ["descriptions"] = {"Petrine orthography"}, ["prefixes"] = {"ru"}, }, ["pinyin"] = { ["descriptions"] = {"Pinyin romanization"}, ["prefixes"] = {"zh-latn", "bo-latn"}, }, ["polyton"] = { ["descriptions"] = {"Polytonic Greek"}, ["prefixes"] = {"el"}, }, ["provenc"] = { ["descriptions"] = {"Provençal"}, ["prefixes"] = {"oc"}, }, ["puter"] = { ["descriptions"] = {"Puter idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["rigik"] = { ["descriptions"] = {"Volapük rigik", "Schleyer's Volapük", "Original Volapük", "Classic Volapük"}, ["prefixes"] = {"vo"}, }, ["rozaj"] = { ["descriptions"] = {"Resian", "Resianic", "Rezijan"}, ["prefixes"] = {"sl"}, }, ["rumgr"] = { ["descriptions"] = {"Rumantsch Grischun"}, ["prefixes"] = {"rm"}, }, ["scotland"] = { ["descriptions"] = {"Scottish Standard English"}, ["prefixes"] = {"en"}, }, ["scouse"] = { ["descriptions"] = {"Scouse"}, ["prefixes"] = {"en"}, }, ["simple"] = { ["descriptions"] = {"Simplified form"}, ["prefixes"] = {}, }, ["solba"] = { ["descriptions"] = {"The Stolvizza dialect of Resian", "The Solbica dialect of Resian"}, ["prefixes"] = {"sl-rozaj"}, }, ["sotav"] = { ["descriptions"] = {"The Sotavento dialect group of Kabuverdianu"}, ["prefixes"] = {"kea"}, }, ["spanglis"] = { ["descriptions"] = {"Spanglish"}, ["prefixes"] = {"en", "es"}, }, ["surmiran"] = { ["descriptions"] = {"Surmiran idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sursilv"] = { ["descriptions"] = {"Sursilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["sutsilv"] = { ["descriptions"] = {"Sutsilvan idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["synnejyl"] = { ["descriptions"] = {"Synnejysk", "South Jutish"}, ["prefixes"] = {"da"}, }, ["tarask"] = { ["descriptions"] = {"Belarusian in Taraskievica orthography"}, ["prefixes"] = {"be"}, }, ["tongyong"] = { ["descriptions"] = {"Tongyong Pinyin romanization"}, ["prefixes"] = {"zh-latn"}, }, ["tunumiit"] = { ["descriptions"] = {"Tunumiisiut", "East Greenlandic", "Østgrønlandsk"}, ["prefixes"] = {"kl"}, }, ["uccor"] = { ["descriptions"] = {"Unified Cornish orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ucrcor"] = { ["descriptions"] = {"Unified Cornish Revised orthography of Revived Cornish"}, ["prefixes"] = {"kw"}, }, ["ulster"] = { ["descriptions"] = {"Ulster dialect of Scots"}, ["prefixes"] = {"sco"}, }, ["unifon"] = { ["descriptions"] = {"Unifon phonetic alphabet"}, ["prefixes"] = {"en", "hup", "kyh", "tol", "yur"}, }, ["vaidika"] = { ["descriptions"] = {"Vedic Sanskrit"}, ["prefixes"] = {"sa"}, }, ["valencia"] = { ["descriptions"] = {"Valencian"}, ["prefixes"] = {"ca"}, }, ["vallader"] = { ["descriptions"] = {"Vallader idiom of Romansh"}, ["prefixes"] = {"rm"}, }, ["vecdruka"] = { ["descriptions"] = {"Latvian orthography used before 1920s (\"vecā druka\")"}, ["prefixes"] = {"lv"}, }, ["vivaraup"] = { ["descriptions"] = {"Vivaro-Alpine"}, ["prefixes"] = {"oc"}, }, ["wadegile"] = { ["descriptions"] = {"Wade-Giles romanization"}, ["prefixes"] = {"zh-latn"}, }, ["xsistemo"] = { ["descriptions"] = {"Standard X-system orthographic fallback for spelling Esperanto"}, ["prefixes"] = {"eo"}, } } 6e18c8087ecffb70ab2722634deb5ede2d84fffa Module:Language/data/iana suppressed scripts 828 244 713 712 2023-06-06T18:16:30Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Language/data/iana_suppressed_scripts]]: w Scribunto text/plain -- File-Date: 2023-05-11 return { ["Arab"] = {"ar", "fa", "ps", "ur"}, ["Armn"] = {"hy"}, ["Beng"] = {"as", "bn"}, ["Blis"] = {"zbl"}, ["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"}, ["Deva"] = {"hi", "mr", "ne", "kok", "mai"}, ["Ethi"] = {"am", "ti"}, ["Geor"] = {"ka"}, ["Grek"] = {"el"}, ["Gujr"] = {"gu"}, ["Guru"] = {"pa"}, ["Hebr"] = {"he", "iw", "yi"}, ["Jpan"] = {"ja"}, ["Khmr"] = {"km"}, ["Knda"] = {"kn"}, ["Kore"] = {"ko"}, ["Laoo"] = {"lo"}, ["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo", "es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn", "gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb", "ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd", "nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn", "ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv", "sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb", "frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh", "tpi", "tvl"}, ["Mlym"] = {"ml"}, ["Mymr"] = {"my"}, ["Nkoo"] = {"nqo"}, ["Orya"] = {"or"}, ["Sinh"] = {"si"}, ["Taml"] = {"ta"}, ["Telu"] = {"te"}, ["Thaa"] = {"dv"}, ["Thai"] = {"th"}, ["Tibt"] = {"dz"} } fd9ca3f5beaba5fdfc149a8d24e63fa3a9768f4f Module:Lang/ISO 639 synonyms 828 245 715 714 2023-06-06T18:16:31Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Lang/ISO_639_synonyms]]: w Scribunto text/plain -- File-Date: 2013-01-11 return { ["aar"] = "aa", ["abk"] = "ab", ["afr"] = "af", ["aka"] = "ak", ["amh"] = "am", ["ara"] = "ar", ["arg"] = "an", ["asm"] = "as", ["ava"] = "av", ["ave"] = "ae", ["aym"] = "ay", ["aze"] = "az", ["bak"] = "ba", ["bam"] = "bm", ["bel"] = "be", ["ben"] = "bn", ["bih"] = "bh", ["bis"] = "bi", ["bod"] = "bo", ["bos"] = "bs", ["bre"] = "br", ["bul"] = "bg", ["cat"] = "ca", ["ces"] = "cs", ["cha"] = "ch", ["che"] = "ce", ["chu"] = "cu", ["chv"] = "cv", ["cor"] = "kw", ["cos"] = "co", ["cre"] = "cr", ["cym"] = "cy", ["dan"] = "da", ["deu"] = "de", ["div"] = "dv", ["dzo"] = "dz", ["ell"] = "el", ["eng"] = "en", ["epo"] = "eo", ["est"] = "et", ["eus"] = "eu", ["ewe"] = "ee", ["fao"] = "fo", ["fas"] = "fa", ["fij"] = "fj", ["fin"] = "fi", ["fra"] = "fr", ["fry"] = "fy", ["ful"] = "ff", ["gla"] = "gd", ["gle"] = "ga", ["glg"] = "gl", ["glv"] = "gv", ["grn"] = "gn", ["guj"] = "gu", ["hat"] = "ht", ["hau"] = "ha", ["heb"] = "he", ["her"] = "hz", ["hin"] = "hi", ["hmo"] = "ho", ["hrv"] = "hr", ["hun"] = "hu", ["hye"] = "hy", ["ibo"] = "ig", ["ido"] = "io", ["iii"] = "ii", ["iku"] = "iu", ["ile"] = "ie", ["ina"] = "ia", ["ind"] = "id", ["ipk"] = "ik", ["isl"] = "is", ["ita"] = "it", ["jav"] = "jv", ["jpn"] = "ja", ["kal"] = "kl", ["kan"] = "kn", ["kas"] = "ks", ["kat"] = "ka", ["kau"] = "kr", ["kaz"] = "kk", ["khm"] = "km", ["kik"] = "ki", ["kin"] = "rw", ["kir"] = "ky", ["kom"] = "kv", ["kon"] = "kg", ["kor"] = "ko", ["kua"] = "kj", ["kur"] = "ku", ["lao"] = "lo", ["lat"] = "la", ["lav"] = "lv", ["lim"] = "li", ["lin"] = "ln", ["lit"] = "lt", ["ltz"] = "lb", ["lub"] = "lu", ["lug"] = "lg", ["mah"] = "mh", ["mal"] = "ml", ["mar"] = "mr", ["mkd"] = "mk", ["mlg"] = "mg", ["mlt"] = "mt", ["mon"] = "mn", ["mri"] = "mi", ["msa"] = "ms", ["mya"] = "my", ["nau"] = "na", ["nav"] = "nv", ["nbl"] = "nr", ["nde"] = "nd", ["ndo"] = "ng", ["nep"] = "ne", ["nld"] = "nl", ["nno"] = "nn", ["nob"] = "nb", ["nor"] = "no", ["nya"] = "ny", ["oci"] = "oc", ["oji"] = "oj", ["ori"] = "or", ["orm"] = "om", ["oss"] = "os", ["pan"] = "pa", ["pli"] = "pi", ["pol"] = "pl", ["por"] = "pt", ["pus"] = "ps", ["que"] = "qu", ["roh"] = "rm", ["ron"] = "ro", ["run"] = "rn", ["rus"] = "ru", ["sag"] = "sg", ["san"] = "sa", ["sin"] = "si", ["slk"] = "sk", ["slv"] = "sl", ["sme"] = "se", ["smo"] = "sm", ["sna"] = "sn", ["snd"] = "sd", ["som"] = "so", ["sot"] = "st", ["spa"] = "es", ["sqi"] = "sq", ["srd"] = "sc", ["srp"] = "sr", ["ssw"] = "ss", ["sun"] = "su", ["swa"] = "sw", ["swe"] = "sv", ["tah"] = "ty", ["tam"] = "ta", ["tat"] = "tt", ["tel"] = "te", ["tgk"] = "tg", ["tgl"] = "tl", ["tha"] = "th", ["tir"] = "ti", ["ton"] = "to", ["tsn"] = "tn", ["tso"] = "ts", ["tuk"] = "tk", ["tur"] = "tr", ["twi"] = "tw", ["uig"] = "ug", ["ukr"] = "uk", ["urd"] = "ur", ["uzb"] = "uz", ["ven"] = "ve", ["vie"] = "vi", ["vol"] = "vo", ["wln"] = "wa", ["wol"] = "wo", ["xho"] = "xh", ["yid"] = "yi", ["yor"] = "yo", ["zha"] = "za", ["zho"] = "zh", ["zul"] = "zu" } f3fb5374c9e0fdef6ce6ea22736b79468358ca19 Template:Mbox 10 246 717 716 2023-06-06T18:16:32Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Mbox]]: w wikitext text/x-wiki {{#invoke:Message box|mbox}}<noinclude> {{documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 5bfb2becf8bed35974b47e3ff8660dc14bee40c7 Template:Lang 10 247 719 718 2023-06-06T18:16:37Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Lang]]: w wikitext text/x-wiki <includeonly>{{#invoke:Lang|{{{fn|lang}}}}}</includeonly><noinclude> {{Documentation}} </noinclude> ed35aafbfe8198c5ad80fd861124244d0c7f2742 Module:Exponential search 828 248 721 720 2023-06-06T18:16:38Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Exponential_search]]: w Scribunto text/plain -- This module provides a generic exponential search algorithm. require[[strict]] local checkType = require('libraryUtil').checkType local floor = math.floor local function midPoint(lower, upper) return floor(lower + (upper - lower) / 2) end local function search(testFunc, i, lower, upper) if testFunc(i) then if i + 1 == upper then return i end lower = i if upper then i = midPoint(lower, upper) else i = i * 2 end return search(testFunc, i, lower, upper) else upper = i i = midPoint(lower, upper) return search(testFunc, i, lower, upper) end end return function (testFunc, init) checkType('Exponential search', 1, testFunc, 'function') checkType('Exponential search', 2, init, 'number', true) if init and (init < 1 or init ~= floor(init) or init == math.huge) then error(string.format( "invalid init value '%s' detected in argument #2 to " .. "'Exponential search' (init value must be a positive integer)", tostring(init) ), 2) end init = init or 2 if not testFunc(1) then return nil end return search(testFunc, init, 1, nil) end a9037be0c44536be79b2d7a26155bfb907368ae7 Module:Unicode data/scripts 828 249 723 722 2023-06-06T18:16:42Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Unicode_data/scripts]]: w Scribunto text/plain --[=[ -- Official Unicode script values for individual codepoints and ranges of -- codepoints. -- https://www.unicode.org/Public/UNIDATA/Scripts.txt provided -- the script names, and https://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt -- provided script codes corresponding to the names (see [[Script (Unicode)]]). --]=] local data = { singles = { [0x000AA] = "Latn", [0x000BA] = "Latn", [0x000D7] = "Zyyy", [0x000F7] = "Zyyy", [0x00374] = "Zyyy", [0x0037E] = "Zyyy", [0x0037F] = "Grek", [0x00384] = "Grek", [0x00385] = "Zyyy", [0x00386] = "Grek", [0x00387] = "Zyyy", [0x0038C] = "Grek", [0x00605] = "Zyyy", [0x0060C] = "Zyyy", [0x0061B] = "Zyyy", [0x0061F] = "Zyyy", [0x00640] = "Zyyy", [0x00670] = "Zinh", [0x006DD] = "Zyyy", [0x0085E] = "Mand", [0x008E2] = "Zyyy", [0x009B2] = "Beng", [0x009D7] = "Beng", [0x00A3C] = "Guru", [0x00A51] = "Guru", [0x00A5E] = "Guru", [0x00AD0] = "Gujr", [0x00B9C] = "Taml", [0x00BD0] = "Taml", [0x00BD7] = "Taml", [0x00C5D] = "Telu", [0x00DBD] = "Sinh", [0x00DCA] = "Sinh", [0x00DD6] = "Sinh", [0x00E3F] = "Zyyy", [0x00E84] = "Laoo", [0x00EA5] = "Laoo", [0x00EC6] = "Laoo", [0x010C7] = "Geor", [0x010CD] = "Geor", [0x010FB] = "Zyyy", [0x01258] = "Ethi", [0x012C0] = "Ethi", [0x0171F] = "Tglg", [0x01804] = "Mong", [0x01805] = "Zyyy", [0x01940] = "Limb", [0x01CD3] = "Zyyy", [0x01CE1] = "Zyyy", [0x01CED] = "Zinh", [0x01CF4] = "Zinh", [0x01CFA] = "Zyyy", [0x01D2B] = "Cyrl", [0x01D78] = "Cyrl", [0x01DBF] = "Grek", [0x01F59] = "Grek", [0x01F5B] = "Grek", [0x01F5D] = "Grek", [0x02071] = "Latn", [0x0207F] = "Latn", [0x02126] = "Grek", [0x02132] = "Latn", [0x0214E] = "Latn", [0x02D27] = "Geor", [0x02D2D] = "Geor", [0x02D7F] = "Tfng", [0x03005] = "Hani", [0x03006] = "Zyyy", [0x03007] = "Hani", [0x030A0] = "Zyyy", [0x032FF] = "Zyyy", [0x0A7D3] = "Latn", [0x0A92E] = "Zyyy", [0x0A92F] = "Kali", [0x0A95F] = "Rjng", [0x0A9CF] = "Zyyy", [0x0AB5B] = "Zyyy", [0x0AB65] = "Grek", [0x0FB3E] = "Hebr", [0x0FDCF] = "Arab", [0x0FEFF] = "Zyyy", [0x0FF70] = "Zyyy", [0x101A0] = "Grek", [0x101FD] = "Zinh", [0x102E0] = "Zinh", [0x1039F] = "Ugar", [0x1056F] = "Aghb", [0x10808] = "Cprt", [0x1083C] = "Cprt", [0x1083F] = "Cprt", [0x1091F] = "Phnx", [0x1093F] = "Lydi", [0x1107F] = "Brah", [0x110CD] = "Kthi", [0x11288] = "Mult", [0x1133B] = "Zinh", [0x11350] = "Gran", [0x11357] = "Gran", [0x118FF] = "Wara", [0x11909] = "Diak", [0x11D3A] = "Gonm", [0x11FB0] = "Lisu", [0x11FFF] = "Taml", [0x16FE0] = "Tang", [0x16FE1] = "Nshu", [0x16FE4] = "Kits", [0x1B000] = "Kana", [0x1B132] = "Hira", [0x1B155] = "Kana", [0x1D4A2] = "Zyyy", [0x1D4BB] = "Zyyy", [0x1D546] = "Zyyy", [0x1E08F] = "Cyrl", [0x1E2FF] = "Wcho", [0x1EE24] = "Arab", [0x1EE27] = "Arab", [0x1EE39] = "Arab", [0x1EE3B] = "Arab", [0x1EE42] = "Arab", [0x1EE47] = "Arab", [0x1EE49] = "Arab", [0x1EE4B] = "Arab", [0x1EE54] = "Arab", [0x1EE57] = "Arab", [0x1EE59] = "Arab", [0x1EE5B] = "Arab", [0x1EE5D] = "Arab", [0x1EE5F] = "Arab", [0x1EE64] = "Arab", [0x1EE7E] = "Arab", [0x1F200] = "Hira", [0x1F7F0] = "Zyyy", [0xE0001] = "Zyyy", }, ranges = { { 0x00000, 0x00040, "Zyyy" }, { 0x00041, 0x0005A, "Latn" }, { 0x0005B, 0x00060, "Zyyy" }, { 0x00061, 0x0007A, "Latn" }, { 0x0007B, 0x000A9, "Zyyy" }, { 0x000AB, 0x000B9, "Zyyy" }, { 0x000BB, 0x000BF, "Zyyy" }, { 0x000C0, 0x000D6, "Latn" }, { 0x000D8, 0x000F6, "Latn" }, { 0x000F8, 0x002B8, "Latn" }, { 0x002B9, 0x002DF, "Zyyy" }, { 0x002E0, 0x002E4, "Latn" }, { 0x002E5, 0x002E9, "Zyyy" }, { 0x002EA, 0x002EB, "Bopo" }, { 0x002EC, 0x002FF, "Zyyy" }, { 0x00300, 0x0036F, "Zinh" }, { 0x00370, 0x00373, "Grek" }, { 0x00375, 0x00377, "Grek" }, { 0x0037A, 0x0037D, "Grek" }, { 0x00388, 0x0038A, "Grek" }, { 0x0038E, 0x003A1, "Grek" }, { 0x003A3, 0x003E1, "Grek" }, { 0x003E2, 0x003EF, "Copt" }, { 0x003F0, 0x003FF, "Grek" }, { 0x00400, 0x00484, "Cyrl" }, { 0x00485, 0x00486, "Zinh" }, { 0x00487, 0x0052F, "Cyrl" }, { 0x00531, 0x00556, "Armn" }, { 0x00559, 0x0058A, "Armn" }, { 0x0058D, 0x0058F, "Armn" }, { 0x00591, 0x005C7, "Hebr" }, { 0x005D0, 0x005EA, "Hebr" }, { 0x005EF, 0x005F4, "Hebr" }, { 0x00600, 0x00604, "Arab" }, { 0x00606, 0x0060B, "Arab" }, { 0x0060D, 0x0061A, "Arab" }, { 0x0061C, 0x0061E, "Arab" }, { 0x00620, 0x0063F, "Arab" }, { 0x00641, 0x0064A, "Arab" }, { 0x0064B, 0x00655, "Zinh" }, { 0x00656, 0x0066F, "Arab" }, { 0x00671, 0x006DC, "Arab" }, { 0x006DE, 0x006FF, "Arab" }, { 0x00700, 0x0070D, "Syrc" }, { 0x0070F, 0x0074A, "Syrc" }, { 0x0074D, 0x0074F, "Syrc" }, { 0x00750, 0x0077F, "Arab" }, { 0x00780, 0x007B1, "Thaa" }, { 0x007C0, 0x007FA, "Nkoo" }, { 0x007FD, 0x007FF, "Nkoo" }, { 0x00800, 0x0082D, "Samr" }, { 0x00830, 0x0083E, "Samr" }, { 0x00840, 0x0085B, "Mand" }, { 0x00860, 0x0086A, "Syrc" }, { 0x00870, 0x0088E, "Arab" }, { 0x00890, 0x00891, "Arab" }, { 0x00898, 0x008E1, "Arab" }, { 0x008E3, 0x008FF, "Arab" }, { 0x00900, 0x00950, "Deva" }, { 0x00951, 0x00954, "Zinh" }, { 0x00955, 0x00963, "Deva" }, { 0x00964, 0x00965, "Zyyy" }, { 0x00966, 0x0097F, "Deva" }, { 0x00980, 0x00983, "Beng" }, { 0x00985, 0x0098C, "Beng" }, { 0x0098F, 0x00990, "Beng" }, { 0x00993, 0x009A8, "Beng" }, { 0x009AA, 0x009B0, "Beng" }, { 0x009B6, 0x009B9, "Beng" }, { 0x009BC, 0x009C4, "Beng" }, { 0x009C7, 0x009C8, "Beng" }, { 0x009CB, 0x009CE, "Beng" }, { 0x009DC, 0x009DD, "Beng" }, { 0x009DF, 0x009E3, "Beng" }, { 0x009E6, 0x009FE, "Beng" }, { 0x00A01, 0x00A03, "Guru" }, { 0x00A05, 0x00A0A, "Guru" }, { 0x00A0F, 0x00A10, "Guru" }, { 0x00A13, 0x00A28, "Guru" }, { 0x00A2A, 0x00A30, "Guru" }, { 0x00A32, 0x00A33, "Guru" }, { 0x00A35, 0x00A36, "Guru" }, { 0x00A38, 0x00A39, "Guru" }, { 0x00A3E, 0x00A42, "Guru" }, { 0x00A47, 0x00A48, "Guru" }, { 0x00A4B, 0x00A4D, "Guru" }, { 0x00A59, 0x00A5C, "Guru" }, { 0x00A66, 0x00A76, "Guru" }, { 0x00A81, 0x00A83, "Gujr" }, { 0x00A85, 0x00A8D, "Gujr" }, { 0x00A8F, 0x00A91, "Gujr" }, { 0x00A93, 0x00AA8, "Gujr" }, { 0x00AAA, 0x00AB0, "Gujr" }, { 0x00AB2, 0x00AB3, "Gujr" }, { 0x00AB5, 0x00AB9, "Gujr" }, { 0x00ABC, 0x00AC5, "Gujr" }, { 0x00AC7, 0x00AC9, "Gujr" }, { 0x00ACB, 0x00ACD, "Gujr" }, { 0x00AE0, 0x00AE3, "Gujr" }, { 0x00AE6, 0x00AF1, "Gujr" }, { 0x00AF9, 0x00AFF, "Gujr" }, { 0x00B01, 0x00B03, "Orya" }, { 0x00B05, 0x00B0C, "Orya" }, { 0x00B0F, 0x00B10, "Orya" }, { 0x00B13, 0x00B28, "Orya" }, { 0x00B2A, 0x00B30, "Orya" }, { 0x00B32, 0x00B33, "Orya" }, { 0x00B35, 0x00B39, "Orya" }, { 0x00B3C, 0x00B44, "Orya" }, { 0x00B47, 0x00B48, "Orya" }, { 0x00B4B, 0x00B4D, "Orya" }, { 0x00B55, 0x00B57, "Orya" }, { 0x00B5C, 0x00B5D, "Orya" }, { 0x00B5F, 0x00B63, "Orya" }, { 0x00B66, 0x00B77, "Orya" }, { 0x00B82, 0x00B83, "Taml" }, { 0x00B85, 0x00B8A, "Taml" }, { 0x00B8E, 0x00B90, "Taml" }, { 0x00B92, 0x00B95, "Taml" }, { 0x00B99, 0x00B9A, "Taml" }, { 0x00B9E, 0x00B9F, "Taml" }, { 0x00BA3, 0x00BA4, "Taml" }, { 0x00BA8, 0x00BAA, "Taml" }, { 0x00BAE, 0x00BB9, "Taml" }, { 0x00BBE, 0x00BC2, "Taml" }, { 0x00BC6, 0x00BC8, "Taml" }, { 0x00BCA, 0x00BCD, "Taml" }, { 0x00BE6, 0x00BFA, "Taml" }, { 0x00C00, 0x00C0C, "Telu" }, { 0x00C0E, 0x00C10, "Telu" }, { 0x00C12, 0x00C28, "Telu" }, { 0x00C2A, 0x00C39, "Telu" }, { 0x00C3C, 0x00C44, "Telu" }, { 0x00C46, 0x00C48, "Telu" }, { 0x00C4A, 0x00C4D, "Telu" }, { 0x00C55, 0x00C56, "Telu" }, { 0x00C58, 0x00C5A, "Telu" }, { 0x00C60, 0x00C63, "Telu" }, { 0x00C66, 0x00C6F, "Telu" }, { 0x00C77, 0x00C7F, "Telu" }, { 0x00C80, 0x00C8C, "Knda" }, { 0x00C8E, 0x00C90, "Knda" }, { 0x00C92, 0x00CA8, "Knda" }, { 0x00CAA, 0x00CB3, "Knda" }, { 0x00CB5, 0x00CB9, "Knda" }, { 0x00CBC, 0x00CC4, "Knda" }, { 0x00CC6, 0x00CC8, "Knda" }, { 0x00CCA, 0x00CCD, "Knda" }, { 0x00CD5, 0x00CD6, "Knda" }, { 0x00CDD, 0x00CDE, "Knda" }, { 0x00CE0, 0x00CE3, "Knda" }, { 0x00CE6, 0x00CEF, "Knda" }, { 0x00CF1, 0x00CF3, "Knda" }, { 0x00D00, 0x00D0C, "Mlym" }, { 0x00D0E, 0x00D10, "Mlym" }, { 0x00D12, 0x00D44, "Mlym" }, { 0x00D46, 0x00D48, "Mlym" }, { 0x00D4A, 0x00D4F, "Mlym" }, { 0x00D54, 0x00D63, "Mlym" }, { 0x00D66, 0x00D7F, "Mlym" }, { 0x00D81, 0x00D83, "Sinh" }, { 0x00D85, 0x00D96, "Sinh" }, { 0x00D9A, 0x00DB1, "Sinh" }, { 0x00DB3, 0x00DBB, "Sinh" }, { 0x00DC0, 0x00DC6, "Sinh" }, { 0x00DCF, 0x00DD4, "Sinh" }, { 0x00DD8, 0x00DDF, "Sinh" }, { 0x00DE6, 0x00DEF, "Sinh" }, { 0x00DF2, 0x00DF4, "Sinh" }, { 0x00E01, 0x00E3A, "Thai" }, { 0x00E40, 0x00E5B, "Thai" }, { 0x00E81, 0x00E82, "Laoo" }, { 0x00E86, 0x00E8A, "Laoo" }, { 0x00E8C, 0x00EA3, "Laoo" }, { 0x00EA7, 0x00EBD, "Laoo" }, { 0x00EC0, 0x00EC4, "Laoo" }, { 0x00EC8, 0x00ECE, "Laoo" }, { 0x00ED0, 0x00ED9, "Laoo" }, { 0x00EDC, 0x00EDF, "Laoo" }, { 0x00F00, 0x00F47, "Tibt" }, { 0x00F49, 0x00F6C, "Tibt" }, { 0x00F71, 0x00F97, "Tibt" }, { 0x00F99, 0x00FBC, "Tibt" }, { 0x00FBE, 0x00FCC, "Tibt" }, { 0x00FCE, 0x00FD4, "Tibt" }, { 0x00FD5, 0x00FD8, "Zyyy" }, { 0x00FD9, 0x00FDA, "Tibt" }, { 0x01000, 0x0109F, "Mymr" }, { 0x010A0, 0x010C5, "Geor" }, { 0x010D0, 0x010FA, "Geor" }, { 0x010FC, 0x010FF, "Geor" }, { 0x01100, 0x011FF, "Hang" }, { 0x01200, 0x01248, "Ethi" }, { 0x0124A, 0x0124D, "Ethi" }, { 0x01250, 0x01256, "Ethi" }, { 0x0125A, 0x0125D, "Ethi" }, { 0x01260, 0x01288, "Ethi" }, { 0x0128A, 0x0128D, "Ethi" }, { 0x01290, 0x012B0, "Ethi" }, { 0x012B2, 0x012B5, "Ethi" }, { 0x012B8, 0x012BE, "Ethi" }, { 0x012C2, 0x012C5, "Ethi" }, { 0x012C8, 0x012D6, "Ethi" }, { 0x012D8, 0x01310, "Ethi" }, { 0x01312, 0x01315, "Ethi" }, { 0x01318, 0x0135A, "Ethi" }, { 0x0135D, 0x0137C, "Ethi" }, { 0x01380, 0x01399, "Ethi" }, { 0x013A0, 0x013F5, "Cher" }, { 0x013F8, 0x013FD, "Cher" }, { 0x01400, 0x0167F, "Cans" }, { 0x01680, 0x0169C, "Ogam" }, { 0x016A0, 0x016EA, "Runr" }, { 0x016EB, 0x016ED, "Zyyy" }, { 0x016EE, 0x016F8, "Runr" }, { 0x01700, 0x01715, "Tglg" }, { 0x01720, 0x01734, "Hano" }, { 0x01735, 0x01736, "Zyyy" }, { 0x01740, 0x01753, "Buhd" }, { 0x01760, 0x0176C, "Tagb" }, { 0x0176E, 0x01770, "Tagb" }, { 0x01772, 0x01773, "Tagb" }, { 0x01780, 0x017DD, "Khmr" }, { 0x017E0, 0x017E9, "Khmr" }, { 0x017F0, 0x017F9, "Khmr" }, { 0x01800, 0x01801, "Mong" }, { 0x01802, 0x01803, "Zyyy" }, { 0x01806, 0x01819, "Mong" }, { 0x01820, 0x01878, "Mong" }, { 0x01880, 0x018AA, "Mong" }, { 0x018B0, 0x018F5, "Cans" }, { 0x01900, 0x0191E, "Limb" }, { 0x01920, 0x0192B, "Limb" }, { 0x01930, 0x0193B, "Limb" }, { 0x01944, 0x0194F, "Limb" }, { 0x01950, 0x0196D, "Tale" }, { 0x01970, 0x01974, "Tale" }, { 0x01980, 0x019AB, "Talu" }, { 0x019B0, 0x019C9, "Talu" }, { 0x019D0, 0x019DA, "Talu" }, { 0x019DE, 0x019DF, "Talu" }, { 0x019E0, 0x019FF, "Khmr" }, { 0x01A00, 0x01A1B, "Bugi" }, { 0x01A1E, 0x01A1F, "Bugi" }, { 0x01A20, 0x01A5E, "Lana" }, { 0x01A60, 0x01A7C, "Lana" }, { 0x01A7F, 0x01A89, "Lana" }, { 0x01A90, 0x01A99, "Lana" }, { 0x01AA0, 0x01AAD, "Lana" }, { 0x01AB0, 0x01ACE, "Zinh" }, { 0x01B00, 0x01B4C, "Bali" }, { 0x01B50, 0x01B7E, "Bali" }, { 0x01B80, 0x01BBF, "Sund" }, { 0x01BC0, 0x01BF3, "Batk" }, { 0x01BFC, 0x01BFF, "Batk" }, { 0x01C00, 0x01C37, "Lepc" }, { 0x01C3B, 0x01C49, "Lepc" }, { 0x01C4D, 0x01C4F, "Lepc" }, { 0x01C50, 0x01C7F, "Olck" }, { 0x01C80, 0x01C88, "Cyrl" }, { 0x01C90, 0x01CBA, "Geor" }, { 0x01CBD, 0x01CBF, "Geor" }, { 0x01CC0, 0x01CC7, "Sund" }, { 0x01CD0, 0x01CD2, "Zinh" }, { 0x01CD4, 0x01CE0, "Zinh" }, { 0x01CE2, 0x01CE8, "Zinh" }, { 0x01CE9, 0x01CEC, "Zyyy" }, { 0x01CEE, 0x01CF3, "Zyyy" }, { 0x01CF5, 0x01CF7, "Zyyy" }, { 0x01CF8, 0x01CF9, "Zinh" }, { 0x01D00, 0x01D25, "Latn" }, { 0x01D26, 0x01D2A, "Grek" }, { 0x01D2C, 0x01D5C, "Latn" }, { 0x01D5D, 0x01D61, "Grek" }, { 0x01D62, 0x01D65, "Latn" }, { 0x01D66, 0x01D6A, "Grek" }, { 0x01D6B, 0x01D77, "Latn" }, { 0x01D79, 0x01DBE, "Latn" }, { 0x01DC0, 0x01DFF, "Zinh" }, { 0x01E00, 0x01EFF, "Latn" }, { 0x01F00, 0x01F15, "Grek" }, { 0x01F18, 0x01F1D, "Grek" }, { 0x01F20, 0x01F45, "Grek" }, { 0x01F48, 0x01F4D, "Grek" }, { 0x01F50, 0x01F57, "Grek" }, { 0x01F5F, 0x01F7D, "Grek" }, { 0x01F80, 0x01FB4, "Grek" }, { 0x01FB6, 0x01FC4, "Grek" }, { 0x01FC6, 0x01FD3, "Grek" }, { 0x01FD6, 0x01FDB, "Grek" }, { 0x01FDD, 0x01FEF, "Grek" }, { 0x01FF2, 0x01FF4, "Grek" }, { 0x01FF6, 0x01FFE, "Grek" }, { 0x02000, 0x0200B, "Zyyy" }, { 0x0200C, 0x0200D, "Zinh" }, { 0x0200E, 0x02064, "Zyyy" }, { 0x02066, 0x02070, "Zyyy" }, { 0x02074, 0x0207E, "Zyyy" }, { 0x02080, 0x0208E, "Zyyy" }, { 0x02090, 0x0209C, "Latn" }, { 0x020A0, 0x020C0, "Zyyy" }, { 0x020D0, 0x020F0, "Zinh" }, { 0x02100, 0x02125, "Zyyy" }, { 0x02127, 0x02129, "Zyyy" }, { 0x0212A, 0x0212B, "Latn" }, { 0x0212C, 0x02131, "Zyyy" }, { 0x02133, 0x0214D, "Zyyy" }, { 0x0214F, 0x0215F, "Zyyy" }, { 0x02160, 0x02188, "Latn" }, { 0x02189, 0x0218B, "Zyyy" }, { 0x02190, 0x02426, "Zyyy" }, { 0x02440, 0x0244A, "Zyyy" }, { 0x02460, 0x027FF, "Zyyy" }, { 0x02800, 0x028FF, "Brai" }, { 0x02900, 0x02B73, "Zyyy" }, { 0x02B76, 0x02B95, "Zyyy" }, { 0x02B97, 0x02BFF, "Zyyy" }, { 0x02C00, 0x02C5F, "Glag" }, { 0x02C60, 0x02C7F, "Latn" }, { 0x02C80, 0x02CF3, "Copt" }, { 0x02CF9, 0x02CFF, "Copt" }, { 0x02D00, 0x02D25, "Geor" }, { 0x02D30, 0x02D67, "Tfng" }, { 0x02D6F, 0x02D70, "Tfng" }, { 0x02D80, 0x02D96, "Ethi" }, { 0x02DA0, 0x02DA6, "Ethi" }, { 0x02DA8, 0x02DAE, "Ethi" }, { 0x02DB0, 0x02DB6, "Ethi" }, { 0x02DB8, 0x02DBE, "Ethi" }, { 0x02DC0, 0x02DC6, "Ethi" }, { 0x02DC8, 0x02DCE, "Ethi" }, { 0x02DD0, 0x02DD6, "Ethi" }, { 0x02DD8, 0x02DDE, "Ethi" }, { 0x02DE0, 0x02DFF, "Cyrl" }, { 0x02E00, 0x02E5D, "Zyyy" }, { 0x02E80, 0x02E99, "Hani" }, { 0x02E9B, 0x02EF3, "Hani" }, { 0x02F00, 0x02FD5, "Hani" }, { 0x02FF0, 0x02FFB, "Zyyy" }, { 0x03000, 0x03004, "Zyyy" }, { 0x03008, 0x03020, "Zyyy" }, { 0x03021, 0x03029, "Hani" }, { 0x0302A, 0x0302D, "Zinh" }, { 0x0302E, 0x0302F, "Hang" }, { 0x03030, 0x03037, "Zyyy" }, { 0x03038, 0x0303B, "Hani" }, { 0x0303C, 0x0303F, "Zyyy" }, { 0x03041, 0x03096, "Hira" }, { 0x03099, 0x0309A, "Zinh" }, { 0x0309B, 0x0309C, "Zyyy" }, { 0x0309D, 0x0309F, "Hira" }, { 0x030A1, 0x030FA, "Kana" }, { 0x030FB, 0x030FC, "Zyyy" }, { 0x030FD, 0x030FF, "Kana" }, { 0x03105, 0x0312F, "Bopo" }, { 0x03131, 0x0318E, "Hang" }, { 0x03190, 0x0319F, "Zyyy" }, { 0x031A0, 0x031BF, "Bopo" }, { 0x031C0, 0x031E3, "Zyyy" }, { 0x031F0, 0x031FF, "Kana" }, { 0x03200, 0x0321E, "Hang" }, { 0x03220, 0x0325F, "Zyyy" }, { 0x03260, 0x0327E, "Hang" }, { 0x0327F, 0x032CF, "Zyyy" }, { 0x032D0, 0x032FE, "Kana" }, { 0x03300, 0x03357, "Kana" }, { 0x03358, 0x033FF, "Zyyy" }, { 0x03400, 0x04DBF, "Hani" }, { 0x04DC0, 0x04DFF, "Zyyy" }, { 0x04E00, 0x09FFF, "Hani" }, { 0x0A000, 0x0A48C, "Yiii" }, { 0x0A490, 0x0A4C6, "Yiii" }, { 0x0A4D0, 0x0A4FF, "Lisu" }, { 0x0A500, 0x0A62B, "Vaii" }, { 0x0A640, 0x0A69F, "Cyrl" }, { 0x0A6A0, 0x0A6F7, "Bamu" }, { 0x0A700, 0x0A721, "Zyyy" }, { 0x0A722, 0x0A787, "Latn" }, { 0x0A788, 0x0A78A, "Zyyy" }, { 0x0A78B, 0x0A7CA, "Latn" }, { 0x0A7D0, 0x0A7D1, "Latn" }, { 0x0A7D5, 0x0A7D9, "Latn" }, { 0x0A7F2, 0x0A7FF, "Latn" }, { 0x0A800, 0x0A82C, "Sylo" }, { 0x0A830, 0x0A839, "Zyyy" }, { 0x0A840, 0x0A877, "Phag" }, { 0x0A880, 0x0A8C5, "Saur" }, { 0x0A8CE, 0x0A8D9, "Saur" }, { 0x0A8E0, 0x0A8FF, "Deva" }, { 0x0A900, 0x0A92D, "Kali" }, { 0x0A930, 0x0A953, "Rjng" }, { 0x0A960, 0x0A97C, "Hang" }, { 0x0A980, 0x0A9CD, "Java" }, { 0x0A9D0, 0x0A9D9, "Java" }, { 0x0A9DE, 0x0A9DF, "Java" }, { 0x0A9E0, 0x0A9FE, "Mymr" }, { 0x0AA00, 0x0AA36, "Cham" }, { 0x0AA40, 0x0AA4D, "Cham" }, { 0x0AA50, 0x0AA59, "Cham" }, { 0x0AA5C, 0x0AA5F, "Cham" }, { 0x0AA60, 0x0AA7F, "Mymr" }, { 0x0AA80, 0x0AAC2, "Tavt" }, { 0x0AADB, 0x0AADF, "Tavt" }, { 0x0AAE0, 0x0AAF6, "Mtei" }, { 0x0AB01, 0x0AB06, "Ethi" }, { 0x0AB09, 0x0AB0E, "Ethi" }, { 0x0AB11, 0x0AB16, "Ethi" }, { 0x0AB20, 0x0AB26, "Ethi" }, { 0x0AB28, 0x0AB2E, "Ethi" }, { 0x0AB30, 0x0AB5A, "Latn" }, { 0x0AB5C, 0x0AB64, "Latn" }, { 0x0AB66, 0x0AB69, "Latn" }, { 0x0AB6A, 0x0AB6B, "Zyyy" }, { 0x0AB70, 0x0ABBF, "Cher" }, { 0x0ABC0, 0x0ABED, "Mtei" }, { 0x0ABF0, 0x0ABF9, "Mtei" }, { 0x0AC00, 0x0D7A3, "Hang" }, { 0x0D7B0, 0x0D7C6, "Hang" }, { 0x0D7CB, 0x0D7FB, "Hang" }, { 0x0F900, 0x0FA6D, "Hani" }, { 0x0FA70, 0x0FAD9, "Hani" }, { 0x0FB00, 0x0FB06, "Latn" }, { 0x0FB13, 0x0FB17, "Armn" }, { 0x0FB1D, 0x0FB36, "Hebr" }, { 0x0FB38, 0x0FB3C, "Hebr" }, { 0x0FB40, 0x0FB41, "Hebr" }, { 0x0FB43, 0x0FB44, "Hebr" }, { 0x0FB46, 0x0FB4F, "Hebr" }, { 0x0FB50, 0x0FBC2, "Arab" }, { 0x0FBD3, 0x0FD3D, "Arab" }, { 0x0FD3E, 0x0FD3F, "Zyyy" }, { 0x0FD40, 0x0FD8F, "Arab" }, { 0x0FD92, 0x0FDC7, "Arab" }, { 0x0FDF0, 0x0FDFF, "Arab" }, { 0x0FE00, 0x0FE0F, "Zinh" }, { 0x0FE10, 0x0FE19, "Zyyy" }, { 0x0FE20, 0x0FE2D, "Zinh" }, { 0x0FE2E, 0x0FE2F, "Cyrl" }, { 0x0FE30, 0x0FE52, "Zyyy" }, { 0x0FE54, 0x0FE66, "Zyyy" }, { 0x0FE68, 0x0FE6B, "Zyyy" }, { 0x0FE70, 0x0FE74, "Arab" }, { 0x0FE76, 0x0FEFC, "Arab" }, { 0x0FF01, 0x0FF20, "Zyyy" }, { 0x0FF21, 0x0FF3A, "Latn" }, { 0x0FF3B, 0x0FF40, "Zyyy" }, { 0x0FF41, 0x0FF5A, "Latn" }, { 0x0FF5B, 0x0FF65, "Zyyy" }, { 0x0FF66, 0x0FF6F, "Kana" }, { 0x0FF71, 0x0FF9D, "Kana" }, { 0x0FF9E, 0x0FF9F, "Zyyy" }, { 0x0FFA0, 0x0FFBE, "Hang" }, { 0x0FFC2, 0x0FFC7, "Hang" }, { 0x0FFCA, 0x0FFCF, "Hang" }, { 0x0FFD2, 0x0FFD7, "Hang" }, { 0x0FFDA, 0x0FFDC, "Hang" }, { 0x0FFE0, 0x0FFE6, "Zyyy" }, { 0x0FFE8, 0x0FFEE, "Zyyy" }, { 0x0FFF9, 0x0FFFD, "Zyyy" }, { 0x10000, 0x1000B, "Linb" }, { 0x1000D, 0x10026, "Linb" }, { 0x10028, 0x1003A, "Linb" }, { 0x1003C, 0x1003D, "Linb" }, { 0x1003F, 0x1004D, "Linb" }, { 0x10050, 0x1005D, "Linb" }, { 0x10080, 0x100FA, "Linb" }, { 0x10100, 0x10102, "Zyyy" }, { 0x10107, 0x10133, "Zyyy" }, { 0x10137, 0x1013F, "Zyyy" }, { 0x10140, 0x1018E, "Grek" }, { 0x10190, 0x1019C, "Zyyy" }, { 0x101D0, 0x101FC, "Zyyy" }, { 0x10280, 0x1029C, "Lyci" }, { 0x102A0, 0x102D0, "Cari" }, { 0x102E1, 0x102FB, "Zyyy" }, { 0x10300, 0x10323, "Ital" }, { 0x1032D, 0x1032F, "Ital" }, { 0x10330, 0x1034A, "Goth" }, { 0x10350, 0x1037A, "Perm" }, { 0x10380, 0x1039D, "Ugar" }, { 0x103A0, 0x103C3, "Xpeo" }, { 0x103C8, 0x103D5, "Xpeo" }, { 0x10400, 0x1044F, "Dsrt" }, { 0x10450, 0x1047F, "Shaw" }, { 0x10480, 0x1049D, "Osma" }, { 0x104A0, 0x104A9, "Osma" }, { 0x104B0, 0x104D3, "Osge" }, { 0x104D8, 0x104FB, "Osge" }, { 0x10500, 0x10527, "Elba" }, { 0x10530, 0x10563, "Aghb" }, { 0x10570, 0x1057A, "Vith" }, { 0x1057C, 0x1058A, "Vith" }, { 0x1058C, 0x10592, "Vith" }, { 0x10594, 0x10595, "Vith" }, { 0x10597, 0x105A1, "Vith" }, { 0x105A3, 0x105B1, "Vith" }, { 0x105B3, 0x105B9, "Vith" }, { 0x105BB, 0x105BC, "Vith" }, { 0x10600, 0x10736, "Lina" }, { 0x10740, 0x10755, "Lina" }, { 0x10760, 0x10767, "Lina" }, { 0x10780, 0x10785, "Latn" }, { 0x10787, 0x107B0, "Latn" }, { 0x107B2, 0x107BA, "Latn" }, { 0x10800, 0x10805, "Cprt" }, { 0x1080A, 0x10835, "Cprt" }, { 0x10837, 0x10838, "Cprt" }, { 0x10840, 0x10855, "Armi" }, { 0x10857, 0x1085F, "Armi" }, { 0x10860, 0x1087F, "Palm" }, { 0x10880, 0x1089E, "Nbat" }, { 0x108A7, 0x108AF, "Nbat" }, { 0x108E0, 0x108F2, "Hatr" }, { 0x108F4, 0x108F5, "Hatr" }, { 0x108FB, 0x108FF, "Hatr" }, { 0x10900, 0x1091B, "Phnx" }, { 0x10920, 0x10939, "Lydi" }, { 0x10980, 0x1099F, "Mero" }, { 0x109A0, 0x109B7, "Merc" }, { 0x109BC, 0x109CF, "Merc" }, { 0x109D2, 0x109FF, "Merc" }, { 0x10A00, 0x10A03, "Khar" }, { 0x10A05, 0x10A06, "Khar" }, { 0x10A0C, 0x10A13, "Khar" }, { 0x10A15, 0x10A17, "Khar" }, { 0x10A19, 0x10A35, "Khar" }, { 0x10A38, 0x10A3A, "Khar" }, { 0x10A3F, 0x10A48, "Khar" }, { 0x10A50, 0x10A58, "Khar" }, { 0x10A60, 0x10A7F, "Sarb" }, { 0x10A80, 0x10A9F, "Narb" }, { 0x10AC0, 0x10AE6, "Mani" }, { 0x10AEB, 0x10AF6, "Mani" }, { 0x10B00, 0x10B35, "Avst" }, { 0x10B39, 0x10B3F, "Avst" }, { 0x10B40, 0x10B55, "Prti" }, { 0x10B58, 0x10B5F, "Prti" }, { 0x10B60, 0x10B72, "Phli" }, { 0x10B78, 0x10B7F, "Phli" }, { 0x10B80, 0x10B91, "Phlp" }, { 0x10B99, 0x10B9C, "Phlp" }, { 0x10BA9, 0x10BAF, "Phlp" }, { 0x10C00, 0x10C48, "Orkh" }, { 0x10C80, 0x10CB2, "Hung" }, { 0x10CC0, 0x10CF2, "Hung" }, { 0x10CFA, 0x10CFF, "Hung" }, { 0x10D00, 0x10D27, "Rohg" }, { 0x10D30, 0x10D39, "Rohg" }, { 0x10E60, 0x10E7E, "Arab" }, { 0x10E80, 0x10EA9, "Yezi" }, { 0x10EAB, 0x10EAD, "Yezi" }, { 0x10EB0, 0x10EB1, "Yezi" }, { 0x10EFD, 0x10EFF, "Arab" }, { 0x10F00, 0x10F27, "Sogo" }, { 0x10F30, 0x10F59, "Sogd" }, { 0x10F70, 0x10F89, "Ougr" }, { 0x10FB0, 0x10FCB, "Chrs" }, { 0x10FE0, 0x10FF6, "Elym" }, { 0x11000, 0x1104D, "Brah" }, { 0x11052, 0x11075, "Brah" }, { 0x11080, 0x110C2, "Kthi" }, { 0x110D0, 0x110E8, "Sora" }, { 0x110F0, 0x110F9, "Sora" }, { 0x11100, 0x11134, "Cakm" }, { 0x11136, 0x11147, "Cakm" }, { 0x11150, 0x11176, "Mahj" }, { 0x11180, 0x111DF, "Shrd" }, { 0x111E1, 0x111F4, "Sinh" }, { 0x11200, 0x11211, "Khoj" }, { 0x11213, 0x11241, "Khoj" }, { 0x11280, 0x11286, "Mult" }, { 0x1128A, 0x1128D, "Mult" }, { 0x1128F, 0x1129D, "Mult" }, { 0x1129F, 0x112A9, "Mult" }, { 0x112B0, 0x112EA, "Sind" }, { 0x112F0, 0x112F9, "Sind" }, { 0x11300, 0x11303, "Gran" }, { 0x11305, 0x1130C, "Gran" }, { 0x1130F, 0x11310, "Gran" }, { 0x11313, 0x11328, "Gran" }, { 0x1132A, 0x11330, "Gran" }, { 0x11332, 0x11333, "Gran" }, { 0x11335, 0x11339, "Gran" }, { 0x1133C, 0x11344, "Gran" }, { 0x11347, 0x11348, "Gran" }, { 0x1134B, 0x1134D, "Gran" }, { 0x1135D, 0x11363, "Gran" }, { 0x11366, 0x1136C, "Gran" }, { 0x11370, 0x11374, "Gran" }, { 0x11400, 0x1145B, "Newa" }, { 0x1145D, 0x11461, "Newa" }, { 0x11480, 0x114C7, "Tirh" }, { 0x114D0, 0x114D9, "Tirh" }, { 0x11580, 0x115B5, "Sidd" }, { 0x115B8, 0x115DD, "Sidd" }, { 0x11600, 0x11644, "Modi" }, { 0x11650, 0x11659, "Modi" }, { 0x11660, 0x1166C, "Mong" }, { 0x11680, 0x116B9, "Takr" }, { 0x116C0, 0x116C9, "Takr" }, { 0x11700, 0x1171A, "Ahom" }, { 0x1171D, 0x1172B, "Ahom" }, { 0x11730, 0x11746, "Ahom" }, { 0x11800, 0x1183B, "Dogr" }, { 0x118A0, 0x118F2, "Wara" }, { 0x11900, 0x11906, "Diak" }, { 0x1190C, 0x11913, "Diak" }, { 0x11915, 0x11916, "Diak" }, { 0x11918, 0x11935, "Diak" }, { 0x11937, 0x11938, "Diak" }, { 0x1193B, 0x11946, "Diak" }, { 0x11950, 0x11959, "Diak" }, { 0x119A0, 0x119A7, "Nand" }, { 0x119AA, 0x119D7, "Nand" }, { 0x119DA, 0x119E4, "Nand" }, { 0x11A00, 0x11A47, "Zanb" }, { 0x11A50, 0x11AA2, "Soyo" }, { 0x11AB0, 0x11ABF, "Cans" }, { 0x11AC0, 0x11AF8, "Pauc" }, { 0x11B00, 0x11B09, "Deva" }, { 0x11C00, 0x11C08, "Bhks" }, { 0x11C0A, 0x11C36, "Bhks" }, { 0x11C38, 0x11C45, "Bhks" }, { 0x11C50, 0x11C6C, "Bhks" }, { 0x11C70, 0x11C8F, "Marc" }, { 0x11C92, 0x11CA7, "Marc" }, { 0x11CA9, 0x11CB6, "Marc" }, { 0x11D00, 0x11D06, "Gonm" }, { 0x11D08, 0x11D09, "Gonm" }, { 0x11D0B, 0x11D36, "Gonm" }, { 0x11D3C, 0x11D3D, "Gonm" }, { 0x11D3F, 0x11D47, "Gonm" }, { 0x11D50, 0x11D59, "Gonm" }, { 0x11D60, 0x11D65, "Gong" }, { 0x11D67, 0x11D68, "Gong" }, { 0x11D6A, 0x11D8E, "Gong" }, { 0x11D90, 0x11D91, "Gong" }, { 0x11D93, 0x11D98, "Gong" }, { 0x11DA0, 0x11DA9, "Gong" }, { 0x11EE0, 0x11EF8, "Maka" }, { 0x11F00, 0x11F10, "Kawi" }, { 0x11F12, 0x11F3A, "Kawi" }, { 0x11F3E, 0x11F59, "Kawi" }, { 0x11FC0, 0x11FF1, "Taml" }, { 0x12000, 0x12399, "Xsux" }, { 0x12400, 0x1246E, "Xsux" }, { 0x12470, 0x12474, "Xsux" }, { 0x12480, 0x12543, "Xsux" }, { 0x12F90, 0x12FF2, "Cpmn" }, { 0x13000, 0x13455, "Egyp" }, { 0x14400, 0x14646, "Hluw" }, { 0x16800, 0x16A38, "Bamu" }, { 0x16A40, 0x16A5E, "Mroo" }, { 0x16A60, 0x16A69, "Mroo" }, { 0x16A6E, 0x16A6F, "Mroo" }, { 0x16A70, 0x16ABE, "Tnsa" }, { 0x16AC0, 0x16AC9, "Tnsa" }, { 0x16AD0, 0x16AED, "Bass" }, { 0x16AF0, 0x16AF5, "Bass" }, { 0x16B00, 0x16B45, "Hmng" }, { 0x16B50, 0x16B59, "Hmng" }, { 0x16B5B, 0x16B61, "Hmng" }, { 0x16B63, 0x16B77, "Hmng" }, { 0x16B7D, 0x16B8F, "Hmng" }, { 0x16E40, 0x16E9A, "Medf" }, { 0x16F00, 0x16F4A, "Plrd" }, { 0x16F4F, 0x16F87, "Plrd" }, { 0x16F8F, 0x16F9F, "Plrd" }, { 0x16FE2, 0x16FE3, "Hani" }, { 0x16FF0, 0x16FF1, "Hani" }, { 0x17000, 0x187F7, "Tang" }, { 0x18800, 0x18AFF, "Tang" }, { 0x18B00, 0x18CD5, "Kits" }, { 0x18D00, 0x18D08, "Tang" }, { 0x1AFF0, 0x1AFF3, "Kana" }, { 0x1AFF5, 0x1AFFB, "Kana" }, { 0x1AFFD, 0x1AFFE, "Kana" }, { 0x1B001, 0x1B11F, "Hira" }, { 0x1B120, 0x1B122, "Kana" }, { 0x1B150, 0x1B152, "Hira" }, { 0x1B164, 0x1B167, "Kana" }, { 0x1B170, 0x1B2FB, "Nshu" }, { 0x1BC00, 0x1BC6A, "Dupl" }, { 0x1BC70, 0x1BC7C, "Dupl" }, { 0x1BC80, 0x1BC88, "Dupl" }, { 0x1BC90, 0x1BC99, "Dupl" }, { 0x1BC9C, 0x1BC9F, "Dupl" }, { 0x1BCA0, 0x1BCA3, "Zyyy" }, { 0x1CF00, 0x1CF2D, "Zinh" }, { 0x1CF30, 0x1CF46, "Zinh" }, { 0x1CF50, 0x1CFC3, "Zyyy" }, { 0x1D000, 0x1D0F5, "Zyyy" }, { 0x1D100, 0x1D126, "Zyyy" }, { 0x1D129, 0x1D166, "Zyyy" }, { 0x1D167, 0x1D169, "Zinh" }, { 0x1D16A, 0x1D17A, "Zyyy" }, { 0x1D17B, 0x1D182, "Zinh" }, { 0x1D183, 0x1D184, "Zyyy" }, { 0x1D185, 0x1D18B, "Zinh" }, { 0x1D18C, 0x1D1A9, "Zyyy" }, { 0x1D1AA, 0x1D1AD, "Zinh" }, { 0x1D1AE, 0x1D1EA, "Zyyy" }, { 0x1D200, 0x1D245, "Grek" }, { 0x1D2C0, 0x1D2D3, "Zyyy" }, { 0x1D2E0, 0x1D2F3, "Zyyy" }, { 0x1D300, 0x1D356, "Zyyy" }, { 0x1D360, 0x1D378, "Zyyy" }, { 0x1D400, 0x1D454, "Zyyy" }, { 0x1D456, 0x1D49C, "Zyyy" }, { 0x1D49E, 0x1D49F, "Zyyy" }, { 0x1D4A5, 0x1D4A6, "Zyyy" }, { 0x1D4A9, 0x1D4AC, "Zyyy" }, { 0x1D4AE, 0x1D4B9, "Zyyy" }, { 0x1D4BD, 0x1D4C3, "Zyyy" }, { 0x1D4C5, 0x1D505, "Zyyy" }, { 0x1D507, 0x1D50A, "Zyyy" }, { 0x1D50D, 0x1D514, "Zyyy" }, { 0x1D516, 0x1D51C, "Zyyy" }, { 0x1D51E, 0x1D539, "Zyyy" }, { 0x1D53B, 0x1D53E, "Zyyy" }, { 0x1D540, 0x1D544, "Zyyy" }, { 0x1D54A, 0x1D550, "Zyyy" }, { 0x1D552, 0x1D6A5, "Zyyy" }, { 0x1D6A8, 0x1D7CB, "Zyyy" }, { 0x1D7CE, 0x1D7FF, "Zyyy" }, { 0x1D800, 0x1DA8B, "Sgnw" }, { 0x1DA9B, 0x1DA9F, "Sgnw" }, { 0x1DAA1, 0x1DAAF, "Sgnw" }, { 0x1DF00, 0x1DF1E, "Latn" }, { 0x1DF25, 0x1DF2A, "Latn" }, { 0x1E000, 0x1E006, "Glag" }, { 0x1E008, 0x1E018, "Glag" }, { 0x1E01B, 0x1E021, "Glag" }, { 0x1E023, 0x1E024, "Glag" }, { 0x1E026, 0x1E02A, "Glag" }, { 0x1E030, 0x1E06D, "Cyrl" }, { 0x1E100, 0x1E12C, "Hmnp" }, { 0x1E130, 0x1E13D, "Hmnp" }, { 0x1E140, 0x1E149, "Hmnp" }, { 0x1E14E, 0x1E14F, "Hmnp" }, { 0x1E290, 0x1E2AE, "Toto" }, { 0x1E2C0, 0x1E2F9, "Wcho" }, { 0x1E4D0, 0x1E4F9, "Nagm" }, { 0x1E7E0, 0x1E7E6, "Ethi" }, { 0x1E7E8, 0x1E7EB, "Ethi" }, { 0x1E7ED, 0x1E7EE, "Ethi" }, { 0x1E7F0, 0x1E7FE, "Ethi" }, { 0x1E800, 0x1E8C4, "Mend" }, { 0x1E8C7, 0x1E8D6, "Mend" }, { 0x1E900, 0x1E94B, "Adlm" }, { 0x1E950, 0x1E959, "Adlm" }, { 0x1E95E, 0x1E95F, "Adlm" }, { 0x1EC71, 0x1ECB4, "Zyyy" }, { 0x1ED01, 0x1ED3D, "Zyyy" }, { 0x1EE00, 0x1EE03, "Arab" }, { 0x1EE05, 0x1EE1F, "Arab" }, { 0x1EE21, 0x1EE22, "Arab" }, { 0x1EE29, 0x1EE32, "Arab" }, { 0x1EE34, 0x1EE37, "Arab" }, { 0x1EE4D, 0x1EE4F, "Arab" }, { 0x1EE51, 0x1EE52, "Arab" }, { 0x1EE61, 0x1EE62, "Arab" }, { 0x1EE67, 0x1EE6A, "Arab" }, { 0x1EE6C, 0x1EE72, "Arab" }, { 0x1EE74, 0x1EE77, "Arab" }, { 0x1EE79, 0x1EE7C, "Arab" }, { 0x1EE80, 0x1EE89, "Arab" }, { 0x1EE8B, 0x1EE9B, "Arab" }, { 0x1EEA1, 0x1EEA3, "Arab" }, { 0x1EEA5, 0x1EEA9, "Arab" }, { 0x1EEAB, 0x1EEBB, "Arab" }, { 0x1EEF0, 0x1EEF1, "Arab" }, { 0x1F000, 0x1F02B, "Zyyy" }, { 0x1F030, 0x1F093, "Zyyy" }, { 0x1F0A0, 0x1F0AE, "Zyyy" }, { 0x1F0B1, 0x1F0BF, "Zyyy" }, { 0x1F0C1, 0x1F0CF, "Zyyy" }, { 0x1F0D1, 0x1F0F5, "Zyyy" }, { 0x1F100, 0x1F1AD, "Zyyy" }, { 0x1F1E6, 0x1F1FF, "Zyyy" }, { 0x1F201, 0x1F202, "Zyyy" }, { 0x1F210, 0x1F23B, "Zyyy" }, { 0x1F240, 0x1F248, "Zyyy" }, { 0x1F250, 0x1F251, "Zyyy" }, { 0x1F260, 0x1F265, "Zyyy" }, { 0x1F300, 0x1F6D7, "Zyyy" }, { 0x1F6DC, 0x1F6EC, "Zyyy" }, { 0x1F6F0, 0x1F6FC, "Zyyy" }, { 0x1F700, 0x1F776, "Zyyy" }, { 0x1F77B, 0x1F7D9, "Zyyy" }, { 0x1F7E0, 0x1F7EB, "Zyyy" }, { 0x1F800, 0x1F80B, "Zyyy" }, { 0x1F810, 0x1F847, "Zyyy" }, { 0x1F850, 0x1F859, "Zyyy" }, { 0x1F860, 0x1F887, "Zyyy" }, { 0x1F890, 0x1F8AD, "Zyyy" }, { 0x1F8B0, 0x1F8B1, "Zyyy" }, { 0x1F900, 0x1FA53, "Zyyy" }, { 0x1FA60, 0x1FA6D, "Zyyy" }, { 0x1FA70, 0x1FA7C, "Zyyy" }, { 0x1FA80, 0x1FA88, "Zyyy" }, { 0x1FA90, 0x1FABD, "Zyyy" }, { 0x1FABF, 0x1FAC5, "Zyyy" }, { 0x1FACE, 0x1FADB, "Zyyy" }, { 0x1FAE0, 0x1FAE8, "Zyyy" }, { 0x1FAF0, 0x1FAF8, "Zyyy" }, { 0x1FB00, 0x1FB92, "Zyyy" }, { 0x1FB94, 0x1FBCA, "Zyyy" }, { 0x1FBF0, 0x1FBF9, "Zyyy" }, { 0x20000, 0x2A6DF, "Hani" }, { 0x2A700, 0x2B739, "Hani" }, { 0x2B740, 0x2B81D, "Hani" }, { 0x2B820, 0x2CEA1, "Hani" }, { 0x2CEB0, 0x2EBE0, "Hani" }, { 0x2F800, 0x2FA1D, "Hani" }, { 0x30000, 0x3134A, "Hani" }, { 0x31350, 0x323AF, "Hani" }, { 0xE0020, 0xE007F, "Zyyy" }, { 0xE0100, 0xE01EF, "Zinh" }, }, -- Scripts.txt gives full names; here we consider them aliases to save space. aliases = { Adlm = "Adlam", Aghb = "Caucasian Albanian", Ahom = "Ahom", Arab = "Arabic", Armi = "Imperial Aramaic", Armn = "Armenian", Avst = "Avestan", Bali = "Balinese", Bamu = "Bamum", Bass = "Bassa Vah", Batk = "Batak", Beng = "Bengali", Bhks = "Bhaiksuki", Bopo = "Bopomofo", Brah = "Brahmi", Brai = "Braille", Bugi = "Buginese", Buhd = "Buhid", Cakm = "Chakma", Cans = "Canadian Aboriginal", Cari = "Carian", Cham = "Cham", Cher = "Cherokee", Chrs = "Chorasmian", Copt = "Coptic", Cpmn = "Cypro Minoan", Cprt = "Cypriot", Cyrl = "Cyrillic", Deva = "Devanagari", Diak = "Dives Akuru", Dogr = "Dogra", Dsrt = "Deseret", Dupl = "Duployan", Egyp = "Egyptian Hieroglyphs", Elba = "Elbasan", Elym = "Elymaic", Ethi = "Ethiopic", Geor = "Georgian", Glag = "Glagolitic", Gong = "Gunjala Gondi", Gonm = "Masaram Gondi", Goth = "Gothic", Gran = "Grantha", Grek = "Greek", Gujr = "Gujarati", Guru = "Gurmukhi", Hang = "Hangul", Hani = "Han", Hano = "Hanunoo", Hatr = "Hatran", Hebr = "Hebrew", Hira = "Hiragana", Hluw = "Anatolian Hieroglyphs", Hmng = "Pahawh Hmong", Hmnp = "Nyiakeng Puachue Hmong", Hrkt = "Katakana Or Hiragana", Hung = "Old Hungarian", Ital = "Old Italic", Java = "Javanese", Kali = "Kayah Li", Kana = "Katakana", Kawi = "Kawi", Khar = "Kharoshthi", Khmr = "Khmer", Khoj = "Khojki", Kits = "Khitan Small Script", Knda = "Kannada", Kthi = "Kaithi", Lana = "Tai Tham", Laoo = "Lao", Latn = "Latin", Lepc = "Lepcha", Limb = "Limbu", Lina = "Linear A", Linb = "Linear B", Lisu = "Lisu", Lyci = "Lycian", Lydi = "Lydian", Mahj = "Mahajani", Maka = "Makasar", Mand = "Mandaic", Mani = "Manichaean", Marc = "Marchen", Medf = "Medefaidrin", Mend = "Mende Kikakui", Merc = "Meroitic Cursive", Mero = "Meroitic Hieroglyphs", Mlym = "Malayalam", Modi = "Modi", Mong = "Mongolian", Mroo = "Mro", Mtei = "Meetei Mayek", Mult = "Multani", Mymr = "Myanmar", Nagm = "Nag Mundari", Nand = "Nandinagari", Narb = "Old North Arabian", Nbat = "Nabataean", Newa = "Newa", Nkoo = "NKo", Nshu = "Nushu", Ogam = "Ogham", Olck = "Ol Chiki", Orkh = "Old Turkic", Orya = "Oriya", Osge = "Osage", Osma = "Osmanya", Ougr = "Old Uyghur", Palm = "Palmyrene", Pauc = "Pau Cin Hau", Perm = "Old Permic", Phag = "Phags Pa", Phli = "Inscriptional Pahlavi", Phlp = "Psalter Pahlavi", Phnx = "Phoenician", Plrd = "Miao", Prti = "Inscriptional Parthian", Rjng = "Rejang", Rohg = "Hanifi Rohingya", Runr = "Runic", Samr = "Samaritan", Sarb = "Old South Arabian", Saur = "Saurashtra", Sgnw = "SignWriting", Shaw = "Shavian", Shrd = "Sharada", Sidd = "Siddham", Sind = "Khudawadi", Sinh = "Sinhala", Sogd = "Sogdian", Sogo = "Old Sogdian", Sora = "Sora Sompeng", Soyo = "Soyombo", Sund = "Sundanese", Sylo = "Syloti Nagri", Syrc = "Syriac", Tagb = "Tagbanwa", Takr = "Takri", Tale = "Tai Le", Talu = "New Tai Lue", Taml = "Tamil", Tang = "Tangut", Tavt = "Tai Viet", Telu = "Telugu", Tfng = "Tifinagh", Tglg = "Tagalog", Thaa = "Thaana", Thai = "Thai", Tibt = "Tibetan", Tirh = "Tirhuta", Tnsa = "Tangsa", Toto = "Toto", Ugar = "Ugaritic", Vaii = "Vai", Vith = "Vithkuqi", Wara = "Warang Citi", Wcho = "Wancho", Xpeo = "Old Persian", Xsux = "Cuneiform", Yezi = "Yezidi", Yiii = "Yi", Zanb = "Zanabazar Square", Zinh = "Inherited", Zyyy = "Common", Zzzz = "Unknown", }, } -- Required for binary search function in [[Module:Language/scripts]]. -- Cannot get length of module loaded with mw.loadData. data.ranges.length = #data.ranges data.rtl = {} for _, script in ipairs(mw.loadData "Module:Lang/data".rtl_scripts) do -- [[Module:Lang/data]] has script codes in lowercase; -- this module has script codes with the first letter capitalized. data.rtl[script:gsub("^%a", string.upper)] = true end return data f887eb9f8d53e83c36af36a127f534c3e063e358 Template:Details 10 250 725 724 2023-06-06T18:16:43Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Details]]: w wikitext text/x-wiki #REDIRECT [[Template:Further]] {{Redirect category shell| {{R from merge}} }} 1a90a51d85f6cb700979ea38f5f69bee0ff2c85e Template:TOC right 10 251 727 726 2023-06-06T18:16:44Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:TOC_right]]: w wikitext text/x-wiki <templatestyles src="Template:TOC_right/styles.css" />{{#if:{{{limit|}}}|<templatestyles src="Template:TOC limit/styles.css" />}}<!-- --><div class="tocright {{#if:{{{clear|}}}|tocright-clear-{{{clear|}}}}} {{#if:{{{limit|}}}|toclimit-{{{limit}}}}}" {{#if:{{{width|{{{1|}}}}}}|style="width: {{{width|{{{1}}}}}};"}}>__TOC__</div><noinclude> {{documentation}} <!-- Add categories to the /doc subpage; interwikis go to Wikidata, thank you! --> </noinclude> 67c60b46e441afa40d8c4c1227aa6580a0cda2e9 Template:TOC right/styles.css 10 252 729 728 2023-06-06T18:16:46Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:TOC_right/styles.css]]: w sanitized-css text/css /* {{pp-template}} */ /* The TOC is hidden on Minerva (mobile skin) for width < 720px so must also hide this wrapper */ @media all and (max-width: 720px) { body.skin-minerva .tocright { display: none; } .tocright { width: 100% !important; /* fix the inline width while at small resolution */ } } @media all and (min-width: 720px) { .tocright { float: right; clear: right; width: auto; margin: 0 0 0.5em 1em; } .tocright-clear-left { clear: left; } .tocright-clear-both { clear: both; } .tocright-clear-none { clear: none; } } 60435a52ddabf7eb321fa80dbf78c0d63d13f95b Template:Category link 10 253 731 730 2023-06-06T18:16:47Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Category_link]]: w wikitext text/x-wiki {{#ifeq:{{#titleparts:{{PAGENAME}}|1}}|Stub types for deletion |[[:Category:{{{1}}}|Cat:{{{1}}}]] | [[:Category:{{{1}}}|{{{2|Category:{{{1}}}}}}]]{{#ifeq:{{Yesno|{{{count|no}}}}}|yes|<small> {{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|<span style="font-weight: bold; color: #DD0000;">}}(&thinsp;{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}}}&thinsp;){{#ifexpr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}>={{{backlog|{{#expr:{{PAGESINCAT:{{{1}}}|{{UC:{{{count_type|ALL}}}}}|R}}+1}}}}}|</span>}}</small>}}}}<noinclude> {{Documentation}} </noinclude> cb0fcaeb8242d1d37c27a8dcb57f76fe5b5faa36 Template:Cl 10 254 733 732 2023-06-06T18:16:47Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Cl]]: w wikitext text/x-wiki #REDIRECT [[Template:Category link]] {{R from move}} f79fddc38797fc163b6e6ddeb4377afbea7d0cfc Module:Nihongo 828 255 735 734 2023-06-06T18:16:49Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Module:Nihongo]]: w Scribunto text/plain require('strict'); --[[--------------------------< E R R O R _ M E S S A G E S >-------------------------------------------------- error messaging; keys to this table are the template base names: 'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc ]] local err_msg = { ['nihongo'] = 'Japanese or romaji text required', ['hanyu'] = 'Chinese or pinyin text required', } local err_cat = { ['nihongo'] = '[[Category:Nihongo template errors]]', ['hanyu'] = '[[Category:Hanyu template errors]]', } --[[--------------------------< C O N F I G U R A T I O N >---------------------------------------------------- configuration setting for the various templates. keys to this table are the template names without spacing ]] local cfg = { ['nihongo'] = { tag = 'ja', system = 'hepburn', system_link = '[[Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo3'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo krt'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo foot'] = { tag = 'ja', system = 'hepburn', system_link = '[[Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['hanyu'] = { tag = 'zh', system = 'pinyin', system_link = '[[Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu3'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu hrt'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu foot'] = { tag = 'zh', system = 'pinyin', system_link = '[[Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, } --[[--------------------------< E R R O R _ M E S S A G E >---------------------------------------------------- Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese> or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors ]] local function error_message (template) local msg = {'<span class="error" style="font-size:100%">error: {{'}; table.insert (msg, template); table.insert (msg, '}}: '); table.insert (msg, cfg[template].err_msg); table.insert (msg, ' ([[Template:'); table.insert (msg, template); table.insert (msg, '|help]])</span>'); if 0 == mw.title.getCurrentTitle().namespace then table.insert (msg, cfg[template].err_cat); end return table.concat (msg); end --[[--------------------------< R E N D E R E R >-------------------------------------------------------------- Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{} from set/unset parameters: args[1] (english text) has a value of 8 (set) or 0 (unset) args[2] (native text) has a value of 4 args[3] (romanized text) has a value of 2 args[4] (extra) has a value of 1 index, the sum of these values, gets the appropriate format string from formatting{} table with associated values from the formatting[index][2] table ]] local function renderer (args, formatting, extra2) local output; local index = 0; -- index into formatting{} local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1) for i=1, 5 do -- spin through args[1] – args[4] index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{} end output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil; if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{} output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced end -- (nihongo and nihongo3) or removed (nihongo foot) return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close end --[[--------------------------< R O M A N I Z E D _ K E R N >-------------------------------------------------- Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses (<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>) <ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced) <romanized> is the return from lang_module._transl() so is not wrapped in parentheses ]] local function romanized_kern (ret_string, romanized) if not romanized or ('' == romanized) then -- if romanized not set return ret_string; -- then we're done end local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned end if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned end return ret_string; -- done end --[[--------------------------< C O M M O N >------------------------------------------------------------------ Common support for {{nihongo}} and {{hanyu}} render order: is translated (English), native, romanized <template> is used to select the appropriate cfg table ]] local function common (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix end if romanized then romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized) {'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized) {'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >---------- Common support for {{nihongo3}} and {{hanyu3}} render order: is romanized, native, translated (English) <template> is used to select the appropriate cfg table ]] local function common_romanized_native_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english) {'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >---------- Common support for {{nihongo krt}} and {{hanyu krt}} render order: is native, romanized, translated (English) <template> is used to select the appropriate cfg table ]] local function common_native_romanized_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>%s', {native}}, -- 4 - native {'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra) {'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized) {'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english) {'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra) {'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english) {'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ F O O T >-------------------------------------------------------- Common support for {{nihongo foot}} and {{hanyu foot}} render order: is English<ref>native, romanized</ref> <template> is used to select the appropriate cfg table ]] local function common_foot (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local post = args[6] or args.post; local group = args.group; local ref_name = args.ref_name local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix end if romanized then romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { {'%s', {extra}}, -- 1 - extra {'%s', {romanized}}, -- 2 - romanized {'%s, %s', {romanized, extra}}, -- 3 - romanized, extra {'%s', {native}}, -- 4 - native {'%s, %s', {native, extra}}, -- 5 - native, extra {'%s, %s', {native, romanized}}, -- 6 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra -- from here english is used in the mapping but not rendered by renderer so not included in the table {'', {''}}, -- 8 - english {'%s', {extra}}, -- 9 - extra {'%s', {romanized}}, -- 10 - romanized {'%s, %s', {romanized, extra}}, -- 11 - romanized, extra {'%s', {native}}, -- 12 - native {'%s, %s', {native, extra}}, -- 13 - native, extra {'%s, %s', {native, romanized}}, -- 14 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra } if english and post then -- rewrite english to include |post= english = english .. post; -- if english has a value append post else just post elseif post then english = post; -- english not set, use post elseif not english then -- neither are set english = ''; -- make english an empty string for concatenation end if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty) local content = renderer (args, formatting, extra2); content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag else return english; -- nothing to be inside ref tag so just return english end end --[=[-------------------------< N I H O N G O >---------------------------------------------------------------- Implement {{nihongo}} using Module:Lang for language and transliteration markup {{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function nihongo (frame) return common (frame, 'nihongo') end --[=[-------------------------< N I H O N G O 3 >-------------------------------------------------------------- Implement {{nihongo3}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo3 (frame) return common_romanized_native_translated (frame, 'nihongo3') end --[=[-------------------------< N I H O N G O _ K R T >-------------------------------------------------------- Implement {{nihongo krt}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo_krt (frame) return common_native_romanized_translated (frame, 'nihongo krt') end --[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------ Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup {{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function nihongo_foot (frame) return common_foot (frame, 'nihongo foot') end --[=[-------------------------< H A N Y U >-------------------------------------------------------------------- Implement {{hanyu}} using Module:Lang for language and transliteration markup {{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function hanyu (frame) return common (frame, 'hanyu') end --[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------ Implement {{hanyu3}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu3 (frame) return common_romanized_native_translated (frame, 'hanyu3') end --[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------ Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu_hrt (frame) return common_native_romanized_translated (frame, 'hanyu hrt') end --[=[-------------------------< H A N Y U _ F O O T >---------------------------------------------------------- Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup {{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function hanyu_foot (frame) return common_foot (frame, 'hanyu foot') end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { nihongo = nihongo, nihongo3 = nihongo3, nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line nihongo_krt = nihongo_krt, nihongo_foot = nihongo_foot, hanyu = hanyu, hanyu3 = hanyu3, hanyu_hrt = hanyu_hrt, hanyu_foot = hanyu_foot, } 7ad11952c5404f68ef3dc04de743da59f35238c9 Template:Notice 10 256 737 736 2023-06-06T18:16:50Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Notice]]: w wikitext text/x-wiki {{Mbox | name = Notice | demospace = {{{demospace|}}} | style = {{#if:{{{style|}}} |{{{style}}} }} | subst = <includeonly>{{subst:substcheck}}</includeonly> | type = notice | image = {{#if:{{{image|}}} |[[File:{{{image}}}|40px|Notice|alt={{{imagealt|}}}]]}} | small = {{{small|}}} | smallimage = {{#if:{{{image|}}} |[[File:{{{image}}}|30px|Notice|alt={{{imagealt|}}}]]}} | imageright = {{#if:{{{imageright|}}} |{{{imageright}}} |{{#if:{{{shortcut|{{{shortcut1|}}}}}} |{{Ombox/shortcut|{{{shortcut|{{{shortcut1|}}}}}}|{{{shortcut2|}}}|{{{shortcut3|}}}|{{{shortcut4|}}}|{{{shortcut5|}}}}}}} }} | textstyle = {{{textstyle|text-align: {{#if:{{{center|}}}|center|{{{align|left}}}}};}}} | text = {{#if:{{{header|{{{heading|{{{title|}}}}}}}}} |<div style="{{{headstyle|text-align: {{#if:{{{center|}}}|center|left}};}}}">'''{{{header|{{{heading|{{{title|}}}}}}}}}'''</div>}}<!-- -->{{{text|{{{content|{{{reason|{{{1}}}}}}}}}}}} }}<noinclude> {{Documentation}} </noinclude> 2cbdbb721ca517005f6827650eef5b0f17537a43 Template:Lit 10 257 739 738 2023-06-06T18:16:50Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Lit]]: w wikitext text/x-wiki #REDIRECT [[Template:Literal translation]] 38b4e908291ac0a1fa8482ed0f8d5631c6a213e6 Template:Var 10 258 741 740 2023-06-06T18:16:52Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Var]]: w wikitext text/x-wiki <var {{#if:{{{class|}}}|class="{{{class}}}"}} {{#if:{{{id|}}}|id="{{{id}}}"}} style="padding-right: 1px;{{{style|}}}" {{#if:{{{lang|}}}|lang="{{{lang}}}"}} {{#if:{{{title|}}}|title="{{{title}}}"}}>{{{1}}}</var><noinclude> <!--Categories and interwikis go near the bottom of the /doc page.--> {{Documentation}} </noinclude> 0e9e47694c01ca4c7b29566a1cb11a117dfbf2c0 Template:Template link code 10 259 743 742 2023-06-06T18:16:53Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Template_link_code]]: w wikitext text/x-wiki <includeonly>{{#Invoke:Template link general|main|nolink=yes|code=yes|nowrap=yes}}</includeonly><noinclude> {{Documentation|1=Template:Tlg/doc |content = {{tlg/doc|tlc}} }} <!-- Add categories to the /doc subpage, not here! --> </noinclude> 044f00ca1bfc10cb967c32e893043ccc6f739764 Template:Tld 10 260 745 744 2023-06-06T18:16:54Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Tld]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link code]] be5d6275ea41d83224503e05901f3405c82141f7 Template:TOCright 10 261 747 746 2023-06-06T18:16:54Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:TOCright]]: w wikitext text/x-wiki #REDIRECT [[Template:TOC right]] {{Redirect category shell| {{R from move}} {{R from modification}} {{R from template shortcut}} }} f20e461364ddb55d5f46a9e77871e34208173664 Template:COinS safe 10 262 749 748 2023-06-06T18:16:58Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:COinS_safe]]: w wikitext text/x-wiki {{notice |image={{#ifeq: {{{1|}}}|n|Stop hand nuvola.svg}} |{{#ifeq: {{{1|}}}|n |This template should not be used in citation templates such as [[Help:Citation Style 1|Citation Style 1]] and [[Help:Citation Style 2|Citation Style 2]], because it includes markup that will pollute the [[COinS]] metadata they produce; see [[Wikipedia:COinS]]. {{{addtext|}}}{{Sandbox other||[[Category:Templates not safe for use in citation templates]]}} |This template is safe for use in citation templates that produce [[COinS]] metadata; see [[Wikipedia:COinS]]. If HTML or other markup is added, then the template must be reevaluated. {{{addtext|}}} }} }}<noinclude> {{Documentation}} <!-- Please add categories to the /doc subpage, and interwikis at Wikidata (see Wikipedia:Wikidata) --> </noinclude> 47abee673d74440d28e801111bf6ee765cd998df Template:Nihongo/doc 10 263 751 750 2023-06-06T18:17:01Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Nihongo/doc]]: w wikitext text/x-wiki {{Documentation subpage}} <!-- Categories go where indicated at the bottom of this page, please; interwikis go to Wikidata (see also: [[Wikipedia:Wikidata]]). --> {{High-use}} {{COinS safe|n}} {{Lua|Module:Nihongo}} {{TOCright}} == Usage == This template marks the <code>[[kanji]]</code> segment as being in Japanese kanji and/or kana, which helps user agents (web browsers and so on) to display it correctly. {{details|topic=when to use this template|Wikipedia:Manual of Style (Japan-related articles)}} '''Syntax:''' {|class=wikitable |Without lead=yes |With lead=yes |- |<code><nowiki>{{Nihongo|</nowiki>&lt;{{var|english}}>&#124;&lt;{{var|kanji/kana}}>&#124;&lt;{{var|rōmaji}}>&#124;&lt;{{var|extra}}>&#124;&lt;{{var|extra2}}>}}</code> |<code><nowiki>{{Nihongo|</nowiki>&lt;{{var|english}}>&#124;&lt;{{var|kanji/kana}}>&#124;&lt;{{var|rōmaji}}>&#124;lead=yes&#124;extra=&lt;{{var|extra}}>&#124;extra2=&lt;{{var|extra2}}>}}</code> |} '''Parameters:''' * &lt;{{var|english}}>. Optional. The word as translated into English. Note that this will sometimes be the actual Japanese word due to it being adopted into English. * &lt;{{var|kanji/kana}}>. Required when &lt;{{var|rōmaji}}> is empty or omitted. The word as written using Japanese script (kanji, kana). * &lt;{{var|rōmaji}}>. Required when &lt;{{var|kanji/kana}}> is empty. Transliteration of the Japanese word, using Hepburn Romanization. * lead=yes. Optional. This should be used for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing. * &lt;{{var|extra}}>. Optional. Can be used to add a gloss (particularly if there is no English form). Can also be expressed as a named parameter, <code>extra=</code> * &lt;{{var|extra2}}>. Optional. Can also be expressed as a named parameter, <code>extra2=</code>. It is only useful in ";" definitions (extra2 will be displayed without bold, whereas text following the template will get the bold). === Examples === ;Regular use: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}}</nowiki></code> |- |'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā}} |} ;Use in lead: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code> |- |'''Gives'''|| {{Nihongo|Tokyo Tower|東京タワー|Tōkyō tawā|lead=yes}} |} ;Without <code>English</code>: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā}}</nowiki></code> |- |'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā}} |} ;Without <code>English</code>, use in lead: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo||東京タワー|Tōkyō tawā|lead=yes}}</nowiki></code> |- |'''Gives'''|| {{Nihongo||東京タワー|Tōkyō tawā|lead=yes}} |} ;With <code>extra</code> to add a literal translation: {| CLASS="wikitable" |'''Code''' ||<code><nowiki>{{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}}</nowiki></code> |- |'''Gives'''|| {{Nihongo|''Sokoban''|倉庫番|Sōko-ban|{{lit|warehouse keeper}}}} |} ;With <code>extra2</code>: {| CLASS="wikitable" |'''Code''' || <code><nowiki>; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}}</nowiki></code><BR /> <code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code> |- |'''Gives'''|| ; {{Nihongo||虚無僧|komusō|extra2='Priest of nothingness'}} : Mendicant priest of the Fuke sect of Zen Buddhism. |} {{hatnote|Note: literal translations and linguistic glosses go in [[MOS:SINGLE|single quotation marks]], not double.}} ;Without <code>extra2</code>: {| CLASS="wikitable" |'''Code''' || <code><nowiki>; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness'</nowiki></code><BR /> <code><nowiki>: Mendicant priest of the Fuke sect of Zen Buddhism.</nowiki></code> |- |'''Gives'''|| <!-- -->; {{Nihongo||虚無僧|komusō}} 'Priest of nothingness' <!-- -->: Mendicant priest of the Fuke sect of Zen Buddhism. |} === User style === [[Help:User style|User style]] can be set by adding code similar to <syntaxhighlight lang="css"> @media screen, tv { *[lang="ja"] { color: green; } }</syntaxhighlight> to [[Special:Mypage/common.css|common.css]]. ==Error messaging== This template emits one error message of its own: :<span class="error" style="font-size:100%">error: <nowiki>{{nihongo}}</nowiki>: Japanese or romaji text required</span> One of the positional parameters <code>&lt;{{var|kanji/kana}}></code> (<code><nowiki>{{{2}}}</nowiki></code>), the 'Japanese' referred to in the error message or <code>&lt;{{var|rōmaji}}></code> (<code><nowiki>{{{3}}}</nowiki></code>) is required for proper operation of this template. Articles with these errors are collected in {{clc|Nihongo template errors}}. This error often occurs because the template is malformed: :<code><nowiki>{{Nihongo|東京タワー}}</nowiki></code> instead of <code><nowiki>{{Nihongo||東京タワー}}</nowiki></code>; {{lang|ja|東京タワー}} is in <code><nowiki>{{{1}}}</nowiki></code> (<code>&lt;{{var|english}}></code>) instead of <code><nowiki>{{{2}}}</nowiki></code> (<code>&lt;{{var|kanji/kana}}></code>). To resolve this error, add the missing pipe (<code>|</code>) or consider using {{tlx|lang}} or {{tlx|transl}} Because this template uses {{tld|lang}} and {{tlx|transl}} which emit their own error messages, see the help text for those at: :{{cl|Lang and lang-xx template errors}} – for error messages emitted by {{tld|lang}} :{{cl|Transl template errors}} – for error messages emitted by {{tld|transl}} ==Limitations== This cannot be used within a Wikilink in an article or in any template or other page that is [[WP:Transclusion|transcluded]] into an article. == See also == * {{tlp|Lang-ja|...}},{{tlp|lang|ja|...}}, similar templates in the [[:Category:Lang-x templates|Lang-x template]] for marking up Japanese text * {{tl|Nihongo3}}, essentially the same as this template, but gives rōmaji first and English inside the parentheses * {{tl|Nihongo krt}}, essentially the same as this template, but gives kanji first with rōmaji and English inside the parentheses * {{tl|Nihongo foot}}, same as this version, but puts everything but the English into a footnote * {{tl|Nihongo2}}, also displays the kanji properly, but without adding anything in parentheses, without rōmaji and without the extra parameters * {{tlp|in lang|ja}}, to label sources written in Japanese * {{tl|Japanese}}, to request expert assistance with Japanese script == Template data == {{TemplateDataHeader}} <templatedata> { "description": "This template is used to display Japanese text, applying the correct code and formatting.", "params": { "1": { "label": "English text", "type": "string", "description": "The word as translated into English. Note this will sometimes be the actual Japanese word if it has been adopted into English." }, "2": { "label": "Kanji/kana text", "type": "string", "required": true, "description": "The word as written in Japanese (kanji, kana, Roman letters, and possibly other marks)." }, "3": { "label": "Romanized (rōmaji) text", "type": "string", "description": "Transliteration of the Japanese word, using Hepburn Romanization." }, "4": { "label": "Extra text inside parentheses", "type": "string", "description": "Adds extra text inside the parentheses. ", "aliases": [ "extra" ] }, "5": { "label": "Extra text outside parentheses", "type": "string", "description": "Adds extra text outside the parentheses. It is only useful in \";\" definitions (it will be displayed without bold, whereas text following the template, will be bolded). Literal translations and linguistic glosses must use single quotation marks, not double.", "aliases": [ "extra2" ] }, "lead": { "label": "Lead formatting", "type": "string", "description": "If set to yes, changes formatting style for the first instance of Japanese, usually in the lead. It gives the reader an idea what kind of non-English writing they are viewing.", "suggestedvalues": [ "yes" ] } }, "paramOrder": [ "1", "2", "3", "lead", "4", "5" ], "format": "inline" } </templatedata> <includeonly>{{Sandbox other|| <!-- Categories go below this line, please; interwikis go to Wikidata, thank you! --> [[Category:Japonic multilingual support templates|{{PAGENAME}}]] [[Category:WikiProject Japan templates|Nihongo]] }}</includeonly> 03b074eb3b2d0663c7e41ac1fa436fb26704810f Module:Nihongo 828 255 752 735 2023-06-06T18:19:28Z Otonashi Ayana 2 Scribunto text/plain require('strict'); --[[--------------------------< E R R O R _ M E S S A G E S >-------------------------------------------------- error messaging; keys to this table are the template base names: 'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc ]] local err_msg = { ['nihongo'] = 'Japanese or romaji text required', ['hanyu'] = 'Chinese or pinyin text required', } local err_cat = { ['nihongo'] = '[[Category:Nihongo template errors]]', ['hanyu'] = '[[Category:Hanyu template errors]]', } --[[--------------------------< C O N F I G U R A T I O N >---------------------------------------------------- configuration setting for the various templates. keys to this table are the template names without spacing ]] local cfg = { ['nihongo'] = { tag = 'ja', system = 'hepburn', system_link = 'Hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo3'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo krt'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo foot'] = { tag = 'ja', system = 'hepburn', system_link = '[[Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['hanyu'] = { tag = 'zh', system = 'pinyin', system_link = '[[Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu3'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu hrt'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu foot'] = { tag = 'zh', system = 'pinyin', system_link = '[[Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, } --[[--------------------------< E R R O R _ M E S S A G E >---------------------------------------------------- Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese> or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors ]] local function error_message (template) local msg = {'<span class="error" style="font-size:100%">error: {{'}; table.insert (msg, template); table.insert (msg, '}}: '); table.insert (msg, cfg[template].err_msg); table.insert (msg, ' ([[Template:'); table.insert (msg, template); table.insert (msg, '|help]])</span>'); if 0 == mw.title.getCurrentTitle().namespace then table.insert (msg, cfg[template].err_cat); end return table.concat (msg); end --[[--------------------------< R E N D E R E R >-------------------------------------------------------------- Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{} from set/unset parameters: args[1] (english text) has a value of 8 (set) or 0 (unset) args[2] (native text) has a value of 4 args[3] (romanized text) has a value of 2 args[4] (extra) has a value of 1 index, the sum of these values, gets the appropriate format string from formatting{} table with associated values from the formatting[index][2] table ]] local function renderer (args, formatting, extra2) local output; local index = 0; -- index into formatting{} local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1) for i=1, 5 do -- spin through args[1] – args[4] index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{} end output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil; if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{} output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced end -- (nihongo and nihongo3) or removed (nihongo foot) return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close end --[[--------------------------< R O M A N I Z E D _ K E R N >-------------------------------------------------- Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses (<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>) <ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced) <romanized> is the return from lang_module._transl() so is not wrapped in parentheses ]] local function romanized_kern (ret_string, romanized) if not romanized or ('' == romanized) then -- if romanized not set return ret_string; -- then we're done end local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned end if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned end return ret_string; -- done end --[[--------------------------< C O M M O N >------------------------------------------------------------------ Common support for {{nihongo}} and {{hanyu}} render order: is translated (English), native, romanized <template> is used to select the appropriate cfg table ]] local function common (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix end if romanized then romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized) {'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized) {'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >---------- Common support for {{nihongo3}} and {{hanyu3}} render order: is romanized, native, translated (English) <template> is used to select the appropriate cfg table ]] local function common_romanized_native_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english) {'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >---------- Common support for {{nihongo krt}} and {{hanyu krt}} render order: is native, romanized, translated (English) <template> is used to select the appropriate cfg table ]] local function common_native_romanized_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>%s', {native}}, -- 4 - native {'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra) {'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized) {'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english) {'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra) {'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english) {'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ F O O T >-------------------------------------------------------- Common support for {{nihongo foot}} and {{hanyu foot}} render order: is English<ref>native, romanized</ref> <template> is used to select the appropriate cfg table ]] local function common_foot (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local post = args[6] or args.post; local group = args.group; local ref_name = args.ref_name local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix end if romanized then romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { {'%s', {extra}}, -- 1 - extra {'%s', {romanized}}, -- 2 - romanized {'%s, %s', {romanized, extra}}, -- 3 - romanized, extra {'%s', {native}}, -- 4 - native {'%s, %s', {native, extra}}, -- 5 - native, extra {'%s, %s', {native, romanized}}, -- 6 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra -- from here english is used in the mapping but not rendered by renderer so not included in the table {'', {''}}, -- 8 - english {'%s', {extra}}, -- 9 - extra {'%s', {romanized}}, -- 10 - romanized {'%s, %s', {romanized, extra}}, -- 11 - romanized, extra {'%s', {native}}, -- 12 - native {'%s, %s', {native, extra}}, -- 13 - native, extra {'%s, %s', {native, romanized}}, -- 14 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra } if english and post then -- rewrite english to include |post= english = english .. post; -- if english has a value append post else just post elseif post then english = post; -- english not set, use post elseif not english then -- neither are set english = ''; -- make english an empty string for concatenation end if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty) local content = renderer (args, formatting, extra2); content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag else return english; -- nothing to be inside ref tag so just return english end end --[=[-------------------------< N I H O N G O >---------------------------------------------------------------- Implement {{nihongo}} using Module:Lang for language and transliteration markup {{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function nihongo (frame) return common (frame, 'nihongo') end --[=[-------------------------< N I H O N G O 3 >-------------------------------------------------------------- Implement {{nihongo3}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo3 (frame) return common_romanized_native_translated (frame, 'nihongo3') end --[=[-------------------------< N I H O N G O _ K R T >-------------------------------------------------------- Implement {{nihongo krt}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo_krt (frame) return common_native_romanized_translated (frame, 'nihongo krt') end --[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------ Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup {{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function nihongo_foot (frame) return common_foot (frame, 'nihongo foot') end --[=[-------------------------< H A N Y U >-------------------------------------------------------------------- Implement {{hanyu}} using Module:Lang for language and transliteration markup {{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function hanyu (frame) return common (frame, 'hanyu') end --[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------ Implement {{hanyu3}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu3 (frame) return common_romanized_native_translated (frame, 'hanyu3') end --[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------ Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu_hrt (frame) return common_native_romanized_translated (frame, 'hanyu hrt') end --[=[-------------------------< H A N Y U _ F O O T >---------------------------------------------------------- Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup {{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function hanyu_foot (frame) return common_foot (frame, 'hanyu foot') end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { nihongo = nihongo, nihongo3 = nihongo3, nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line nihongo_krt = nihongo_krt, nihongo_foot = nihongo_foot, hanyu = hanyu, hanyu3 = hanyu3, hanyu_hrt = hanyu_hrt, hanyu_foot = hanyu_foot, } a76ba0b5728586e6780c54094c300be47fcd3e89 753 752 2023-06-06T18:21:24Z Otonashi Ayana 2 Undo revision 752 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) Scribunto text/plain require('strict'); --[[--------------------------< E R R O R _ M E S S A G E S >-------------------------------------------------- error messaging; keys to this table are the template base names: 'nihongo', 'nihongo3', 'nihongo krt', 'nihongo foot' → 'nihongo' etc ]] local err_msg = { ['nihongo'] = 'Japanese or romaji text required', ['hanyu'] = 'Chinese or pinyin text required', } local err_cat = { ['nihongo'] = '[[Category:Nihongo template errors]]', ['hanyu'] = '[[Category:Hanyu template errors]]', } --[[--------------------------< C O N F I G U R A T I O N >---------------------------------------------------- configuration setting for the various templates. keys to this table are the template names without spacing ]] local cfg = { ['nihongo'] = { tag = 'ja', system = 'hepburn', system_link = '[[w:Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo3'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo krt'] = { tag = 'ja', system = 'hepburn', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['nihongo foot'] = { tag = 'ja', system = 'hepburn', system_link = '[[w:Hepburn romanization|Hepburn]]', err_msg = err_msg.nihongo, err_cat = err_cat.nihongo, }, ['hanyu'] = { tag = 'zh', system = 'pinyin', system_link = '[[w:Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu3'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu hrt'] = { tag = 'zh', system = 'pinyin', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, ['hanyu foot'] = { tag = 'zh', system = 'pinyin', system_link = '[[w:Pinyin]]', err_msg = err_msg.hanyu, err_cat = err_cat.hanyu, }, } --[[--------------------------< E R R O R _ M E S S A G E >---------------------------------------------------- Creates an error message for {{nihongo}}, {{nihongo3}}, {{nihongo krt}}, and {{nihongo foot}} when these template are missing <japanese> or <romaji> inputs; names the offending template, links to template page, and adds article to Category:Nihongo template errors ]] local function error_message (template) local msg = {'<span class="error" style="font-size:100%">error: {{'}; table.insert (msg, template); table.insert (msg, '}}: '); table.insert (msg, cfg[template].err_msg); table.insert (msg, ' ([[Template:'); table.insert (msg, template); table.insert (msg, '|help]])</span>'); if 0 == mw.title.getCurrentTitle().namespace then table.insert (msg, cfg[template].err_cat); end return table.concat (msg); end --[[--------------------------< R E N D E R E R >-------------------------------------------------------------- Shared support function for nihingo(), nihongo3(), and nihongo_foot(). Calculates an index into formatting{} from set/unset parameters: args[1] (english text) has a value of 8 (set) or 0 (unset) args[2] (native text) has a value of 4 args[3] (romanized text) has a value of 2 args[4] (extra) has a value of 1 index, the sum of these values, gets the appropriate format string from formatting{} table with associated values from the formatting[index][2] table ]] local function renderer (args, formatting, extra2) local output; local index = 0; -- index into formatting{} local param_weight = {8, 4, 2, 1}; -- binary parameter weights: [1] = english (8), [2] = japanese (4), [3] = romaji (2), [4] = extra (1) for i=1, 5 do -- spin through args[1] – args[4] index = index + (args[i] and param_weight[i] or 0); -- calculate an index into formatting{} end output = (0 ~= index) and string.format (formatting[index][1] and formatting[index][1], formatting[index][2][1], formatting[index][2][2], formatting[index][2][3], formatting[index][2][4]) or nil; if extra2 then -- always just attached to the end (if there is an end) so not part of formatting{} output = output and (output .. ' ' .. extra2) or '<5p4n>' .. extra2; -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, to be replaced end -- (nihongo and nihongo3) or removed (nihongo foot) return output and (output .. '</5p4n>') or ''; -- where there is output, add secret tag close end --[[--------------------------< R O M A N I Z E D _ K E R N >-------------------------------------------------- Add kerning when first or last character of romanized text contacts adjacent opening or closing paranthesis In this example, without kerning, the romanized characters 'j' and 'V' are italicized so will contact the parentheses (<i lang=\"ja-Latn\" title=\"Hepburn transliteration\">jV</i>) <ret_string> is the formatted template output (except that the magic string '<5p4n>' has not yet been replaced) <romanized> is the return from lang_module._transl() so is not wrapped in parentheses ]] local function romanized_kern (ret_string, romanized) if not romanized or ('' == romanized) then -- if romanized not set return ret_string; -- then we're done end local romanized_text = romanized:gsub ('%b<>', ''):gsub ('\'\'+', ''):gsub ('%[%[', ''):gsub ('%]%]', ''); -- strip html tags romanized = romanized:gsub ('([%(%)%.%%%+%-%*%?%[%^%$%]])', '%%%1'); -- escape lua pattern characters local romanized_has_leading_paren = ret_string:match ('%(' .. romanized); -- has a value if (<romanized>; nil else local romanized_has_trailing_paren = ret_string:match (romanized .. '%)'); -- has a value if <romanized>); nil else local kern_lead_pattern = '^[jpy]'; -- list of characters that when italicized contact unitalicized leading parenthesis local kern_tail_pattern = '[dfijkltCEFHIJKMNPR-Z\'"%?!%]]$'; -- list of characters that when italicized contact unitalicized trailing parenthesis local kern_right = '<span style="margin-right:.09em">(</span>%1'; -- %1 is <romanized> capture local kern_left = '%1<span style="margin-left:.09em">)</span>'; -- %1 is <romanized> capture if romanized_has_leading_paren and romanized_text:match (kern_lead_pattern) then ret_string = ret_string:gsub ('%((' .. romanized .. ')', kern_right); -- replace plain '(' with kerned '('; <romanized> included here to ensure that the correct '(' is kerned end if romanized_has_trailing_paren and romanized_text:match (kern_tail_pattern) then ret_string = ret_string:gsub ('(' .. romanized .. ')%)', kern_left); -- replace plain ')' with kerned ')'; <romanized> included here to ensure that the correct ')' is kerned end return ret_string; -- done end --[[--------------------------< C O M M O N >------------------------------------------------------------------ Common support for {{nihongo}} and {{hanyu}} render order: is translated (English), native, romanized <template> is used to select the appropriate cfg table ]] local function common (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native, ['template']=template}) or lang_module._lang ({cfg[template].tag, native, ['template']=template}); -- add ja script with/without language prefix end if romanized then romanized = (lead and english and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {english, romanized}}, -- 10 - english (romanized) {'%s<5p4n> (%s, %s)', {english, romanized, extra}}, -- 11 - english (romanized, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {english, native, romanized}}, -- 14 - english (native, romanized) {'%s<5p4n> (%s, %s, %s)', {english, native, romanized, extra}}, -- 15 - english (native, romanized, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ R O M A N I Z E D _ N A T I V E _ T R A N S L A T E D >---------- Common support for {{nihongo3}} and {{hanyu3}} render order: is romanized, native, translated (English) <template> is used to select the appropriate cfg table ]] local function common_romanized_native_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>(%s)', {native}}, -- 4 - native {'<5p4n>(%s, %s)', {native, extra}}, -- 5 - (native, extra) {'%s<5p4n> (%s)', {romanized, native}}, -- 6 - romanized (native) {'%s<5p4n> (%s, %s)', {romanized, native, extra}}, -- 7 - romanized (native, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'%s<5p4n> (%s)', {english, native}}, -- 12 - english (native) {'%s<5p4n> (%s, %s)', {english, native, extra}}, -- 13 - english (native, extra) {'%s<5p4n> (%s, %s)', {romanized, native, english}}, -- 14 - romanized (native, english) {'%s<5p4n> (%s, %s, %s)', {romanized, native, english, extra}}, -- 15 - romanized (native, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ N A T I V E _ R O M A N I Z E D _ T R A N S L A T E D >---------- Common support for {{nihongo krt}} and {{hanyu krt}} render order: is native, romanized, translated (English) <template> is used to select the appropriate cfg table ]] local function common_native_romanized_translated (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() if not (native or romanized) then -- not present, return an error message return error_message (template); end native = native and lang_module._lang ({cfg[template].tag, native}) or nil; romanized = romanized and lang_module._transl ({cfg[template].tag, cfg[template].system, romanized}) or nil; local formatting = { -- <5p4n> and </5p4n>: place holders for font-weight style spans; akin to stripmarkers, replaced before function returns {'<5p4n>(%s)', {extra}}, -- 1 - (extra) {'%s<5p4n>', {romanized}}, -- 2 - romanized {'%s<5p4n> (%s)', {romanized, extra}}, -- 3 - romanized (extra) {'<5p4n>%s', {native}}, -- 4 - native {'<5p4n>%s (%s)', {native, extra}}, -- 5 - native (extra) {'<5p4n>%s (%s)', {native, romanized}}, -- 6 - native (romanized) {'<5p4n>%s (%s, %s)', {native, romanized, extra}}, -- 7 - native (romanized, extra) {'%s<5p4n>', {english}}, -- 8 - english {'%s<5p4n> (%s)', {english, extra}}, -- 9 - english (extra) {'%s<5p4n> (%s)', {romanized, english}}, -- 10 - romanized (english) {'%s<5p4n> (%s, %s)', {romanized, english, extra}}, -- 11 - romanized (english, extra) {'<5p4n>%s (%s)', {native, english}}, -- 12 - native (english) {'<5p4n>%s (%s, %s)', {native, english, extra}}, -- 13 - native (english, extra) {'<5p4n>%s (%s, %s)', {native, romanized, english}}, -- 14 - native (romanized, english) {'<5p4n>%s (%s, %s, %s)', {native, romanized, english, extra}}, -- 15 - native (romanized, english, extra) } local ret_string = renderer (args, formatting, extra2) ret_string = romanized_kern (ret_string, romanized); -- kern romanized text when appropriate ret_string = ret_string:gsub ('<5p4n>', '<span style="font-weight: normal">'):gsub ('</5p4n>', '</span>'); -- replace 'secret' tags with proper tags return ret_string; -- because gsub returns the number of replacements made as second return value end --[[--------------------------< C O M M O N _ F O O T >-------------------------------------------------------- Common support for {{nihongo foot}} and {{hanyu foot}} render order: is English<ref>native, romanized</ref> <template> is used to select the appropriate cfg table ]] local function common_foot (frame, template) local lang_module = require ('Module:Lang' .. (frame:getTitle():match ('/sandbox') or '')); -- if this module is the sandbox, use Module:lang/sandbox; Module:Lang else local args = require ('Module:Arguments').getArgs (frame); local english, native, romanized, extra, extra2 = args[1], args[2], args[3], args.extra or args[4], args.extra2 or args[5]; -- meaningful names args[4] = extra or args[4]; -- ensure that extra is 'positional' for use by renderer() local post = args[6] or args.post; local group = args.group; local ref_name = args.ref_name local lead = 'yes' == args.lead; -- make boolean if not (native or romanized) then -- not present, return an error message return error_message (template); end if native then native = lead and lang_module._lang_xx_inherit ({['code']=cfg[template].tag, native}) or lang_module._lang ({cfg[template].tag, native}); -- add ja script with/without language prefix end if romanized then romanized = (lead and (cfg[template].system_link .. ': ') or '') .. lang_module._transl ({'ja', cfg[template].system, romanized}) or nil; end local formatting = { {'%s', {extra}}, -- 1 - extra {'%s', {romanized}}, -- 2 - romanized {'%s, %s', {romanized, extra}}, -- 3 - romanized, extra {'%s', {native}}, -- 4 - native {'%s, %s', {native, extra}}, -- 5 - native, extra {'%s, %s', {native, romanized}}, -- 6 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 7 - native romanized, extra -- from here english is used in the mapping but not rendered by renderer so not included in the table {'', {''}}, -- 8 - english {'%s', {extra}}, -- 9 - extra {'%s', {romanized}}, -- 10 - romanized {'%s, %s', {romanized, extra}}, -- 11 - romanized, extra {'%s', {native}}, -- 12 - native {'%s, %s', {native, extra}}, -- 13 - native, extra {'%s, %s', {native, romanized}}, -- 14 - native romanized {'%s, %s, %s', {native, romanized, extra}}, -- 15 - native romanized, extra } if english and post then -- rewrite english to include |post= english = english .. post; -- if english has a value append post else just post elseif post then english = post; -- english not set, use post elseif not english then -- neither are set english = ''; -- make english an empty string for concatenation end if native or romanized or extra or extra2 then -- no ref tag when none of these are set (it would be empty) local content = renderer (args, formatting, extra2); content = content:gsub ('<5p4n>', ''):gsub ('</5p4n>$', '', 1); -- strip secret <5p4n> and </5p4n> tags added by renderer(); spans not used by this template return english .. frame:extensionTag ({name='ref', args={group=group, name=ref_name}, content=content}); -- english with attached reference tag else return english; -- nothing to be inside ref tag so just return english end end --[=[-------------------------< N I H O N G O >---------------------------------------------------------------- Implement {{nihongo}} using Module:Lang for language and transliteration markup {{Nihongo|<English>|<japanese>|<romaji>|<extra>|<extra2>|lead=yes}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function nihongo (frame) return common (frame, 'nihongo') end --[=[-------------------------< N I H O N G O 3 >-------------------------------------------------------------- Implement {{nihongo3}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo3|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo3 (frame) return common_romanized_native_translated (frame, 'nihongo3') end --[=[-------------------------< N I H O N G O _ K R T >-------------------------------------------------------- Implement {{nihongo krt}} using Module:Lang for language and transliteration markup Similar to {{nihongo}} but changes rendered order and does not support |lead= {{Nihongo krt|<English>|<japanese>|<romaji>|<extra>|<extra2>}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function nihongo_krt (frame) return common_native_romanized_translated (frame, 'nihongo krt') end --[=[-------------------------< N I H O N G O _ F O O T >------------------------------------------------------ Implement {{nihongo_foot}} using Module:Lang for language and transliteration markup {{Nihongo foot|<English>|<japanese>|<romaji>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <japanese>, and <romaji> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <japanese>: Japanese language text using Japanese script; TODO: require? <romaji>: Hepburn romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Hepburn romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-ja}} but also adds [[Hepburn romanization|Hepburn]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Japanese character sets link; this is not supported in this code (nihongo nor nihongo3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function nihongo_foot (frame) return common_foot (frame, 'nihongo foot') end --[=[-------------------------< H A N Y U >-------------------------------------------------------------------- Implement {{hanyu}} using Module:Lang for language and transliteration markup {{hanyu|<English>|<chinese>|<pinyin>|<extra>|<extra2>|lead=yes}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes ]=] local function hanyu (frame) return common (frame, 'hanyu') end --[=[-------------------------< H A N Y U 3 >------------------------------------------------------------------ Implement {{hanyu3}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu3|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu3 (frame) return common_romanized_native_translated (frame, 'hanyu3') end --[=[-------------------------< H A N Y U _ H R T >------------------------------------------------------------ Implement {{hanyu hrt}} using Module:Lang for language and transliteration markup Similar to {{hanyu}} but changes rendered order and does not support |lead= {{hanyu krt|<English>|<chinese>|<pinyin>|<extra>|<extra2>}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> ]=] local function hanyu_hrt (frame) return common_native_romanized_translated (frame, 'hanyu hrt') end --[=[-------------------------< H A N Y U _ F O O T >---------------------------------------------------------- Implement {{hanyu_foot}} using Module:Lang for language and transliteration markup {{hanyu foot|<English>|<chinese>|<pinyin>|<extra>|<extra2>|<post>|lead=yes|group}} <English>, <chinese>, and <pinyin> are positional parameters <English>: rendered as presented; purports to be English translation of <kanji/kana> <chinese>: Chinese language text using Chinese script; TODO: require? <pinyin>: Pinyin romanization (transliteration); TODO: in Module:Lang/data change tooltip text to 'Pinyin romanization'? <extra> and <extra2> are positional or named: |extra= and |extra2=; mixing can be problematic <extra> is rendered as presented preceeded with <comma><space> <extra2> is rendered as presented preceeded with <space> <post> is positional or named: |post= is a postscript character preceding the <ref>..</ref> tag (after <English>) |lead=: takes one value 'yes'; renders language name same as {{lang-zh}} but also adds [[Pinyin]]:<space> ahead of the romanization; TODO: in Module:Lang, turnoff tooltip for transl when |lead=yes in the live template |lead= also adds the Help:Installing Chinese character sets link; this is not supported in this code (hanyu nor hanyu3 have this support) |group=: the group attribute in <ref group="..."> and in {{reflist}} ]=] local function hanyu_foot (frame) return common_foot (frame, 'hanyu foot') end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { nihongo = nihongo, nihongo3 = nihongo3, nihongokrt = nihongo_krt, -- TODO: rename function name in {{#invoke}} to use nihongo_krt; delete this line nihongo_krt = nihongo_krt, nihongo_foot = nihongo_foot, hanyu = hanyu, hanyu3 = hanyu3, hanyu_hrt = hanyu_hrt, hanyu_foot = hanyu_foot, } 7b75c6096a9fe164e76efb2fd2de53544bbe7c1c Cartagra 0 194 754 684 2023-06-06T18:23:01Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Premise == == Characters == == See also == * [[Cartagra/Endings|Endings]] [[Category:Cartagra]] 1c5b1b686ed91366a890cc822a489dcaf144e3db 757 754 2023-06-06T18:28:28Z Otonashi Ayana 2 /* See also */ wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Premise == == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] [[Category:Cartagra]] 2e5e4af6261e1653bba9af630dca2287ea0a785a 770 757 2023-06-06T19:01:25Z Otonashi Ayana 2 /* Premise */ wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by Innocent Grey. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. The story follows a retired police officer, {{n|Shugo|Takashiro}}, as he investigates a series of bizarre murders in Ueno while simultaneously searching for a missing girl. == Premise == In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in the investigation into a string of bizarre murders that are plaguing Ueno. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] [[Category:Cartagra]] af5cffc3724e24d8ef657d3657277ba4c8f01984 771 770 2023-06-06T19:03:46Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a murder mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. == Premise == In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in the investigation into a string of bizarre murders that are plaguing Ueno. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] [[Category:Cartagra]] 0cf1439f9716d990f8101fe255dd68999abb2bca 772 771 2023-06-06T19:04:38Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. == Premise == In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in the investigation into a string of bizarre murders that are plaguing Ueno. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] [[Category:Cartagra]] 833a417607ee4d2590c96f1b03abd37cacbed5ed Template:Kns/cat 10 264 755 2023-06-06T18:25:41Z Otonashi Ayana 2 Created page with "<includeonly>[[Category:Kara no Shōjo]]</includeonly>" wikitext text/x-wiki <includeonly>[[Category:Kara no Shōjo]]</includeonly> 390d0f6b3cdaefe3eab2d44bef250c523c0ecc88 Kara no Shoujo 0 181 756 659 2023-06-06T18:28:03Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[Cartagra/Endings|Endings]] {{kns/cat}} bef08047c8b0d9755d4a50065a3aeaaaba98a719 758 756 2023-06-06T18:28:33Z Otonashi Ayana 2 /* See also */ wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a murder mystery visual novel developed by Innocent Grey. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} d45859bd8dfb1894b0564369861bc7fce9096f5c 773 758 2023-06-06T19:11:25Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist in a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} efcc3742f38a3121ca33ce586c18aee22b91d331 774 773 2023-06-06T19:11:42Z Otonashi Ayana 2 /* Premise */ wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}} is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} 2cff0ec06b5ec95edcb0c763030ef01db72fe128 Cartagra/Endings 0 230 759 685 2023-06-06T18:29:16Z Otonashi Ayana 2 wikitext text/x-wiki {{cartagra}} has numerous Bad Ends, two neutral Ends, and one True End. === Neutral End (Hatsune) === === Neutral End (Kazuna) === === True End === Obtainable only after completing Kazuna's neutral End. === Bad Ends === ; {{o|Takako|Ayasaki}} Ending (Nightmare Ending) ; {{o|Kaori|Fukamizu}} Ending (Nun Ending) ; {{o|Nana|Takashiro}} Ending ; Koyuki & Seri Ending 6ffe10d615841789f0fc12599410f46f5dd1ffd5 Kara no Shoujo/Endings 0 265 760 2023-06-06T18:44:02Z Otonashi Ayana 2 Created page with "{{kns}} has numerous Bad Ends, four neutral Ends, and one True End. === Neutral End ({{o|Shinji|Mamiya}}) === === Neutral End (II) === === Neutral End (III) === *If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found. === Neutral End (IV) === === True End (Azure Bird) === In order to get this ending, Reiji must: * Look at Toko's painting === Bad Ends === ; {{o|Orihime|Tsukishima}} ; {{o..." wikitext text/x-wiki {{kns}} has numerous Bad Ends, four neutral Ends, and one True End. === Neutral End ({{o|Shinji|Mamiya}}) === === Neutral End (II) === === Neutral End (III) === *If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found. === Neutral End (IV) === === True End (Azure Bird) === In order to get this ending, Reiji must: * Look at Toko's painting === Bad Ends === ; {{o|Orihime|Tsukishima}} ; {{o|Toko|Mizuhara}} ; {{o|Nene|Akazaki}} ; Toko Died ; Toko Survived 620a968aed0333795b21159421781d9808c3229c 761 760 2023-06-06T18:44:52Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:Kara no Shōjo/Endings}} {{kns}} has numerous Bad Ends, four neutral Ends, and one True End. === Neutral End ({{o|Shinji|Mamiya}}) === === Neutral End (II) === === Neutral End (III) === *If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found. === Neutral End (IV) === === True End (Azure Bird) === In order to get this ending, Reiji must: * Look at Toko's painting === Bad Ends === ; {{o|Orihime|Tsukishima}} ; {{o|Toko|Mizuhara}} ; {{o|Nene|Akazaki}} ; Toko Died ; Toko Survived 7b5250f385ac3eee905297a7f86692603d15b3e3 762 761 2023-06-06T18:45:06Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''/Endings}} {{kns}} has numerous Bad Ends, four neutral Ends, and one True End. === Neutral End ({{o|Shinji|Mamiya}}) === === Neutral End (II) === === Neutral End (III) === *If the player has already achieved at least one neutral ending (including this one), then a special event with Hatsune can be found. === Neutral End (IV) === === True End (Azure Bird) === In order to get this ending, Reiji must: * Look at Toko's painting === Bad Ends === ; {{o|Orihime|Tsukishima}} ; {{o|Toko|Mizuhara}} ; {{o|Nene|Akazaki}} ; Toko Died ; Toko Survived bd33ed06cf9ddcefdcbcd22bb083e26fb4c71e04 Kara no Shōjo 0 266 763 2023-06-06T18:45:52Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo]] 0bf375957100375d059b3b83ab5cc9da24088021 How to see spoilers 0 267 764 2023-06-06T18:47:50Z Otonashi Ayana 2 Created page with "In order to '''see spoilers''' on this wiki, follow these steps: # Register an account # Go to your profile preferences # Go to the "Gadgets" tab # Under the "Spoilers" header, select which games you would like to see spoilers for" wikitext text/x-wiki In order to '''see spoilers''' on this wiki, follow these steps: # Register an account # Go to your profile preferences # Go to the "Gadgets" tab # Under the "Spoilers" header, select which games you would like to see spoilers for 191a224c630d5963fb171ead56425469eddb7089 765 764 2023-06-06T18:48:39Z Otonashi Ayana 2 wikitext text/x-wiki In order to '''see spoilers''' on this wiki, follow these steps: # [[Special:CreateAccount|Create an account]] # Go to your profile preferences # Go to the "Gadgets" tab # Under the "Spoilers" header, select which games you would like to see spoilers for 8a7b136e233ebfc51e81a4ced4aeacff778354c6 766 765 2023-06-06T18:49:51Z Otonashi Ayana 2 wikitext text/x-wiki In order to '''see spoilers''' on this wiki, follow these steps: # [[Special:CreateAccount|Create an account]] # Go to your [[Special:Preferences|profile preferences]] # Go to the "[[Special:Preferences#mw-prefsection-gadgets|Gadgets]]" tab # Under the "Spoilers" header, select which games you would like to see spoilers for 87d52ac7dec91a1eb1223e192c24201d639ca42a 767 766 2023-06-06T18:50:17Z Otonashi Ayana 2 wikitext text/x-wiki In order to '''see spoilers''' on this wiki, follow these steps: # [[Special:CreateAccount|Create an account]] # Go to the "[[Special:Preferences#mw-prefsection-gadgets|Gadgets]]" tab under your profile preferences page. # Under the "Spoilers" header, select which games you would like to see spoilers for f02c5d94324ab9ab03f52f54f8f7e5a4866691aa 768 767 2023-06-06T18:51:17Z Otonashi Ayana 2 wikitext text/x-wiki In order to '''see spoilers''' on this wiki, follow these steps: # [[Special:CreateAccount|Create an account]] # Go to the "Gadgets" tab under your profile preferences page (''Clicking [[Special:Preferences#mw-prefsection-gadgets|'''this link''']] should take you directly there'') # Under the "Spoilers" header, select which games you would like to see spoilers for 90de4fa0ac7bb56989e9b01285b4e9f7f22fd930 Category:Articles containing Japanese-language text 14 268 769 2023-06-06T18:55:24Z Otonashi Ayana 2 Created page with "__HIDDENCAT__" wikitext text/x-wiki __HIDDENCAT__ 183b9c38bff80327776bd180634fccfd19cf616f Template:Kns/nl 10 269 775 2023-06-06T19:13:08Z Otonashi Ayana 2 Created page with "''Kara no Shōjo''" wikitext text/x-wiki ''Kara no Shōjo'' 92aeed284b7cce7380ec94de77c1e50485d00b5b Reiji Tokisaka 0 42 776 319 2023-06-06T19:14:02Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on to voice him for the release of the Full HD Voice Edition, as well as subsequent {{kns/nl}} titles. {{kns characters}} cd8463600d6737981691ac6be74136510b501032 777 776 2023-06-06T19:14:36Z Otonashi Ayana 2 /* Trivia */ wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as subsequent {{kns/nl}} titles. {{kns characters}} 38cd8f435d889c15a860de3e2cea69d64f6a7d75 778 777 2023-06-06T19:14:54Z Otonashi Ayana 2 /* Trivia */ wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }} == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} 7d1f7930c393b2a2cb59a5ee95b2999726f85c8b File:Stoj0102a.png 6 270 779 2023-06-06T19:38:00Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Infobox character/doc 10 169 780 681 2023-06-06T19:38:52Z Otonashi Ayana 2 wikitext text/x-wiki <pre> {{infobox character | given name = | family name = | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}</pre> 509f1e58e6884b0df129612705cb1e0e58cbf31e File:Shuy0101a.png 6 271 781 2023-06-06T19:39:14Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Tsuzuriko Yosomiya 0 272 782 2023-06-06T19:39:35Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Tsuzuriko | family name = Yosomiya | jname = | image = [[File:stoj0102a.png|x300px]] | aka = Tojiko | gender = Female | age = | appearance = {{kns}} | seiyu = | relations = }}'''{{c}}''', commonly referred to by the nickname '''Tojiko''', is a student at [[Ouba Girls Academy]]. She is an aspiring writer who frequently submits her works to literary magazines. {{kns characters}}" wikitext text/x-wiki {{infobox character | given name = Tsuzuriko | family name = Yosomiya | jname = | image = [[File:stoj0102a.png|x300px]] | aka = Tojiko | gender = Female | age = | appearance = {{kns}} | seiyu = | relations = }}'''{{c}}''', commonly referred to by the nickname '''Tojiko''', is a student at [[Ouba Girls Academy]]. She is an aspiring writer who frequently submits her works to literary magazines. {{kns characters}} 20f1eeb4b6abd92ea9bc4b1b685470470bc665b1 Toko Kuchiki 0 273 783 2023-06-06T19:39:41Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Toko | family name = Kuchiki | jname = | image = [[File:shuy0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an enigmatic girl who attends [[Ouba Girls Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens. {{kns characters}}" wikitext text/x-wiki {{infobox character | given name = Toko | family name = Kuchiki | jname = | image = [[File:shuy0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an enigmatic girl who attends [[Ouba Girls Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens. {{kns characters}} 2de65bdee6ced26598dd46a30a43d88d26127523 MediaWiki:Common.css 8 7 784 674 2023-06-06T19:44:00Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting:Merienda; --theme-color:#EFA5A5; } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* Default style for navigation boxes */ .navbox { /* Navbox container style */ border: 1px solid #aaa; width: 100%; margin: auto; clear: both; font-size: 88%; text-align: center; padding: 1px; } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; /* Title, group and above/below styles */ line-height: 1.5em; text-align: center; } th.navbox-group { /* Group style */ white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background: #fdfdfd; /* Background color */ } .navbox-list { line-height: 1.8em; border-color: #fdfdfd; /* Must match background color */ } .navbox th, .navbox-title { background: #ccccff; /* Level 1 color */ } .navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { background: #ddddff; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background: #e6e6ff; /* Level 3 color */ } .navbox-even { background: #f7f7f7; /* Even row striping */ } .navbox-odd { background: transparent; /* Odd row striping */ } table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */ margin-top: -1px; /* (doesn't work for IE6, but that's okay) */ } .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; /* Adjust hlist padding in navboxes */ } ol + table.navbox, ul + table.navbox { margin-top: 0.5em; /* Prevent lists from clinging to navboxes */ } /* Default styling for Navbar template */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .navbar li { word-spacing: -0.125em; } .navbar.mini li span { font-variant: small-caps; } /* Navbar styling when nested in infobox and navbox */ .infobox .navbar { font-size: 100%; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; width: 6em; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 385d5f0955358f8260a941b72a0880e691b5f730 File:Academy front.png 6 274 785 2023-06-06T19:46:29Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Ouba Private Girls' Academy 0 275 786 2023-06-06T19:51:34Z Otonashi Ayana 2 Created page with "[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|]]. {{locations}}" wikitext text/x-wiki [[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. {{locations}} a25f9addb2f0811aa6a0b568aefca4d2820d9de0 789 786 2023-06-06T19:55:51Z Otonashi Ayana 2 wikitext text/x-wiki [[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. === Known Students === * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tori|Kohane}} * {{n|Ayumu|Sato}} * {{n|Orihime|Tsukishime}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Yui|Nishizono}} * {{n|Haruka|Imamura}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takigawa}} === Known Faculty === * {{n|Tokio|Saeki}} * {{n|Tatsuhiko|Kusaka}} * {{n|Nene|Akazaki}} * {{n|Reiji|Tokisaka}} (temporary) {{locations}} 7bedf232c036066ff29cfe12c85a8498580e5072 Category:Locations 14 277 788 2023-06-06T19:52:05Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Breadcrumb 10 278 792 791 2023-06-06T20:06:14Z Otonashi Ayana 2 1 revision imported from [[:wikipedia:Template:Breadcrumb]]: w wikitext text/x-wiki <div role="navigation" aria-label="Breadcrumb" id="contentSub" class="plainlinks nourlexpansion" style="position:relative;{{#switch:{{{28px}}}|yes|yes=bottom:28px;}}" {{#switch:{{{align}}}|right|right=align="right"}}{{#switch:{{{right}}}|yes|yes=align="right"}}><span class="subpages">{{{1<noinclude>|&lt; [[Breadcrumb (navigation)|Breadcrumb]]</noinclude>}}}{{ #if:{{{2|<noinclude>2</noinclude>}}}|&#32;&#124; {{{2<noinclude>|2</noinclude>}}}}}{{ #if:{{{3|<noinclude>3</noinclude>}}}|&#32;&#124; {{{3<noinclude>|3</noinclude>}}}}}{{ #if:{{{4|<noinclude>4</noinclude>}}}|&#32;&#124; {{{4<noinclude>|4</noinclude>}}}}}{{ #if:{{{5|<noinclude>5</noinclude>}}}|&#32;&#124; {{{5<noinclude>|5</noinclude>}}}}}</span></div><noinclude> {{documentation|content= There is also an optional parameter named <nowiki>{{{align}}}</nowiki>, which allows users to align their breadcrumb at the right side of the page. Use <code><nowiki>|align=right</nowiki></code> to do so. If you are using a back and forth system using two breadcrumbs on a single page, please also add the optional <code><nowiki>|28px=yes</nowiki></code> parameter to the breadcrumb at the right side. [[Category:Wikipedia formatting and function templates]] }}</noinclude> e5e41ee10cee6ebf0e4bb1d4310051f1989deb87 Template:Subpage 10 279 794 2023-06-06T20:10:16Z Otonashi Ayana 2 Created page with "<div style="font-size:12px;margin-left:12px;margin-top:-12px;margin-bottom:10px;">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div>" wikitext text/x-wiki <div style="font-size:12px;margin-left:12px;margin-top:-12px;margin-bottom:10px;">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div> a6e57eda30b8a1a008329663453c07df011d60e7 796 794 2023-06-06T20:12:00Z Otonashi Ayana 2 wikitext text/x-wiki <span class="subpages">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span> edc59325a650572101edc3e2adbf097a18a41196 797 796 2023-06-06T20:12:40Z Otonashi Ayana 2 wikitext text/x-wiki <span class="crumb">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span> cf91ff61cca9a014281e13d9fb494ea9e4f1991d 798 797 2023-06-06T20:14:48Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><span class="crumb">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span> 5515b1000b7b4abbe3674087d5e11b917db7223c 800 798 2023-06-06T20:17:42Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><span class="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span> ed059d295974730ee6ac971cab32e97942ec33ba 802 800 2023-06-06T20:20:14Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><div class="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div> 00e50a5359a00cb85dd60c926f4124e7a30e550a Template:Subpage/styles.css 10 280 799 2023-06-06T20:17:10Z Otonashi Ayana 2 Created page with ".crumb{ font-size: 84%; } .crumb::before{ content: '< '; }" sanitized-css text/css .crumb{ font-size: 84%; } .crumb::before{ content: '< '; } c2d2e35b3ec0cdedd9d3f436fe10fe1daec9d4df Template:Subpage/styles.css 10 280 803 799 2023-06-06T20:21:09Z Otonashi Ayana 2 sanitized-css text/css .crumb{ font-size: 84%; line-height: 1.2em; } .crumb::before{ content: '< '; } c8cb4bef5ea9f70f99e476a5b1ed9118dd5417c1 810 803 2023-06-06T20:26:09Z Otonashi Ayana 2 sanitized-css text/css .crumb{ font-size: 84%; line-height: 1.2em; margin: -16px 0 16px 0; } .crumb::before{ content: '< '; } dda98dffbe9de9b405af31af03912c9e933bad7b 811 810 2023-06-06T20:26:30Z Otonashi Ayana 2 sanitized-css text/css .crumb{ font-size: 84%; line-height: 1.2em; margin: -10px 0 16px 0; } .crumb::before{ content: '< '; } bf20f35f843de114b0d4b3a9303cdd4839445cb4 812 811 2023-06-06T20:26:56Z Otonashi Ayana 2 sanitized-css text/css .crumb{ font-size: 84%; line-height: 1.2em; margin: -8px 0 16px 0; } .crumb::before{ content: '< '; } 63e53453e3b865dd72f323d21c6050b4e0e37145 Template:Subpage 10 279 804 802 2023-06-06T20:22:01Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><div class="contentSub"><span class="subpages"{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span></div> c236f77ce4ab34bd87589014b8d473d7d1760792 805 804 2023-06-06T20:22:16Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><div id="contentSub"><span class="subpages">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span></div> a9abc37ff2172333d49e9c68573167c9d91144fe 806 805 2023-06-06T20:23:11Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><div id="contentSub"><span class="subpages">< {{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</span></div> 0ed088716082222984b019026110ec42873ea939 808 806 2023-06-06T20:23:59Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><div id="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div> fa01cdf5af51c8248706cf38a9962aaaf9f482de 809 808 2023-06-06T20:24:42Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Subpage/styles.css" /><div class="crumb">{{#if: {{{2|}}} | [[{{{1}}}|{{{2|}}}]] | [[{{{1}}}]] }}</div> 00e50a5359a00cb85dd60c926f4124e7a30e550a Ouba Private Girls' Academy 0 275 807 789 2023-06-06T20:23:19Z Otonashi Ayana 2 wikitext text/x-wiki {{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. === Known Students === * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tori|Kohane}} * {{n|Ayumu|Sato}} * {{n|Orihime|Tsukishime}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Yui|Nishizono}} * {{n|Haruka|Imamura}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takigawa}} === Known Faculty === * {{n|Tokio|Saeki}} * {{n|Tatsuhiko|Kusaka}} * {{n|Nene|Akazaki}} * {{n|Reiji|Tokisaka}} (temporary) {{locations}} 6cdc56ac953d88edfbb25fd5d48c2edf80153561 814 807 2023-06-06T20:28:54Z Otonashi Ayana 2 Otonashi Ayana moved page [[Ouba Girls Academy]] to [[Ouba Private Girls' Academy]] wikitext text/x-wiki {{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]'''Ouba Girls Academy''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. === Known Students === * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tori|Kohane}} * {{n|Ayumu|Sato}} * {{n|Orihime|Tsukishime}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Yui|Nishizono}} * {{n|Haruka|Imamura}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takigawa}} === Known Faculty === * {{n|Tokio|Saeki}} * {{n|Tatsuhiko|Kusaka}} * {{n|Nene|Akazaki}} * {{n|Reiji|Tokisaka}} (temporary) {{locations}} 6cdc56ac953d88edfbb25fd5d48c2edf80153561 816 814 2023-06-06T20:29:09Z Otonashi Ayana 2 wikitext text/x-wiki {{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]''{{PAGENAME}}''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. === Known Students === * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tori|Kohane}} * {{n|Ayumu|Sato}} * {{n|Orihime|Tsukishime}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Yui|Nishizono}} * {{n|Haruka|Imamura}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takigawa}} === Known Faculty === * {{n|Tokio|Saeki}} * {{n|Tatsuhiko|Kusaka}} * {{n|Nene|Akazaki}} * {{n|Reiji|Tokisaka}} (temporary) {{locations}} 3b36eda579c18bb3436d6244b082f02920cf146d 817 816 2023-06-06T20:29:36Z Otonashi Ayana 2 wikitext text/x-wiki {{subpage|List of locations}}[[File:academy front.png|thumb|The exterior of the Academy]]'''{{PAGENAME}}''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. === Known Students === * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tori|Kohane}} * {{n|Ayumu|Sato}} * {{n|Orihime|Tsukishime}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Yui|Nishizono}} * {{n|Haruka|Imamura}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takigawa}} === Known Faculty === * {{n|Tokio|Saeki}} * {{n|Tatsuhiko|Kusaka}} * {{n|Nene|Akazaki}} * {{n|Reiji|Tokisaka}} (temporary) {{locations}} 638dca905863d9cd883dec72b23f828f9be2428a List of locations 0 281 813 2023-06-06T20:28:31Z Otonashi Ayana 2 Created page with "* [[Ouba Private Girls' Academy]] * [[Moon World]] * [[Kuchiki Residence]] * [[Kuchiki Hospital]] * [[Shinjuku Station]] * [[Tokisaka Detective Agency]]" wikitext text/x-wiki * [[Ouba Private Girls' Academy]] * [[Moon World]] * [[Kuchiki Residence]] * [[Kuchiki Hospital]] * [[Shinjuku Station]] * [[Tokisaka Detective Agency]] be016398cbeb3629be25e8960f48c22548fbe452 Ouba Girls Academy 0 282 815 2023-06-06T20:28:54Z Otonashi Ayana 2 Otonashi Ayana moved page [[Ouba Girls Academy]] to [[Ouba Private Girls' Academy]] wikitext text/x-wiki #REDIRECT [[Ouba Private Girls' Academy]] 958064dcbeb0a373cf9a7743773304a4c42f77db File:Favicon.ico 6 283 818 2023-06-06T20:35:35Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 821 818 2023-06-06T20:44:26Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Favicon.ico]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 823 821 2023-06-06T21:25:35Z Otonashi Ayana 2 Otonashi Ayana reverted [[File:Favicon.ico]] to an old version wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Favicon.png 6 284 819 2023-06-06T20:36:37Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 820 819 2023-06-06T20:43:38Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Favicon.png]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 824 820 2023-06-06T21:25:50Z Otonashi Ayana 2 Otonashi Ayana reverted [[File:Favicon.png]] to an old version wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 File:Wiki logo.png 6 285 822 2023-06-06T21:24:58Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 828 822 2023-06-06T22:24:51Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Wiki logo.png]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 829 828 2023-06-06T22:26:18Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Wiki logo.png]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 838 829 2023-06-06T23:30:29Z Otonashi Ayana 2 Otonashi Ayana reverted [[File:Wiki logo.png]] to an old version wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 839 838 2023-06-06T23:31:07Z Otonashi Ayana 2 Otonashi Ayana reverted [[File:Wiki logo.png]] to an old version wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Common.css 8 7 825 784 2023-06-06T21:36:25Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting:Merienda; --theme-color:#EFA5A5; } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* Default style for navigation boxes */ .navbox { /* Navbox container style */ border: 1px solid #aaa; width: 100%; margin: auto; clear: both; font-size: 88%; text-align: center; padding: 1px; } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; /* Title, group and above/below styles */ line-height: 1.5em; text-align: center; } th.navbox-group { /* Group style */ white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background: #fdfdfd; /* Background color */ } .navbox-list { line-height: 1.8em; border-color: #fdfdfd; /* Must match background color */ } .navbox th, .navbox-title { background: #ccccff; /* Level 1 color */ } .navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { background: #ddddff; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background: #e6e6ff; /* Level 3 color */ } .navbox-even { background: #f7f7f7; /* Even row striping */ } .navbox-odd { background: transparent; /* Odd row striping */ } table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */ margin-top: -1px; /* (doesn't work for IE6, but that's okay) */ } .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; /* Adjust hlist padding in navboxes */ } ol + table.navbox, ul + table.navbox { margin-top: 0.5em; /* Prevent lists from clinging to navboxes */ } /* Default styling for Navbar template */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .navbar li { word-spacing: -0.125em; } .navbar.mini li span { font-variant: small-caps; } /* Navbar styling when nested in infobox and navbox */ .infobox .navbar { font-size: 100%; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; width: 6em; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 6b33cb467ff4827f4cd24970e268f6dfa81b9cd8 840 825 2023-06-07T02:30:55Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* Default style for navigation boxes */ .navbox { /* Navbox container style */ border: 1px solid #aaa; width: 100%; margin: auto; clear: both; font-size: 88%; text-align: center; padding: 1px; } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; /* Title, group and above/below styles */ line-height: 1.5em; text-align: center; } th.navbox-group { /* Group style */ white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background: #fdfdfd; /* Background color */ } .navbox-list { line-height: 1.8em; border-color: #fdfdfd; /* Must match background color */ } .navbox th, .navbox-title { background: #ccccff; /* Level 1 color */ } .navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { background: #ddddff; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background: #e6e6ff; /* Level 3 color */ } .navbox-even { background: #f7f7f7; /* Even row striping */ } .navbox-odd { background: transparent; /* Odd row striping */ } table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */ margin-top: -1px; /* (doesn't work for IE6, but that's okay) */ } .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; /* Adjust hlist padding in navboxes */ } ol + table.navbox, ul + table.navbox { margin-top: 0.5em; /* Prevent lists from clinging to navboxes */ } /* Default styling for Navbar template */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .navbar li { word-spacing: -0.125em; } .navbar.mini li span { font-variant: small-caps; } /* Navbar styling when nested in infobox and navbox */ .infobox .navbar { font-size: 100%; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; width: 6em; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ f8684745c2e14d20d9fdf18ee35a134dbe36e9d5 842 840 2023-06-07T02:44:48Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; } /* Variable lines that don't work with templatestyles because of course */ .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* Default style for navigation boxes */ .navbox { /* Navbox container style */ border: 1px solid #aaa; width: 100%; margin: auto; clear: both; font-size: 88%; text-align: center; padding: 1px; } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; /* Title, group and above/below styles */ line-height: 1.5em; text-align: center; } th.navbox-group { /* Group style */ white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background: #fdfdfd; /* Background color */ } .navbox-list { line-height: 1.8em; border-color: #fdfdfd; /* Must match background color */ } .navbox th, .navbox-title { background: #ccccff; /* Level 1 color */ } .navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { background: #ddddff; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background: #e6e6ff; /* Level 3 color */ } .navbox-even { background: #f7f7f7; /* Even row striping */ } .navbox-odd { background: transparent; /* Odd row striping */ } table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */ margin-top: -1px; /* (doesn't work for IE6, but that's okay) */ } .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; /* Adjust hlist padding in navboxes */ } ol + table.navbox, ul + table.navbox { margin-top: 0.5em; /* Prevent lists from clinging to navboxes */ } /* Default styling for Navbar template */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .navbar li { word-spacing: -0.125em; } .navbar.mini li span { font-variant: small-caps; } /* Navbar styling when nested in infobox and navbox */ .infobox .navbar { font-size: 100%; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; width: 6em; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 54a36a9965fb6f6b6be0c521ca72cc587309f078 844 842 2023-06-07T02:47:07Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* Default style for navigation boxes */ .navbox { /* Navbox container style */ border: 1px solid #aaa; width: 100%; margin: auto; clear: both; font-size: 88%; text-align: center; padding: 1px; } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; /* Title, group and above/below styles */ line-height: 1.5em; text-align: center; } th.navbox-group { /* Group style */ white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background: #fdfdfd; /* Background color */ } .navbox-list { line-height: 1.8em; border-color: #fdfdfd; /* Must match background color */ } .navbox th, .navbox-title { background: #ccccff; /* Level 1 color */ } .navbox-abovebelow, th.navbox-group, .navbox-subgroup .navbox-title { background: #ddddff; /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background: #e6e6ff; /* Level 3 color */ } .navbox-even { background: #f7f7f7; /* Even row striping */ } .navbox-odd { background: transparent; /* Odd row striping */ } table.navbox + table.navbox { /* Single pixel border between adjacent navboxes */ margin-top: -1px; /* (doesn't work for IE6, but that's okay) */ } .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; /* Adjust hlist padding in navboxes */ } ol + table.navbox, ul + table.navbox { margin-top: 0.5em; /* Prevent lists from clinging to navboxes */ } /* Default styling for Navbar template */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar ul { display: inline; white-space: nowrap; } .navbar li { word-spacing: -0.125em; } .navbar.mini li span { font-variant: small-caps; } /* Navbar styling when nested in infobox and navbox */ .infobox .navbar { font-size: 100%; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; width: 6em; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 82b99331272226ef7289149f28f40f24e79a70af 845 844 2023-06-07T02:49:44Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ f45686ba614907ba5265ab9ea3f12c4632bd0ecf 846 845 2023-06-07T19:26:37Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ fbb327cec9268341c10e93a75718dbf21f2463a8 847 846 2023-06-07T19:35:07Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ cac3f451ed770572e0189c118e50df4493faac0a 848 847 2023-06-07T19:39:32Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } .mw-list-item-selected a{ color: var(--color-white) !important; } #mw-panel{ background-color: var(--color-base-2); } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 55f6d1a621abb7546b8665d2e8c6aa05b720da8b 849 848 2023-06-07T19:45:32Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } a{ color: var(--color-blue) !important; } .mw-list-item-selected a{ color: var(--color-white) !important; } #mw-panel{ background-color: var(--color-base-2); } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 2c7fe169b2e39221001622cbf4d6563006b7dc9e 850 849 2023-06-07T19:46:46Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } a{ color: var(--color-blue); } .mw-list-item-selected a{ color: var(--color-white) !important; } #mw-panel{ background-color: var(--color-base-2); } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 58dcbb800cac6ec877a93d72387bc8e10232950d 851 850 2023-06-07T19:57:21Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body, li{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } a{ color: var(--color-blue); } ul { list-style: none; /* Remove default bullets */ } ul li::before { content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */ color: var(--color-white); /* Change the color */ font-weight: bold; /* If you want it to be bold */ display: inline-block; /* Needed to add space between the bullet and the text */ width: 1em; margin-left: -1em; } .mw-list-item-selected a{ color: var(--color-white) !important; } #mw-panel{ background-color: var(--color-base-2); } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ a1df4d021d25e94c5f1ae05753250d834116a44f 852 851 2023-06-07T20:13:43Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body, li{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } a, .mw-list-item a{ color: var(--color-blue); } .mw-body ul { list-style: none; /* Remove default bullets */ } .mw-body ul li::before { content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */ color: var(--color-white); /* Change the color */ font-weight: bold; /* If you want it to be bold */ display: inline-block; /* Needed to add space between the bullet and the text */ width: 1em; margin-left: -1em; } .mw-list-item-selected a{ color: var(--color-white) !important; } #mw-panel{ background-color: var(--color-base-2); } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 02e9ceaf869175fcfb488ac947b2f9c2977c793f 853 852 2023-06-07T20:18:49Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } .mw-page-container{ background-color: var(--color-base) !important; } body, li{ color: var(--color-white) !important; } h1, h2, h3, h4, h5, h6{ color: var(--color-white-2) !important; } a, .mw-list-item a{ color: var(--color-blue); } .mw-parser-output ul { list-style: none; /* Remove default bullets */ } .mw-parser-output ul li::before { content: "\2022"; /* Add content: \2022 is the CSS Code/unicode for a bullet */ color: var(--color-white); /* Change the color */ font-weight: bold; /* If you want it to be bold */ display: inline-block; /* Needed to add space between the bullet and the text */ width: 1em; margin-left: -1em; } .mw-list-item-selected a{ color: var(--color-white) !important; } #mw-panel{ background-color: var(--color-base-2); } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 66a7b943c085cd3c5631cdfc5de17da1e56d9af5 854 853 2023-06-07T20:23:55Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #8C3838; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 0b63c36a686c4d38f77e78d9716a5f3253ba104a 857 854 2023-06-07T22:12:54Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #D39292; --color-theme-2: #8C2A2A; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 7b9a3aa80c8a5c1ac4c5fe37a38a3bf6983195a2 859 857 2023-06-09T14:42:22Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5; --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 4c4cc9fd342a6e679e782a2f9e3458023d0d1f0b File:Wiki wordmark.svg 6 287 836 2023-06-06T23:07:23Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 837 836 2023-06-06T23:09:20Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Wiki wordmark.svg]] wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Infobox character 10 2 841 679 2023-06-07T02:32:24Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox | abovestyle = font-weight:normal; | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly> <noinclude>{{documentation}}</noinclude> 793bd9e4d0ce6f2190bdf3755101f4f785d8b49e 855 841 2023-06-07T20:28:22Z Otonashi Ayana 2 Undo revision 841 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki <includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly> <noinclude>{{documentation}}</noinclude> bd7b8cc02ceeb0e7a50b512b576d02e108f83238 856 855 2023-06-07T22:10:25Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{#if:{{{name|}}}||{{#vardefine:given|{{{given name|}}} }} {{#vardefine:family|{{{family name|}}} }} }}{{ infobox | abovestyle = background:var(--color-theme);font-weight:normal; | headerstyle = background:var(--color-theme); | bodystyle = border-spacing:3.5px; | above = '''{{#if:{{{name|}}}|{{{name|}}}|{{character name}}}}'''<br>{{{jname|}}} | header1 = Character Information | image = {{{image}}} | label2 = Also Known As | data2 = {{{aka|}}} | label3 = Gender | data3 = {{{gender|}}} | label4 = Age | data4 = {{{age|}}} | label5 = Likes | data5 = {{{likes|}}} | label6 = First Appearance | data6 = {{{appearance}}} | label7 = Portrayed By | data7 = {{{seiyu|}}} | label8 = Relationships | data8 = {{{relations|}}} }}{{#if:{{{name|}}}||{{DISPLAYTITLE:{{character name}} }} }}</includeonly> <noinclude>{{documentation}}</noinclude> 4b09feb1200d29797745b6a5c74672d752dab056 Module:Navbox/styles.css 828 96 843 209 2023-06-07T02:44:52Z Otonashi Ayana 2 sanitized-css text/css /* {{pp|small=y}} */ .navbox { box-sizing: border-box; border: 1px solid #a2a9b1; width: 100%; clear: both; font-size: 88%; text-align: center; padding: 1px; margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ } .navbox .navbox { margin-top: 0; /* No top margin for nested navboxes */ } .navbox + .navbox, /* TODO: remove first line after transclusions have updated */ .navbox + .navbox-styles + .navbox { margin-top: -1px; /* Single pixel border between adjacent navboxes */ } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; line-height: 1.5em; text-align: center; } .navbox-group { white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background-color: #fdfdfd; } .navbox-list { line-height: 1.5em; border-color: #fdfdfd; /* Must match background color */ } .navbox-list-with-group { text-align: left; border-left-width: 2px; border-left-style: solid; } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: #e6e6ff; /* Level 3 color */ } .navbox-even { background-color: #f7f7f7; } .navbox-odd { background-color: transparent; } /* TODO: figure out how to remove reliance on td as structure */ .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; } b2d71534c22c7c462f60126d36ae6842f62de507 Reiji Tokisaka 0 42 858 778 2023-06-09T14:11:42Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }}{{nihongo|'''{{c}}'''|時坂玲人}} is the protagonist of {{kns}}. == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} d74d029bde2cdaf74ffcf7bdf0eeb4011f1bd46e Tsuzuriko Yosomiya 0 272 860 782 2023-06-09T14:43:20Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Tsuzuriko | family name = Yosomiya | jname = 四十宮 綴子 | image = [[File:stoj0102a.png|x300px]] | aka = Tojiko | gender = Female | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|四十宮 綴子}}, commonly referred to by the nickname {{nihongo|'''Tojiko'''|トージコ}}, is a student at [[Ouba Girls Academy]]. She is an aspiring writer who frequently submits her work to literary magazines. {{kns characters}} b193f508c54b5c755da610aaeb81964636704239 Template:Spoiler 10 64 861 129 2023-06-09T14:51:13Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} 77db2c57aa150944cd1f6425b849405fb64d4f64 870 861 2023-06-09T15:29:49Z Otonashi Ayana 2 wikitext text/x-wiki {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} afe37ea048ecfb168c896f51a0bad01441c36942 872 870 2023-06-09T15:31:11Z Otonashi Ayana 2 Undo revision 870 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} 77db2c57aa150944cd1f6425b849405fb64d4f64 893 872 2023-06-10T23:12:55Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#if:{{{bullet|yes| {{#switch: {{{1}}} | cartagra = * <span class="spoiler-cartagra">{{{2}}}</span> | kns = * <span class="spoiler-kns">{{{2}}}</span> | kns2 = * <span class="spoiler-kns2">{{{2}}}</span> | kns3 = * <span class="spoiler-kns3">{{{2}}}</span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 85d39bd35b58097413a79f5ff493c17e66533ae3 894 893 2023-06-10T23:13:12Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#if:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra = * <span class="spoiler-cartagra">{{{2}}}</span> | kns = * <span class="spoiler-kns">{{{2}}}</span> | kns2 = * <span class="spoiler-kns2">{{{2}}}</span> | kns3 = * <span class="spoiler-kns3">{{{2}}}</span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 81970ded5367700879cdb7b0d00338f3722c3a6c 895 894 2023-06-10T23:14:34Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#if:{{{bullet{{!}}}}}|yes| {{#switch: {{{1}}} | cartagra = * <span class="spoiler-cartagra">{{{2}}}</span> | kns = * <span class="spoiler-kns">{{{2}}}</span> | kns2 = * <span class="spoiler-kns2">{{{2}}}</span> | kns3 = * <span class="spoiler-kns3">{{{2}}}</span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 1c49bef19ee0106a5a90c85d00f0eb9d5209d18d 896 895 2023-06-10T23:15:22Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#ifeq:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra = * <span class="spoiler-cartagra">{{{2}}}</span> | kns = * <span class="spoiler-kns">{{{2}}}</span> | kns2 = * <span class="spoiler-kns2">{{{2}}}</span> | kns3 = * <span class="spoiler-kns3">{{{2}}}</span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 03bd2bf676840bf75235942fcf1811e4d5b6243e 898 896 2023-06-10T23:18:34Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#ifeq:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span> | kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span> | kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span> | kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 025c0d9236e595a1ce1cbb486e5a9a29f560dcd8 Template:Knsp 10 288 863 2023-06-09T15:03:25Z Otonashi Ayana 2 Created page with ""[[Kara no Shoujo (painting)|Kara no Shōjo]]"" wikitext text/x-wiki "[[Kara no Shoujo (painting)|Kara no Shōjo]]" 37ca85b5f9ff5d61ed8e0ac039ad07fd089bff3c 878 863 2023-06-09T15:38:43Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shoujo (painting)|Kara no Shōjo]]'' 0a7adddc04b8e6ea7f3c9c72172d557d8d3d316c Kara no Shoujo (painting) 0 289 864 2023-06-09T15:06:01Z Otonashi Ayana 2 Created page with "'''Kara no Shōjo''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}}" wikitext text/x-wiki '''Kara no Shōjo''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}} 8859ed767d3b0409b1ac112dbd7dcf9d29565ee8 877 864 2023-06-09T15:38:20Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}} 59ff5e81180f61ca4f5a0c8bc63a66fa64d88d8e Tsuzuriko Yosomiya 0 272 867 860 2023-06-09T15:08:37Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Tsuzuriko | family name = Yosomiya | jname = 四十宮 綴子 | image = [[File:stoj0102a.png|x300px]] | aka = Tojiko | gender = Female | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|四十宮 綴子}}, commonly referred to by the nickname {{nihongo|'''Tojiko'''|トージコ}}, is a student at [[Ouba Private Girls' Academy]]. She is an aspiring writer who frequently submits her work to literary magazines. == Plot == {{spoiler|kns|Tsuzuriko is murdered by {{n|Shinji|Mamiya}} and fashioned into a recreation of ''Kara no Shoujo''.}} == Relationships == {{kns characters}} 80bf2b56307f52d5c72ce18885b5f7f68126ac8e 868 867 2023-06-09T15:08:51Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Tsuzuriko | family name = Yosomiya | jname = 四十宮 綴子 | image = [[File:stoj0102a.png|x300px]] | aka = Tojiko | gender = Female | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|四十宮 綴子}}, commonly referred to by the nickname {{nihongo|'''Tojiko'''|トージコ}}, is a student at [[Ouba Private Girls' Academy]]. She is an aspiring writer who frequently submits her work to literary magazines. == Plot == {{spoiler|kns|Tsuzuriko is murdered by {{n|Shinji|Mamiya}} and fashioned into a recreation of {{knsp}}.}} == Relationships == {{kns characters}} 7364884736e5741d65de4ba54e07ccac5562b901 MediaWiki:Gadget-spoilers/cartagra.css 8 53 871 128 2023-06-09T15:30:45Z Otonashi Ayana 2 css text/css .spoiler-cartagra{ display:inline !important; } 1ff711fbd02920280d4fb2b61977f7850e1d8fbf Template:Spoiler/styles.css 10 290 873 2023-06-09T15:32:05Z Otonashi Ayana 2 Created page with ".spoiler-cartagra, .spoiler-kns, .spoiler-kns2, .spoiler-kns3{ display:none; }" sanitized-css text/css .spoiler-cartagra, .spoiler-kns, .spoiler-kns2, .spoiler-kns3{ display:none; } 2e93a4f650bffabcfa68f8f4dc136e3966040a39 MediaWiki:Gadget-spoilers/kns1.css 8 47 874 105 2023-06-09T15:32:37Z Otonashi Ayana 2 css text/css .spoiler-kns{ display:inline !important; } ef00cb8a741d9082ca71cfb8bd2cf240a673e068 MediaWiki:Gadget-spoilers/kns2.css 8 51 875 106 2023-06-09T15:32:58Z Otonashi Ayana 2 css text/css .spoiler-kns2{ display:inline !important; } dc59992f2d2fa2ded3872d9478b148ca867f0010 MediaWiki:Gadget-spoilers/kns3.css 8 52 876 107 2023-06-09T15:33:10Z Otonashi Ayana 2 css text/css .spoiler-kns3{ display:inline !important; } 64c6ca0c641c0fd393e352ba6710696c1cdf0ac1 Misa Rokushiki 0 291 879 2023-06-09T15:45:05Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Misa | family name = Rokushiki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is the biological mother of {{n|Toko|Kuchiki}}. {{kns characters}}" wikitext text/x-wiki {{infobox character | given name = Misa | family name = Rokushiki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is the biological mother of {{n|Toko|Kuchiki}}. {{kns characters}} 45372e8b8e3cb8a5e2360c9c657d9adc04d6dbb2 Template:Cartagra characters 10 201 880 677 2023-06-09T15:55:00Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = {{{state|}}} | listclass = hlist | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * [[Takoyaki vendor]] | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] | group3 = Police | list3 = * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} }}<includeonly> [[Category:Cartagra]] [[Category:Characters]] </includeonly> 29d4a5ca4a462b0de17399b9241d2c6f7858f1d2 Ryoichi Yaginuma 0 203 881 583 2023-06-09T16:08:20Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ryoichi | family name = Yaginuma | jname = | image = | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement from the police force. He takes on a greater role in {{kns}}, where he has since become a founding member of the [[w:National Police Agency (Japan)|NPA]]. == Plot == Yaginuma was a frequent patron of the [[Yukishiro]] brothel, with a preference for seeing [[Otoha]]. {{spoiler|cartagra|He plays a pivotal role in the arrest of {{n|Kazuma|Arishima}} after being convinced of his guilt by {{n|Shugo|Takashiro}}.}} {{cartagra characters|state=collapsed}} {{kns characters}} f6fac1bf529fbf97f49c5905288d9d0b822b32c0 Daisaku Arata 0 229 882 682 2023-06-09T16:20:24Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = Takoyaki vendor | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. {{cartagra characters}} 5d4586888136db7a63e770d2b4d79271eeae745f Kazuna Takashiro 0 292 883 2023-06-09T16:26:37Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Kazuna | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = | seiyu = }}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}}" wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = | seiyu = }}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} b7cc702e56356bd7b1a44d3f62a0dfa719ea017f 887 883 2023-06-09T16:38:32Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} 0d5a5be1fcf59c5cca50f6290d3ec95ce73001b8 903 887 2023-06-10T23:52:50Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = | image = <tabber> |-| Adult = [[File:skaz0101a.png|x300px]] |-| Teenager = [[File:kad100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} ceb9b75430a4ac5457b475ba7746ac962a1deb12 905 903 2023-06-10T23:56:23Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = | image = <tabber> |-| Adult = [[File:skaz0101a.png|x300px]] |-| Teenager = [[File:kad100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' (née Kozuki) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} 9c2f48026378558956d6d8983131f6f2afe3311e 906 905 2023-06-11T00:31:57Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = 高城 和菜 | image = <tabber> |-| Adult = [[File:skaz0101a.png|x300px]] |-| Teenager = [[File:kad100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|高城 和菜}} (née {{nihongo|'''Kozuki'''|小月}}) is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} 959f9062bc7f05e8c42ff550ac66593177cee69d 909 906 2023-06-11T00:33:49Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = 高城 和菜 | image = <tabber> |-| Adult = [[File:skaz0101a.png|x300px]] |-| Teenager = [[File:kad100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' (née '''Kozuki''') is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} c55e4ff28f96373bc83a51eb686017f211e73111 Stella 0 293 884 2023-06-09T16:35:53Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years." wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. 4d34c5f74821429254a0c10fa08bc783373fdaf7 885 884 2023-06-09T16:37:09Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. {{kns characters}} 7d93eea99f5270f42d4b2daa9c5360249f280a9f 886 885 2023-06-09T16:38:06Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. {{kns characters}} 2410d8ae63d1d4f9e6355d127189ca52e2ed0e69 889 886 2023-06-09T16:53:20Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. == Relationships == {{kns characters}} 4f771e7bd6250254901a59633b0570e7690232c7 MediaWiki:Common.js 8 294 888 2023-06-09T16:48:00Z Otonashi Ayana 2 Created page with "importScript("User:Daduxing/familytree.js");" javascript text/javascript importScript("User:Daduxing/familytree.js"); ed4ca8bf5aee4324a4bff27b38ff4bf4dc22e7b4 MediaWiki:Common.css 8 7 890 859 2023-06-09T19:13:04Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ fa490c5a035532d2a9941a592b33cd7780364846 891 890 2023-06-09T19:16:38Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .charbox .name{ pointer-events:none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ b97cf25118d17d912459af3a4e170bed593c07a1 899 891 2023-06-10T23:40:18Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 03bb289597af9742848b77e8079ce53a3b30bf45 902 899 2023-06-10T23:52:31Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 75646bc8de95276c869f0488a96ec087a803a556 904 902 2023-06-10T23:56:20Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ bd74eafd6ee27601aef52cf74e3002203d67b5a1 Cartagra 0 194 892 772 2023-06-09T19:29:30Z Otonashi Ayana 2 /* Premise */ wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. == Premise == In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in an investigation into the string of bizarre murders that are plaguing Ueno. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] [[Category:Cartagra]] 368b4bbdc57188bd5db999b1fbc0be49ad088a22 Blessed Congregation 0 295 897 2023-06-10T23:16:06Z Otonashi Ayana 2 Created page with "The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }}" wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} 448aa23fe7e040538e877528af771e167209a57b 914 897 2023-06-11T00:47:38Z Otonashi Ayana 2 wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Congregation of the Blessed === The cult was first founded by {{n|Keigo|Utsugi}}. === Senri === === Blessed Congregation === === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} 5fd06964c74f71e213faf24e32d40b0a4b8b8535 File:Skaz0101a.png 6 296 900 2023-06-10T23:40:41Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Kad100a.png 6 297 901 2023-06-10T23:43:28Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Shugo Takashiro 0 62 907 676 2023-06-11T00:32:26Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = 高城 秋五 | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|高城 秋五}} is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} 1779a8e6d4ba80e77c13b6ee3affaca7feca14cf 908 907 2023-06-11T00:32:51Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = 高城 秋五 | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} 51f3ecc46ff30c8b819180308eed0b16f89979cd 911 908 2023-06-11T00:36:39Z Otonashi Ayana 2 /* Relationships */ wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = 高城 秋五 | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{:Shugo Takashiro/Family tree}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} 0142cecbd45dbbbe2e642a28b1b8aff6cf464f7f Shugo Takashiro/Family tree 0 298 910 2023-06-11T00:35:36Z Otonashi Ayana 2 Created page with "{{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}}" wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | | |}} {{Tree chart| | ,|- | -|- |+|-|-| -|- | -|- | -|. |}} {{Tree chart| Nat | | Shg | - | Kzn | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Kzn={{charbox|Kazuna|119px|link=Kazuna Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} 26865521064a6ed0141d5195c275acad83e1552e Senri 0 299 912 2023-06-11T00:46:20Z Otonashi Ayana 2 Redirected page to [[Blessed Congregation]] wikitext text/x-wiki #REDIRECT [[Blessed Congregation]] 9c135e78b8ec3b8e435cdae46415c161ce44f627 Congregation of the Blessed 0 300 913 2023-06-11T00:46:45Z Otonashi Ayana 2 Redirected page to [[Blessed Congregation]] wikitext text/x-wiki #REDIRECT [[Blessed Congregation]] 9c135e78b8ec3b8e435cdae46415c161ce44f627 Blessed Congregation 0 295 915 914 2023-06-11T00:48:38Z Otonashi Ayana 2 wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Congregation of the Blessed === The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}. === Senri === === Blessed Congregation === === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} bcb3b0241ad1d5bdba3c4e3c8a90475c1b227680 916 915 2023-06-11T00:50:26Z Otonashi Ayana 2 /* Senri */ wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Congregation of the Blessed === The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}. === Senri === After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction. === Blessed Congregation === === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} a09d6991a89d8a103cd5384454a8aa0f02ac35e5 File:Sayu0101a.png 6 301 917 2023-06-11T00:57:09Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Ayumu Sato 0 302 918 2023-06-11T00:57:47Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} == Trivia == *Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}. {{kns characters}}" wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} == Trivia == *Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}. {{kns characters}} 72f4e07418024ee56f19a704591b18fbd2c0016d 919 918 2023-06-11T00:58:52Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Girls' Private Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}. == Trivia == *Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}. {{kns characters}} 7076cbe6f225f2f8f4b666f6048334986d46f996 920 919 2023-06-11T00:59:08Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}. == Trivia == *Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}. {{kns characters}} 707bafacf775bfc8e2557de1768774245235017f Help:Character page 12 303 921 2023-06-11T01:00:28Z Otonashi Ayana 2 Created page with "{{Template:Infobox character/doc}}" wikitext text/x-wiki {{Template:Infobox character/doc}} d0a7f919655fe112cf6b6268beea94e153912ce6 935 921 2023-06-11T03:11:31Z Otonashi Ayana 2 wikitext text/x-wiki {{Template:Infobox character/doc}} <pre> == Relationships == <div class="tree-fade"> {{:{{PAGENAME}}/Family tree}} </div> </pre> fee553fd4e53d3c5ff9337cc14d5527a5cffc894 941 935 2023-06-11T03:16:28Z Otonashi Ayana 2 wikitext text/x-wiki {{Template:Infobox character/doc}} <pre> == Relationships == {{family tree}} </pre> d11c8bb3564ca0d1a0de2b35e09b8abbff4a54c3 Masaki Tomoyuki 0 304 922 2023-06-11T01:04:14Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:|x300px]] | aka = {{o|Ayato|Hinagami}} | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant. == Trivia == * Masaki is notably tall, described as..." wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:|x300px]] | aka = {{o|Ayato|Hinagami}} | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} ea6cda803a6c42f058e92eb5d44cbe6714a521b5 923 922 2023-06-11T01:31:34Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:|x300px]] | aka = {{o|Ayato|Hinagami}} | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} 563b9cbde3e3229e4a83897f4a26e2d9b932dd97 Reiji Tokisaka 0 42 924 858 2023-06-11T01:41:54Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of {{kns}}. == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} 5e7821f6f407993ce3cf5db3803c911d5d60a079 925 924 2023-06-11T01:42:03Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. {{o|Ryota|Takeuchi}} was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} ea0f5e50585e2884e27aab645dc393127ebd69a8 926 925 2023-06-11T01:42:49Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]] | relations = {{plainlist| * [[Yukari Tokisaka]] (sister) * [[Toko Kuchiki]] (love interest) }} }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} 6352c07ebb71db39ebbe5074fe92dab7a48b6ab3 927 926 2023-06-11T01:51:51Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]] }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Trivia == * In the original release of {{kns/nl}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} e13e53dba27af404a21da05a20447b1b158cdba5 929 927 2023-06-11T01:53:21Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]] }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Trivia == * In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} 55f6b8ee55f601b6e28a0cb77853536b0777a734 Template:Kns 10 43 928 661 2023-06-11T01:52:57Z Otonashi Ayana 2 wikitext text/x-wiki {{#if:{{{1|}}}|Kara no Shōjo|''[[Kara no Shoujo|Kara no Shōjo]]''}} 825b6a825a417e39b90bd5493ad3df0de6c68fb0 930 928 2023-06-11T01:53:42Z Otonashi Ayana 2 wikitext text/x-wiki {{#if:{{{1|}}}|''Kara no Shōjo''|''[[Kara no Shoujo|Kara no Shōjo]]''}} e3617a3f9561f10d6b432a2ae587d3500d4fe1ab Template:Kns characters 10 138 931 665 2023-06-11T01:54:27Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> {{kns/cat}} [[Category:Characters]] </includeonly> 0ec719608337e824e30502cd69b82f191cfc83fc Natsume Takashiro 0 305 932 2023-06-11T03:09:25Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and she is the older sister of {{n|Shugo|Takashiro}}. {{kns characters}}" wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:|x300px]] | aka = | gender = | age = | appearance = | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and she is the older sister of {{n|Shugo|Takashiro}}. {{kns characters}} 42def5081ec0cc59bd21ab105beba6913aaeb2bd 933 932 2023-06-11T03:10:01Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:snat0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and she is the older sister of {{n|Shugo|Takashiro}}. {{kns characters}} df143bdedac2034e39754531420d8eb0fae15229 934 933 2023-06-11T03:10:24Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:snat0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}. {{kns characters}} 8072998a520e28dd3fc00c364dde2f8a9a5daa93 936 934 2023-06-11T03:11:49Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:snat0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}. == Relationships == <div class="tree-fade"> {{:{{PAGENAME}}/Family tree}} </div> {{kns characters}} 3f44b5b62bce8f8798db398af6d22ea0d8adc180 940 936 2023-06-11T03:16:22Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:snat0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}. == Relationships == {{family tree}} {{kns characters}} 305a3865bf196c99489d622de74f119f70a48a03 Shugo Takashiro 0 62 937 911 2023-06-11T03:12:13Z Otonashi Ayana 2 /* Relationships */ wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = 高城 秋五 | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == <div class="tree-fade"> {{:{{PAGENAME}}/Family tree}} </div> {{cartagra characters}} {{kns characters|state=collapsed}} 24e00f59d73545929ca3547400208c8ffa1ac95b 942 937 2023-06-11T03:16:39Z Otonashi Ayana 2 /* Relationships */ wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = 高城 秋五 | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Relationships == {{family tree}} {{cartagra characters}} {{kns characters|state=collapsed}} 352a3a36f8d5b72dac8cc348f7bf3290ba48f144 Natsume Takashiro/Family tree 0 306 938 2023-06-11T03:15:11Z Otonashi Ayana 2 Created page with "{{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | }} {{Tree chart| | ,|- | -|- |+|-|-| . }} {{Tree chart| Nat | | Shg | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}}" wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | }} {{Tree chart| | ,|- | -|- |+|-|-| . }} {{Tree chart| Nat | | Shg | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} bde348a5b93984717991c8d9f26d8e19688ea839 943 938 2023-06-11T03:17:22Z Otonashi Ayana 2 wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | }} {{Tree chart| | ,|- | -|- |+|-|-| . }} {{Tree chart| Nat | | Shg | | Nna |Nat={{charbox|Natsume|119px}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} 540b8938aad0b73b5587fbd17a1c459abc352cda 944 943 2023-06-11T03:18:28Z Otonashi Ayana 2 Undo revision 943 by [[Special:Contributions/Otonashi Ayana|Otonashi Ayana]] ([[User talk:Otonashi Ayana|talk]]) wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| | | | | | ! | | | }} {{Tree chart| | ,|- | -|- |+|-|-| . }} {{Tree chart| Nat | | Shg | | Nna |Nat={{charbox|Natsume|119px|link=Natsume Takashiro}} |Shg={{charbox|Shugo|119px|link=Shugo Takashiro}} |Nna={{charbox|Nana|119px|link=Nana Takashiro}}}} {{Tree chart/end}} bde348a5b93984717991c8d9f26d8e19688ea839 Template:Family tree 10 307 939 2023-06-11T03:16:03Z Otonashi Ayana 2 Created page with "<div class="tree-fade"> {{:{{PAGENAME}}/Family tree}} </div>" wikitext text/x-wiki <div class="tree-fade"> {{:{{PAGENAME}}/Family tree}} </div> 56ae805eeb348a1e1f05a92ebae4e5656f2c99f0 File:Nan100a.png 6 308 945 2023-06-11T03:20:05Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Nana Takashiro 0 309 946 2023-06-11T03:20:16Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Nana | family name = Takashiro | jname = | image = [[File:nan100a.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}." wikitext text/x-wiki {{infobox character | given name = Nana | family name = Takashiro | jname = | image = [[File:nan100a.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}. aaa21a9614e528acc82df159de3227f5c9b5980c 947 946 2023-06-11T03:20:29Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Nana | family name = Takashiro | jname = | image = [[File:nan100a.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}. {{cartagra characters}} dac12e26ba6ed5fbe4646f80e55ea6d6705875a9 951 947 2023-06-11T03:34:05Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Nana | family name = Takashiro | jname = | image = [[File:nan100a.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is an amateur detective and the younger sister of {{n|Shugo|Takashiro}} and {{n|Natsume|Takashiro}}. == Trivia == *Nana only appears in {{cartagra}}, though she is mentioned in the later {{kns}} titles. {{cartagra characters}} 3826f0eb6e7401cc6f93c972f46eadb0d010e61a File:Ssta0101a.png 6 310 948 2023-06-11T03:22:02Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Stella 0 293 949 889 2023-06-11T03:22:05Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:ssta0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. == Relationships == {{kns characters}} f669b6a2d955fd65e33b5c44b4ffcf46056ad12d 950 949 2023-06-11T03:23:12Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:ssta0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. == Relationships == {{kns characters}} 2677a46ae6d84a979c4e262d3a8a190d4c65e265 Help:Manual of Style 12 311 952 2023-06-11T03:36:52Z Otonashi Ayana 2 Created page with "== Infoboxes == Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images. *Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}." wikitext text/x-wiki == Infoboxes == Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images. *Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}. c12262e33fe739f5c4226b93a06f1bb0682d0d9a 953 952 2023-06-11T03:39:48Z Otonashi Ayana 2 wikitext text/x-wiki Pages on characters who appear in any of the {{kns|n}} titles should be written with the assumption that the events of ''Cartagra'' are past events. == Infoboxes == Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images. *Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}. e5d42dca3cbec5a3fa331b6d828680d5134ac1c1 954 953 2023-06-11T03:40:01Z Otonashi Ayana 2 wikitext text/x-wiki == General == Pages on characters who appear in any of the {{kns|n}} titles should be written with the assumption that the events of ''Cartagra'' are past events. == Infoboxes == Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images. *Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}. 853a33cdf5a235c2e79f1300a74a8aa3583e8a33 955 954 2023-06-11T03:41:24Z Otonashi Ayana 2 wikitext text/x-wiki == General == Pages on characters who appear in any of the {{kns|n}} titles should be written with the assumption that the events of ''Cartagra'' are past events. *Example: {{n|Kazuna|Takashiro}}'s page is written from the perspective of her already having married {{o|Shugo|Takashiro}}. == Infoboxes == Infoboxes should only contain a single image of a character unless there is a significant change in their appearance. Simply appearing in multiple titles is not enough to warrant multiple images. *Example: {{n|Kazuna|Takashiro}} has two images due to her aging between the events of ''Cartagra'' and {{kns|n}}. 5e60bab16a71cd34aa68ace1eb6ff15678b1ab80 Template:Spoiler 10 64 957 898 2023-06-11T05:50:09Z Otonashi Ayana 2 Replaced content with "<templatestyles src="Spoiler/styles.css" /> {{spoiler/template}}" wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{spoiler/template}} 818e3f05e4590806301c4099ab9843cbbbb82419 958 957 2023-06-11T05:50:39Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{Template:Spoiler/template}} 54f187ccc6f330c1fffcda6c6955223b5d06379a 959 958 2023-06-11T05:52:15Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{Spoiler/template|{{{1}}}|{{{bullet|}}} }} e606dd5560f00fc04ae0af9e37c9db2cba50248f 960 959 2023-06-11T05:53:39Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{Spoiler/template|{{{1}}}|{{{2}}}|{{{bullet|}}} }} b6f6d51f725cbfa58487d56bb4de2617abffdc17 961 960 2023-06-11T05:55:21Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#ifeq:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span> | kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span> | kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span> | kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 025c0d9236e595a1ce1cbb486e5a9a29f560dcd8 Template:Kns2 characters 10 313 962 2023-06-11T08:44:41Z Otonashi Ayana 2 Created page with "{{Navbox | name = kns characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sat..." wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = * {{n|Naori|Kuroya}} * {{n|Ayato|Hinagami}} * {{n|Karen|Hinagami}} * {{n|Yu|Futami}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Nanako|Sawashiro}} * [[Satsuki]] * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * {{n|Yuzuru|Kuroya}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Saizo|Kuki}} * {{n|So|Kuroya}} * {{n|Yoshie|Futami}} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} }} <includeonly> {{kns/cat}} [[Category:Characters]] </includeonly> 56b767ad0cbe880c16ae1fc84c7c9df2107029f4 Fuyumi Kayahara 0 314 963 2023-06-11T08:47:42Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = {{spoiler|kns2|Ayako}} | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''Ayako''', is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to..." wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = {{spoiler|kns2|Ayako}} | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''Ayako''', is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double.}} {{kns2 characters}} 83ac3bdd445b80520fe601473e3d9ee996806e53 964 963 2023-06-11T08:48:09Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''Ayako''', is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double.}} {{kns2 characters}} ad7f3ada804bb7af226215eebd688ed1fe3996c5 965 964 2023-06-11T08:48:55Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double.}} {{kns2 characters}} 8c03129af55d52c9a8f3e555b4b08f3fede6a5d2 Satsuki 0 315 966 2023-06-11T08:52:35Z Otonashi Ayana 2 Created page with "{{infobox character | name = Satsuki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is an enigmatic girl in the [[Hitogata]] settlement. {{kns2 characters}}" wikitext text/x-wiki {{infobox character | name = Satsuki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is an enigmatic girl in the [[Hitogata]] settlement. {{kns2 characters}} 0ea712f7b0ba94f05b52d3a76508054f78f1e062 967 966 2023-06-11T08:52:50Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = Satsuki | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''Satsuki''' is an enigmatic girl in the [[Hitogata]] settlement. {{kns2 characters}} ce8ceca40b7705356e831877ff7569badd7a9fef Template:Kns characters 10 138 968 931 2023-06-11T09:48:03Z 47.4.58.254 0 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group3 = Faculty | list3 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} | group4 = Hospital Staff | list4 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | list5 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> {{kns2/cat}} [[Category:Characters]] </includeonly> 4ac69d82b44e9847367193dffcbafda96a637b07 979 968 2023-06-11T16:08:45Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Ouba Private Girls' Academy | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> {{kns2/cat}} [[Category:Characters]] </includeonly> 10fdc3f676d2fd82e48cce151467b1fe7f3e1a1a 981 979 2023-06-11T16:10:00Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Ouba Private Girls' Academy | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> {{kns/cat}} [[Category:Characters]] </includeonly> b402b71e68faebefa16a05712f4a08167d9a8305 987 981 2023-06-11T16:15:31Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = Ouba Private Girls' Academy | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Characters]] {{kns/cat}} </includeonly> 4c3915f3a563666970503f1d8dc8ef8f0d5a71ec 988 987 2023-06-11T16:16:50Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = [[Ouba Private Girls' Academy|<span style="color:#202122; font-style:italic">Ouba Academy</span>]] | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Characters]] {{kns/cat}} </includeonly> 9e7b02cbe13dc1e679aa050ca6f4918e9d08f79c 989 988 2023-06-11T16:18:47Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = [[Ouba Private Girls' Academy|<span style="color:#202122">Ouba Academy</span>]] | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * {{n|Shin|Katsuragi}} }} <includeonly> [[Category:Characters]] {{kns/cat}} </includeonly> 5e76435cf878e168d863e530dd1c98b9357982c8 Template:Kns2/cat 10 316 969 2023-06-11T09:48:54Z Otonashi Ayana 2 Created page with "<includeonly>[[Category:Kara no Shōjo 2]]</includeonly>" wikitext text/x-wiki <includeonly>[[Category:Kara no Shōjo 2]]</includeonly> ca304f1bf3f53a8369616ff54c9c776bfc883a6e Template:Spoiler 10 64 970 961 2023-06-11T09:50:44Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#ifeq:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span> | kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span> | kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span> | kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} ebe25e036c8e5cc738164829454e4bb61e354353 971 970 2023-06-11T09:52:30Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" /> {{#ifeq:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra =<span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span> | kns =<span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span> | kns2 =<span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span> | kns3 =<span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span> }} | {{#switch: {{{1}}} | cartagra =<span class="spoiler-cartagra">{{{2}}}</span> | kns =<span class="spoiler-kns">{{{2}}}</span> | kns2 =<span class="spoiler-kns2">{{{2}}}</span> | kns3 =<span class="spoiler-kns3">{{{2}}}</span> }} }} 1e981cd03bd0086b9714382a8ad994b23bf416da 972 971 2023-06-11T09:53:36Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Spoiler/styles.css" />{{#ifeq:{{{bullet|}}}|yes| {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra"><ul><li>{{{2}}}</li></ul></span> | kns = <span class="spoiler-kns"><ul><li>{{{2}}}</li></ul></span> | kns2 = <span class="spoiler-kns2"><ul><li>{{{2}}}</li></ul></span> | kns3 = <span class="spoiler-kns3"><ul><li>{{{2}}}</li></ul></span> }} | {{#switch: {{{1}}} | cartagra = <span class="spoiler-cartagra">{{{2}}}</span> | kns = <span class="spoiler-kns">{{{2}}}</span> | kns2 = <span class="spoiler-kns2">{{{2}}}</span> | kns3 = <span class="spoiler-kns3">{{{2}}}</span> }} }} 1040c08c4fb78934239a82c0d14185b0cbb95efd Template:Kns2 characters 10 313 973 962 2023-06-11T15:47:18Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * {{n|Ayato|Hinagami}} * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} }} <includeonly> {{kns/cat}} [[Category:Characters]] </includeonly> f6178ae2b2c6900019dc02893069d0ad8052f30e 982 973 2023-06-11T16:10:50Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * {{n|Ayato|Hinagami}} * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} }} <includeonly> {{kns2/cat}} [[Category:Characters]] </includeonly> 4e9f675ca2056444a176bab82b6ecb177870047b 986 982 2023-06-11T16:15:11Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * {{n|Ayato|Hinagami}} * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 2f62db3d412b255a058ad67c1f3bbcdd2b931fe8 990 986 2023-06-11T16:25:04Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episde|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 91858279bd0adb0527bcc0c999bc35ca8c0575b9 997 990 2023-06-11T17:18:23Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 40ea54d9a0b9c87e2c2b269d0c361a5859869a5c Kara no Shoujo 0 181 974 774 2023-06-11T15:57:14Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} 5146c9c018c2e6b17bda580e8d33df30e44741ac 999 974 2023-06-11T17:52:10Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Trivia == *{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. The work also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} d5ea054b2af1d3abaad4919bfd5b805bac441cc4 Kara no Shoujo - The Second Episode 0 182 975 527 2023-06-11T16:02:36Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo 2.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} }} {{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 73726d992c9d23895a0233aa4a4759731a27559c 976 975 2023-06-11T16:03:11Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} }} {{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 75857f580ddd7e3f0df15c72f3d4ca496ca14f4e 977 976 2023-06-11T16:05:01Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} }} {{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 5754dfe9dfee5250595dd39090e783ae2d3f7044 1001 977 2023-06-11T17:54:39Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} }} {{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == Trivia == *{{kns2|n}} is heavily inspired by Dante's [[w:Purgatorio|Purgatorio]], with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 0ec70653c75763bd210800d28d2ed8d7e1550b5f 1002 1001 2023-06-11T17:54:56Z Otonashi Ayana 2 /* Trivia */ wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} }} {{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == Trivia == *{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 88eb4d2866c6f2427f65c96af94725b8d2a557b2 Template:Kns2 10 58 978 662 2023-06-11T16:06:26Z Otonashi Ayana 2 wikitext text/x-wiki ''[[Kara no Shoujo - The Second Episode|Kara no Shōjo - The Second Episode]]'' 65d3eff018013da31ee1bc0933938da9b9cc9f4d 1000 978 2023-06-11T17:53:01Z Otonashi Ayana 2 wikitext text/x-wiki {{#if:{{{1|}}}|''Kara no Shōjo - The Second Episode''|''[[Kara no Shoujo - The Second Episode|Kara no Shōjo - The Second Episode]]''}} 1ba023b869cbb5927aba4d163d49e44c13397839 Toko Kuchiki 0 273 980 783 2023-06-11T16:09:08Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Toko | family name = Kuchiki | jname = | image = [[File:shuy0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an enigmatic girl who attends [[Ouba Private Girls' Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens. {{kns characters}} 66488b085e1be7dcfbc321be43bf67a42fb08123 Reiji Tokisaka 0 42 983 929 2023-06-11T16:11:40Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]] }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Trivia == * In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} {{kns2 characters}} c4009f99c7f268ee46c42645cf264bede4e8a179 984 983 2023-06-11T16:12:07Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]] }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Trivia == * In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} {{kns2 characters|state=collapsed}} f6dcd525c0b7b17fed17567591e1f137b49cd4c0 Category:Kara no Shōjo 2 14 317 985 2023-06-11T16:13:45Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Masaki Tomoyuki 0 304 991 923 2023-06-11T16:26:59Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} 9f7037716f1cb82f8ca3601bf7efb9461a50ba9a 994 991 2023-06-11T16:36:56Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a detective assistant. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} fe1547fbdb97a81ef064284240ec4d35b2a2f7f8 995 994 2023-06-11T16:37:40Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of murder. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a assistant detective. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} fbf69fa0196e3d53d6eb0f95d5cb2e50a3d4424b 1004 995 2023-06-11T19:43:30Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as a assistant detective. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} f43fa325bb0b09382a41ded86011f55cc2297061 1005 1004 2023-06-11T19:43:50Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} c780e237a8d0344319ec56c1bd8705f5c21d8a6d 1006 1005 2023-06-11T19:46:44Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Born as {{o|Ayato|Hinagami}}, Masaki is the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} 61bd72fc76a0bcc17ea7b1b9279201ce46a699d7 1007 1006 2023-06-11T19:49:13Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} d9a868d2affb924e66d8e9ec76977582933b3b54 File:Tom0101.png 6 318 992 2023-06-11T16:31:50Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 993 992 2023-06-11T16:35:21Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Tom0101.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Ayumu Sato 0 302 996 920 2023-06-11T17:01:45Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}. == Trivia == *Ayumu is notably tall, described as being nearly as tall as {{n|Reiji|Tokisaka}}. {{kns characters}} {{kns2 characters|state=collapsed}} cc5bf479e46b64ee854fbef867af0eb3d276cf57 Template:Main Page 10 180 998 526 2023-06-11T17:48:09Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css />This is a wiki dedicated to '''{{kns|n}}''', a trilogy of visual novels developed by Innocent Grey. Each title follows a strange set of murders taking place in 1950s Japan. = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png|link=Cartagra]] <div class="item-title"> Cartagra </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png|link=Kara no Shoujo]] <div class="item-title"> Kara no Shōjo </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]] <div class="item-title"> Kara no Shōjo<br>The Second Episode </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]] <div class="item-title"> Kara no Shōjo<br>The Last Episode </div> </div> </div> 5038ddf5fac763f6f018d9e4cf2aafb6d3015e10 Kara no Shoujo - The Second Episode/Endings 0 319 1003 2023-06-11T19:27:48Z Otonashi Ayana 2 Created page with "{{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''/Endings}} {{kns2}} has eleven possible endings. == Bad Ends == ==== Ending #1: Hinna-sama's Curse ==== If Reiji does not connect the murders to {{o|Ayato|Hinagami}}'s marriage candidates while in Hitogata, he will be drugged and murdered by the villagers of Hitogata. ==== Ending #2: To search for Toko... ==== On January 1, 1958, if Reiji decides to abandon the Hitogata case in favor of continuing his search for {..." wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''/Endings}} {{kns2}} has eleven possible endings. == Bad Ends == ==== Ending #1: Hinna-sama's Curse ==== If Reiji does not connect the murders to {{o|Ayato|Hinagami}}'s marriage candidates while in Hitogata, he will be drugged and murdered by the villagers of Hitogata. ==== Ending #2: To search for Toko... ==== On January 1, 1958, if Reiji decides to abandon the Hitogata case in favor of continuing his search for {{o|Toko|Kuchiki}} and {{o|Shinji|Mamiya}}, the game will end after Reiji leaves his house. '''Note:''' this ending, along with Ending #8, is required to unlock the True End and the Obsession End. ==== Ending #3: The Holy Prophet ==== If Reiji has not spent time with {{o|Yukiko|Kayahara}} at least three times prior to January 9, 1958, the game will end after Yukiko assumes the role of the Blessed Congregation's Holy Prophet. ==== Ending #4: Disappearance ==== On January 12, 1958, if {{o|Masaki|Tomoyuki}} doesn't tell {{o|Yukari|Tokisaka}} that {{o|Kohane|Tori}} is in danger but still goes to Ouba Private Girls' Academy, he, {{o|Fuyumi|Kayahara}}, and {{o|Aoki|Toji}} will find {{o|Yukiko|Kayahara}}, Kohane, and the Miko inside the Academy. Masaki attacks the Miko, however Fuyumi is killed in the process and Kohane is wounded. After being unmasked, {{o|Karen|Hinagami}} commits suicide with a cyanide capsule. In the aftermath of these events, Masaki leaves Tokyo and vanishes. Reiji loses his remaining leads on the location of {{o|Shinji|Mamiya}}, but vows to continue searching for {{o|Toko|Kuchiki}} for the rest of his life. ==== Ending #5: Yukio ==== On January 12, 1958, if {{o|Masaki|Tomoyuki}} doesn't tell {{o|Yukari|Tokisaka}} that {{o|Kohane|Tori}} is in danger AND he doesn't immediately go to Ouba Private Girls' Academy, he, {{o|Fuyumi|Kayahara}}, and {{o|Aoki|Toji}} will eventually go to the Academy and find {{o|Yukiko|Kayahara}}, Kohane, and the Miko. Kohane has been murdered and the Miko is preparing to put a clay doll inside of her corpse. Masaki attacks the Miko, however Fuyumi is killed in the process. After being unmasked, {{o|Karen|Hinagami}} commits suicide with a cyanide capsule. In the aftermath of these events, Yukiko is traumatized and her personality regresses to that of her childhood self. While in the Kuchiki Hospital, she believes herself to be at the White Lily Garden orphanage and she regularly talks to her brother, Yukio. ==== Ending #6: Karen ==== If Reiji fails to catch the culprit in time, {{o|Kohane|Tori}} will be found dead in a classroom at Ouba Private Girls' Academy, with her body staged as the fifth victim of Hinna-sama's curse. {{o|Yukiko|Kayahara}} is found dead soon afterward, having overdosed on barbiturates. {{o|Ryoichi|Yaginuma}} is officially removed from the Hitogata investigation and his superiors close the case with Yukiko as the designated culprit. {{o|Karen|Hitogata}} visits {{o|Masaki|Tomoyuki}} and moves him into his old apartment, where he spends his days painting in a listless daze. Some time later, Reiji and {{o|Aoki|Toji}} find Masaki and ask him to convince Karen to confess to the murders, as they have deduced Karen is guilty but only have circumstantial evidence. When Masaki confronts Karen with this information, Karen commits suicide using cyanide and dies in Masaki's arms. == Neutral End == ==== Ending #8: Memories of That Day ==== Other than the above bad endings, this is the only possible ending of a first playthrough. Completing this ending will make the other endings available on a second playthrough. '''Note:''' to unlock the True End or the Obsession End, the player must also complete Ending #2. 4c45bffc39383e779c67b4ebf4d80a7c349c8fe8 File:Meg0101.png 6 320 1008 2023-06-11T19:50:56Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Meguri Takamiya 0 321 1009 2023-06-11T19:51:48Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Meguri | family name = Takamiya | jname = | image = [[File:meg0101.png|x300px]] | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{kns2 characters}}" wikitext text/x-wiki {{infobox character | given name = Meguri | family name = Takamiya | jname = | image = [[File:meg0101.png|x300px]] | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{kns2 characters}} b6d42e07f52d673a9a0836c12042206c5b5db686 1010 1009 2023-06-11T19:53:46Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Meguri | family name = Takamiya | jname = | image = [[File:meg0101.png|x300px]] | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama. {{kns2 characters}} a9743adb2b97a5bb63289d6f197b93c2941c9fdb Karen Hinagami 0 322 1011 2023-06-11T19:58:03Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders {{n|Mayu|Kamizono}}, {{n|Mizuki|Itose}}, {{n|Meguri|Takamiya}}, and {{n|Yuka|Kirimura}}. {{kns2 characters}}" wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders {{n|Mayu|Kamizono}}, {{n|Mizuki|Itose}}, {{n|Meguri|Takamiya}}, and {{n|Yuka|Kirimura}}. {{kns2 characters}} 810bca4d28b119bf8c26ce19f6f57237e815b245 1013 1011 2023-06-11T19:59:27Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders {{n|Mayu|Kamizono}}, {{n|Mizuki|Itose}}, {{n|Meguri|Takamiya}}, and {{n|Yuka|Kirimura}}. {{kns2 characters}} d0ee3d014665bd7c8da28f30b9dddd3abf6c72f4 File:Kar0701.png 6 323 1012 2023-06-11T19:59:13Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Saw0101.png 6 324 1014 2023-06-11T20:29:41Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Nanako Sawashiro 0 325 1015 2023-06-11T20:30:55Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Nanako | family name = Sawashiro | jname = | image = [[File:saw0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. While in Hitogata, she worked for the Kuroya clinic, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]]. {{kns2 characters}}" wikitext text/x-wiki {{infobox character | given name = Nanako | family name = Sawashiro | jname = | image = [[File:saw0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. While in Hitogata, she worked for the Kuroya clinic, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]]. {{kns2 characters}} 5b34d51c765283d545c007463bfc62f491b67b19 Nanako Sawashiro 0 325 1016 1015 2023-06-11T20:31:39Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Nanako | family name = Sawashiro | jname = | image = [[File:saw0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. She worked for the Kuroya clinic while in Hitogata, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]]. {{kns2 characters}} f110b97fbe8ab830751719cb4495e150bbdc0ace Template:Hitogata family tree notice 10 326 1017 2023-06-11T20:35:45Z Otonashi Ayana 2 Created page with "This family tree is truncated for simplicity. For the complete family tree, see the [[Hinagami-Shigusa family tree]]." wikitext text/x-wiki This family tree is truncated for simplicity. For the complete family tree, see the [[Hinagami-Shigusa family tree]]. 5517591839a5945f21aac568394e7872a087382b 1018 1017 2023-06-11T20:36:07Z Otonashi Ayana 2 wikitext text/x-wiki This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]]. 76d52b591fa25a2469ff2e94e1cf913fa6559c38 Masaki Tomoyuki 0 304 1019 1007 2023-06-11T20:36:54Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''', born as '''{{o|Ayato|Hinagami}}''', is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. == Relationships == {{family tree}} {{hitogata family tree notice}} == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} ec073eec03df67ff39359ee76c67aa6970d63a41 Hinagami-Shigusa family tree 0 327 1020 2023-06-12T00:30:22Z Kinzo 4 Created page with "{{Tree chart/start}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = So}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = Mariko | Hid = Hide..." wikitext text/x-wiki {{Tree chart/start}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = So}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = Mariko | Hid = Hideomi | Rio = Rioko | Ysh = Yoshimitsu }} {{Tree chart| | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|.| | | | | | | | | | | | | | | | | Shi = Shinjiro }} {{Tree chart| | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P| Say | | Miy |-|v|-| Ken | | Mic | | | | | | | | | | | | | | | | Ytd = Yasutada | Cst = Chisato | Ckg = Chikage | Yzr = Yuzuru | Rka = Rika | Szr = Shizuru | Say = Saya | Miy = Miya | Ken = Kensei | Mic = Michio}} {{Tree chart| |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|T| | | | | | | | |!| | | | | | | | | | | | | | | | | | | | | | | | Yuk = Yukihito}} {{Tree chart| Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | Nao | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy |Q| | | | | | | | Yay | | | | | | | | | | | | | | | | | | | | | | | Mar = Maris | Cel = Celes | Rok = Rokushiki | Mis = Misa | Nao = Naori | Krn = Karen | Mas = Masaki | Fuy = Ayako | Yay = Yayoi}} {{Tree chart| | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | | | | | | | | | | | | | | |!| | | |!| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | | Shz = Shinzo | Mki = Miyuki | Chi = Chizuru | Fum = Fumiya}} {{Tree chart| | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | |:| | | | | | | | | | | | | | | | | | | | | | | | | Sat | | |!| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | | Sat = Satsuki | Mdr = Midori | Tsb = Tsubaki | Kan = Kanae | Str = Satoru | Kei = Keiko | Bun = Bunji}} {{Tree chart| | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | |:| | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | | Shj = Shinji }} {{Tree chart| |,|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mcr | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | | Mcr = Michiru | Khn = Kohane | May = Mayu | Mzk = Mizuki}} {{Tree chart| Ykr | | Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykr = Yukari | Rji = Reiji | Tok = Toko}} {{Tree chart/end}} 1051e71619afd16b8e291d3611a29cd3e96e71c0 1022 1020 2023-06-12T05:10:41Z Kinzo 4 wikitext text/x-wiki {{Tree chart/start}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = So}} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = Mariko | Hid = Hideomi | Rio = Rioko | Ysh = Yoshimitsu }} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro | Ykn = Yukino | Ari = Arishima }} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | |,|-|-|-|.| | | | | | | | | Ytd = Yasutada | Cst = Chisato | Ckg = Chikage | Yzr = Yuzuru | Rka = Rika | Szr = Shizuru | Say = Saya | Miy = Miya | Ken = Kensei | Mho = Michio }} {{Tree chart| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister| Ori = Oribe }} {{Tree chart| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = Maris | Cel = Celes | Rok = Rokushiki | Mis = Misa | Nao = Naori | Krn = Karen | Mas = Masaki | Fuy = Ayako | Yay = Yayoi | Tko = Tokiko}} {{Tree chart| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = Shinzo | Mki = Miyuki | Chi = Chizuru | Fum = Fumiya}} {{Tree chart| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | |:| | | | |S| Gnj | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Gnj = Ginji | Sat = Satsuki | Mdr = Midori | Tsb = Tsubaki | Kan = Kanae | Str = Satoru | Kei = Keiko | Bun = Bunji}} {{Tree chart| | |,|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | |:| | | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = Kyoko | Shj = Shinji }} {{Tree chart| | Ykr | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = Yukari | YkM = Yukiko | Rji = Reiji | Nnk = Nanako | Nao = Naori | Mcr = Michiru | Khn = Kohane | May = Mayu | Mzk = Mizuki}} {{Tree chart| | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = Toko }} {{Tree chart| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = Yukiko | Yko = Yukio}} {{Tree chart/end}} f67f8b8f707fbf51c7439c237d54d4a40ea7fbd4 Shugo Takashiro 0 62 1021 942 2023-06-12T00:51:54Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Shugo | family name = Takashiro | jname = 高城 秋五 | image = [[File:ssyu0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = }}'''{{c}}''' is a private detective, formerly a police officer. After retiring from the police force, he lived in a brothel and received odd jobs from old contacts. While investigating a string of murders in Ueno, he met {{n|Kazuna|Kozuki}}, an aspiring actress who would eventually become his wife. == Plot == After the events of {{kns|n}}, Shugo moves to Zushi with Kazuna to raise their child. == Relationships == {{family tree}} {{cartagra characters}} {{kns characters|state=collapsed}} 5685c30ad4dd6ee9c08b95865d28ab7c079d8f9a File:Head Kensei.png 6 328 1023 2023-06-12T05:11:12Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Kohane.png 6 329 1024 2023-06-12T05:11:13Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Koharu.png 6 330 1025 2023-06-12T05:11:22Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Kyoko.png 6 331 1026 2023-06-12T05:11:26Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Mamiya.png 6 332 1027 2023-06-12T05:11:31Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Mariko.png 6 333 1028 2023-06-12T05:11:37Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Masaki.png 6 334 1029 2023-06-12T05:11:40Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Mayu.png 6 335 1030 2023-06-12T05:11:44Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Michiru.png 6 336 1031 2023-06-12T05:11:48Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Mio.png 6 337 1032 2023-06-12T05:11:52Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Miya.png 6 338 1033 2023-06-12T05:11:56Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Nanako.png 6 339 1034 2023-06-12T05:12:03Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Naori.png 6 340 1035 2023-06-12T05:12:07Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head natsume.png 6 341 1036 2023-06-12T05:12:12Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Oribe.png 6 342 1037 2023-06-12T05:12:16Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Reiji.png 6 343 1038 2023-06-12T05:12:19Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Rioko.png 6 344 1039 2023-06-12T05:12:22Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Rokushiki.png 6 345 1040 2023-06-12T05:12:24Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Satsuki.png 6 346 1041 2023-06-12T05:12:29Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Saya.png 6 347 1042 2023-06-12T05:12:35Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Shinzo.png 6 348 1043 2023-06-12T05:12:38Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Shizuru.png 6 349 1044 2023-06-12T05:12:42Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head shugo.png 6 350 1045 2023-06-12T05:12:45Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Sou.png 6 351 1046 2023-06-12T05:12:48Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Stella.png 6 352 1047 2023-06-12T05:12:51Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head TokoK.png 6 353 1048 2023-06-12T05:12:54Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head TokoM.png 6 354 1049 2023-06-12T05:12:56Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yaginuma.png 6 355 1050 2023-06-12T05:13:00Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yasutada.png 6 356 1051 2023-06-12T05:13:03Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yayoi.png 6 357 1052 2023-06-12T05:13:08Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yoshimitsu.png 6 358 1053 2023-06-12T05:13:11Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yu.png 6 359 1054 2023-06-12T05:13:15Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yuka.png 6 360 1055 2023-06-12T05:13:18Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yukari.png 6 361 1056 2023-06-12T05:13:21Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head YukikoM.png 6 362 1057 2023-06-12T05:13:29Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yuzuru.png 6 363 1058 2023-06-12T05:13:32Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Bunji.png 6 364 1059 2023-06-12T05:13:34Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Celes.png 6 365 1060 2023-06-12T05:13:37Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Chizuru.png 6 366 1061 2023-06-12T05:13:41Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Fumiya.png 6 367 1062 2023-06-12T05:13:44Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Fuyumi.png 6 368 1063 2023-06-12T05:13:49Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Hideomi.png 6 369 1064 2023-06-12T05:13:53Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Karen.png 6 370 1065 2023-06-12T05:13:56Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Kazuna.png 6 226 1066 669 2023-06-12T05:13:59Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Head Kazuna.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Keigo.png 6 371 1067 2023-06-12T05:14:04Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Charbox 10 219 1068 647 2023-06-12T05:14:51Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|<div class="charbox"> [[File:head_{{{1}}}.png{{!}}119px|link={{{alt|}}}]] <span class="name">{{{alt|}}}</span> </div> |<div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]] <span class="name">{{{1}}}</span> </div> }} ee482bf1f433113c88f4e8a0f2ab5120a4ef263a 1069 1068 2023-06-12T05:15:31Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|<div class="charbox"> [[File:head_{{{1}}}.png{{!}}98px|link={{{alt|}}}]] <span class="name">{{{alt|}}}</span> </div> |<div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]] <span class="name">{{{1}}}</span> </div> }} fb8461d416db07abcde8ec483941fb5353d31532 1074 1069 2023-06-12T05:43:45Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}| [[File:head_{{{1}}}.png{{!}}98px|link={{{alt|}}}]] <span class="name">{{{alt|}}}</span> |<div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]] <span class="name">{{{1}}}</span> </div> }} 49f2bf321f4c8ef32671018275c3cfb94cdbcd7d 1075 1074 2023-06-12T05:44:29Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charbox/styles.css" />{{#if:{{{alt|}}}|<div class="charbox2"> [[File:head_{{{1}}}.png{{!}}98px|link={{{alt|}}}]] <span class="name">{{{alt|}}}</span> </div> |<div class="charbox"> [[File:head_{{{1}}}.png{{#if:{{{2|}}}|{{!}}{{{2|}}}}}|link={{{link}}}]] <span class="name">{{{1}}}</span> </div> }} 98360bf7163abedb802338fdeedf6c9df422bf5e File:Head Meguri.png 6 372 1070 2023-06-12T05:16:20Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head YukikoK.png 6 373 1071 2023-06-12T05:16:22Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Arishima.png 6 374 1072 2023-06-12T05:41:34Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Tokiko.png 6 375 1073 2023-06-12T05:41:36Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Charbox/styles.css 10 223 1076 644 2023-06-12T05:45:09Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2{ position: relative; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ width: 100%; padding: 0.25em 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox2 .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } 1a5a301868f007d923092f7a8cec83b60f93bba2 1077 1076 2023-06-12T05:46:39Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } 0acce3cd4923f4aca28640ca409b235778ca566b 1079 1077 2023-06-12T05:59:04Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2{ display:flex; flex-direction:column; } .charbox2 .name{ width: 100%; padding: 0.25em 0; text-align: center; color: white; background-color: black; } d6b723be89e61c4a0e462a4f81a658bf2f3c4838 1080 1079 2023-06-12T06:09:09Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } 0acce3cd4923f4aca28640ca409b235778ca566b 1095 1080 2023-06-12T12:26:37Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -2em; display: block; width: 100%; } fcfc0bd82f8471cf84e97137ebc28faf757aa28c 1098 1095 2023-06-12T12:33:43Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -2em; display: block; width: 100%; background-color:white; } ad6bb1cbb7421174792acdcb6441b0be14bbe28e 1101 1098 2023-06-12T12:49:58Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -2em; display: block; width: 100%; background-color:white; white-space: nowrap; } d3ee2b452f83aeebec31ff5ec4cadf96c3d0dc3a 1102 1101 2023-06-12T12:51:41Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -23.8px; display: block; width: 100%; background-color:white; white-space: nowrap; } 65b8f4e8bfe36c42c5b876810db8e158e6a1f60d MediaWiki:Common.css 8 7 1078 904 2023-06-12T05:55:29Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 626699f32fea86bede530aa45c52de3a4e56f181 1093 1078 2023-06-12T12:05:53Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-2); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 26c966ff0807036e2b3ed5376788882fe106f16c 1094 1093 2023-06-12T12:06:42Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 52fea86c5fe3295dab91a074afcf3ae29bee2f9f 1097 1094 2023-06-12T12:31:17Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ a4bc90049e68cbf3a168df2c1a52c194fc73d417 1099 1097 2023-06-12T12:36:55Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 35%); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ c8a12e7bf7ed9e9e6003ffcad7b59bd95c828bea 1106 1099 2023-06-12T13:17:20Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ cf5ee1222e9350dc184b525b5c9bf14d62d7ab5e Hinagami-Shigusa family tree 0 327 1081 1022 2023-06-12T06:18:23Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Hinagami}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = Mizuki Itose }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao || | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 6f11cf0fc90103c5fd582cf8921615682458de12 1082 1081 2023-06-12T06:20:08Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = Mizuki Itose }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} cdfc81c5cb22d8e37c80ab023805a28123573b93 1083 1082 2023-06-12T06:21:01Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = Mizuki Itose }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 148919b770fa8cde94aa6893b0e4644aff702bc3 1085 1083 2023-06-12T06:28:27Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbpx|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 18e7ea164c8dee42cf0609cc328f1308f6f44c87 1086 1085 2023-06-12T06:28:56Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Sawashiro}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| |S|P| Kyo |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |G| | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | |Y|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 95f347590fd70022e196ba839c74dc76802e16d9 1087 1086 2023-06-12T06:37:01Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} cf0f7f8b983101702ffa78f425c04fff2923755d 1088 1087 2023-06-12T06:37:16Z Otonashi Ayana 2 Protected "[[Hinagami-Shigusa family tree]]" ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)) wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} cf0f7f8b983101702ffa78f425c04fff2923755d 1089 1088 2023-06-12T06:38:53Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 393c31f9a5ae0b093b36f11e2f1229f744d72294 1090 1089 2023-06-12T06:39:23Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Shigusa}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} cf0f7f8b983101702ffa78f425c04fff2923755d 1091 1090 2023-06-12T06:51:37Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| | |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| | Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 652b3a059d6724978f9defa2d21b898081521f81 1100 1091 2023-06-12T12:37:36Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:100px;| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:100px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:100px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:100px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 717f883fcfcd900f389d49a48ea5c19d9dc4a1a9 1103 1100 2023-06-12T12:57:12Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | | | | | |,|-|-|-|.| | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | Mar | | Cel |P| Rok |v| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 2659a525fe8b7043ead234d97b87abb6980e5caf 1104 1103 2023-06-12T13:03:30Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | | | | | | | | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |-|v|-| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} a69ebd83431d07fccb35bfbb4f48ca72762eb07d File:Head Mizuki.png 6 376 1084 2023-06-12T06:28:25Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Module:Navbox/styles.css 828 96 1092 843 2023-06-12T12:03:53Z Otonashi Ayana 2 sanitized-css text/css /* {{pp|small=y}} */ .navbox { box-sizing: border-box; border: 1px solid #a2a9b1; width: 100%; clear: both; font-size: 88%; text-align: center; padding: 1px; margin: 1em auto 0; /* Prevent preceding content from clinging to navboxes */ } .navbox .navbox { margin-top: 0; /* No top margin for nested navboxes */ } .navbox + .navbox, /* TODO: remove first line after transclusions have updated */ .navbox + .navbox-styles + .navbox { margin-top: -1px; /* Single pixel border between adjacent navboxes */ } .navbox-inner, .navbox-subgroup { width: 100%; } .navbox-group, .navbox-title, .navbox-abovebelow { padding: 0.25em 1em; line-height: 1.5em; text-align: center; } .navbox-group { white-space: nowrap; /* @noflip */ text-align: right; } .navbox, .navbox-subgroup { background-color: #fdfdfd; } .navbox-list { line-height: 1.5em; border-color: #fdfdfd; /* Must match background color */ } .navbox-list-with-group { text-align: left; border-left-width: 2px; border-left-style: solid; } .navbox-even { background-color: #f7f7f7; } .navbox-odd { background-color: transparent; } /* TODO: figure out how to remove reliance on td as structure */ .navbox .hlist td dl, .navbox .hlist td ol, .navbox .hlist td ul, .navbox td.hlist dl, .navbox td.hlist ol, .navbox td.hlist ul { padding: 0.125em 0; } .navbox .navbar { display: block; font-size: 100%; } .navbox-title .navbar { /* @noflip */ float: left; /* @noflip */ text-align: left; /* @noflip */ margin-right: 0.5em; } a3d38174cdd09f9a5a81994a7640137e39147b98 Template:Chart top 10 206 1096 591 2023-06-12T12:29:46Z Otonashi Ayana 2 wikitext text/x-wiki {| class="tree-table collapsible {{#ifeq:{{Yesno-no|{{{collapsed|{{{collapse|}}}}}}}}|yes|collapsed|expanded}}" style="{{#switch:{{{align|}}}{{{float|}}} | left = margin: 0.3em 1em 0.3em 0; float:left; clear:{{{clear|left}}}; min-width:{{{min-width|{{{width|33em}}}}}}; | right = margin: 0.3em 0 0.3em 1em; float:right; clear:{{{clear|right}}}; min-width:{{{min-width|{{{width|33em}}}}}}; | #default = margin: 0.3em auto auto; clear:{{{clear|none}}}; min-width:{{{min-width|{{{width|60em}}}}}}; }} width:{{{width|auto}}}; font-size:85%; border:1px solid #aaa" ! style="padding:0.2em 0.3em 0.2em {{#if:{{{template_name|}}}|0.3em|4.3em}};{{#if:{{{background|}}}|background:{{{background|}}}|background:none}}; width:{{{width|auto}}}" | {{#if:{{{template_name|}}} |{{Navbar-collapsible|{{{title|{{{1|Family of {{PAGENAME}}}}}}}}|{{{template_name}}}}} |{{{title|{{{1|Family of {{PAGENAME}}}}}}}} }} |- | style="text-align:{{{text-align|center}}}" | {{#invoke:Check for unknown parameters|check|unknown=[[Category:Pages using chart top with unknown parameters|_VALUE_{{PAGENAME}}]]|preview=Page using [[Template:Chart top]] with unknown parameter "_VALUE_"|ignoreblank=y| 1 | align | background | clear | collapse | collapsed | float | min-width | template_name | text-align | title | width }}<noinclude> |} {{documentation}}</noinclude> c50ecd19307d995b7d665c5ac23901984dc52786 Ayumu Sato 0 302 1105 996 2023-06-12T13:14:03Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}. == Trivia == *Ayumu is notably tall. She is described as being nearly as tall as {{n|Reiji|Tokisaka}} and her sprite art shows her as taller than most other characters. {{kns characters}} {{kns2 characters|state=collapsed}} bade402a93e4c9462a5de3a35f93015b9603f089 Daisaku Arata 0 229 1107 882 2023-06-12T13:19:41Z Otonashi Ayana 2 Otonashi Ayana moved page [[Takoyaki vendor]] to [[Daisaku Arata]] wikitext text/x-wiki {{infobox character | name = Takoyaki vendor | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. {{cartagra characters}} 5d4586888136db7a63e770d2b4d79271eeae745f 1109 1107 2023-06-12T13:20:07Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Daisaku | family name = Arata | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}The '''takoyaki vendor''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. {{cartagra characters}} 0ee05660130b2bbe6fc551114f4b09643bf97c85 1111 1109 2023-06-12T13:23:31Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Daisaku | family name = Arata | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. == Trivia == *His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance. **His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name. {{cartagra characters}} 511a9ca3aa2678b70c73a5d62a4b175633ff4104 1112 1111 2023-06-12T13:26:46Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Daisaku | family name = Arata | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. == Plot == In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Karen|Hinagami}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}. == Trivia == *His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance. **His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name. {{cartagra characters}} 02249aee779530ee54af0980f6b8f2d09e08a123 1113 1112 2023-06-12T13:28:07Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Daisaku | family name = Arata | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. == Plot == In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Meguri|Takamiya}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}. == Trivia == *His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance. **His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name. {{cartagra characters}} bce50a28fd88f9c1cb4130e9974d78d9296f38d4 Takoyaki vendor 0 377 1108 2023-06-12T13:19:41Z Otonashi Ayana 2 Otonashi Ayana moved page [[Takoyaki vendor]] to [[Daisaku Arata]] wikitext text/x-wiki #REDIRECT [[Daisaku Arata]] cdb2cc5c9bd29d4a1087d8a2d0da9d04eb828cc4 Template:Cartagra characters 10 201 1110 880 2023-06-12T13:20:46Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = {{{state|}}} | listclass = hlist | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * {{n|Daisaku|Arata}} | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] | group3 = Police | list3 = * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} }}<includeonly> [[Category:Cartagra]] [[Category:Characters]] </includeonly> d1315908f26ebc456577d7ec3fae6f5aa1683e66 Karen Hinagami 0 322 1114 1013 2023-06-12T13:30:34Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother. {{kns2 characters}} 14ff2378679ab4ad2005bd88fc7abc9f5e4386da 1115 1114 2023-06-12T13:40:31Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother. == Plot == Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. {{kns2 characters}} 78a91291e1271877e4e2fe5698ae3f7d05f10f5d Karen Hinagami 0 322 1116 1115 2023-06-12T13:41:49Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother. == Plot == Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned. {{kns2 characters}} c05496f8db90b8a8b88ddcb9c7e9f37254b69c02 1117 1116 2023-06-12T13:42:29Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|She is a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned. {{kns2 characters}} 1f28d97cb9e88e33a794b94e8991f37142cbfba7 1118 1117 2023-06-12T13:43:05Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned. {{kns2 characters}} f240c97085c6042a68d3af00fd33a2834bb53a32 1119 1118 2023-06-12T13:44:39Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}} {{kns2 characters}} ca3a2e4a3ead10eb39f5d8e39b27418eb4f25672 1120 1119 2023-06-12T13:45:25Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}} {{kns2 characters}} 11984208921eac70b1ef76a0f61f1e2495888eba 1126 1120 2023-06-12T14:29:03Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}} 063aa79864e9e69bbf451a1649c1cf1ab68c8961 1127 1126 2023-06-12T14:30:08Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders her half-sisters in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 39ada7b5ed51a701f5d544197559fc0518fe7147 Template:Hitogata family tree notice 10 326 1121 1018 2023-06-12T13:56:05Z Otonashi Ayana 2 wikitext text/x-wiki <span style="font-size:smaller">This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].</span> 88ecc375af4efd56147da486b13e41b2320c1221 1125 1121 2023-06-12T14:27:53Z Otonashi Ayana 2 wikitext text/x-wiki <div style="font-size:smaller; text-align:center">This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].</div> 65790a0784d7c7050a9853faf1d248e5347a8cb9 1128 1125 2023-06-12T14:30:44Z Otonashi Ayana 2 wikitext text/x-wiki <div style="font-size:smaller; text-align:center; padding-top:10px">This family tree is truncated for simplicity. For a more complete version, see the [[Hinagami-Shigusa family tree]].</div> 23dd7cfbba7a70411c12c4ddfef435a33dc74377 Template:Family tree/Shizuru's children 10 378 1122 2023-06-12T14:20:43Z Kinzo 4 Created page with "{{Tree chart/start|align=center}} {{Tree chart| Yuz |P|m|P| Rik |-|-|-| Shz |P|m|P|P|P|m|P|P|P|m|P|P|P|m|P|P|P|mp | Yuz = {{charbox|Yuzuru|91px|link=Yuzuru Kuroya}} | Rik = Rika Shigusa | Shz = {{charbox|Shizuru|91px|link=Shizuru Hinagami}}}} {{Tree chart| | | | |!| | | | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | |,|-|^|-|.| | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | Krn | | Mas | | | | | | | | May | | Miz | | Meg | |..." wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| Yuz |P|m|P| Rik |-|-|-| Shz |P|m|P|P|P|m|P|P|P|m|P|P|P|m|P|P|P|mp | Yuz = {{charbox|Yuzuru|91px|link=Yuzuru Kuroya}} | Rik = Rika Shigusa | Shz = {{charbox|Shizuru|91px|link=Shizuru Hinagami}}}} {{Tree chart| | | | |!| | | | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | |,|-|^|-|.| | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | Krn | | Mas | | | | | | | | May | | Miz | | Meg | | Yuu | | Koh | Krn = {{charbox|Karen|91px|link=Karen Hinagami}} | Mas = {{charbox|Masaki|91px|link=Masaki Tomoyuki}} | May = {{charbox|Mayu|91px|link=Mayu Kamizono}} | Miz = {{charbox|Mizuki|91px|link=Mizuki Itose}} | Meg = {{charbox|Meguri|91px|link=Meguri Takamiya}} | Yuu = {{charbox|Yu|91px|link=Yu Futami}} | Koh = {{charbox|Kohane|91px|link=Kohane Tori}}}} {{Tree chart/end}} 99083735af26c7a8128178a83b3837bee4b6413f 1123 1122 2023-06-12T14:24:18Z Kinzo 4 wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| | | | | | | |!| | | | | | |}} {{Tree chart| |,|-|-|-|-|-|+|-|-|-|-|-|.|}} {{Tree chart| |!| | | | | |!| | | | | |!|}} {{Tree chart| Yuz |P|m|P| Rik |-|-|-| Shz |P|m|P|P|P|m|P|P|P|m|P|P|P|m|P|P|P|mp | Yuz = {{charbox|Yuzuru|91px|link=Yuzuru Kuroya}} | Rik = Rika Hinagami | Shz = {{charbox|Shizuru|91px|link=Shizuru Hinagami}}}} {{Tree chart| | | | |!| | | | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | |,|-|^|-|.| | | | | | | | | |!| | | |!| | | |!| | | |!| | | |!|}} {{Tree chart| | Krn | | Mas | | | | | | | | May | | Miz | | Meg | | Yuu | | Koh | Krn = {{charbox|Karen|91px|link=Karen Hinagami}} | Mas = {{charbox|Masaki|91px|link=Masaki Tomoyuki}} | May = {{charbox|Mayu|91px|link=Mayu Kamizono}} | Miz = {{charbox|Mizuki|91px|link=Mizuki Itose}} | Meg = {{charbox|Meguri|91px|link=Meguri Takamiya}} | Yuu = {{charbox|Yu|91px|link=Yu Futami}} | Koh = {{charbox|Kohane|91px|link=Kohane Tori}}}} {{Tree chart/end}} 306c82b00db0ef36a84a1c2d4d90e14fa0631852 Karen Hinagami/Family tree 0 379 1124 2023-06-12T14:24:35Z Kinzo 4 Created page with "{{family tree/Shizuru's children}}" wikitext text/x-wiki {{family tree/Shizuru's children}} 0acc07a4c7fdd7eca5ac8ec685b7dc003d529ea8 Nanako Sawashiro 0 325 1129 1016 2023-06-12T14:47:22Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Nanako | family name = Sawashiro | jname = | image = [[File:saw0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. She worked for the Kuroya clinic while in Hitogata, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]]. == Plot == Nanako spent most of her life in the [[Hitogata]] settlement with her father, Ginji Sawashiro. She was regularly subjected to sexual abuse at her father's hands, including being forced into prostitution. She and her father eventually moved to Tokyo together, where she murdered him with the help of {{n|Naori|Kuroya}}. She began working at the [[Kuchiki Hospital]] as a part-time nurse and later took on a second job at the New Leaf Garden nursery. {{kns2 characters}} cdf6782e42344eab3356db9e3c1cc00d766a3cb1 Yayoi Shigusa 0 380 1130 2023-06-12T17:20:28Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Yayoi | family name = Shigusa | jname = 祠草 夜宵 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. {{kns2 characters}}" wikitext text/x-wiki {{infobox character | given name = Yayoi | family name = Shigusa | jname = 祠草 夜宵 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. {{kns2 characters}} 1a0fbca5f7fea96cb01f8ff455f964b881581931 Yukiko Kayahara 0 381 1131 2023-06-12T17:57:28Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Yukiko | family name = Kayahara | jname = 茅原 雪子 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of..." wikitext text/x-wiki {{infobox character | given name = Yukiko | family name = Kayahara | jname = 茅原 雪子 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends. == Plot == Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality. Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs {{n|Hazuki|Kyoko}} in [[Moon World]] but flees upon seeing Kyoko's blood. A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}. }} {{kns2 characters}} 13aaa4ab77c083b27f9d47004888969356e8c96e 1132 1131 2023-06-12T17:57:58Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Yukiko | family name = Kayahara | jname = 茅原 雪子 | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends. == Plot == Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality. Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs Kyoko in [[Moon World]] but flees upon seeing her blood. A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}. }} {{kns2 characters}} b0db3d7593e75a1df82ddbeff25ef0e8954f15c6 Template:Charname 10 173 1133 448 2023-06-12T18:08:42Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character-name" style="display:inline-flex; text-decoration:underline"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span> 6d907342d3655bf45dc0f315f03694e8ffa2c05e 1134 1133 2023-06-12T18:09:39Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character-name" style="display:inline-flex;"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span> 60fb4fba35b76db9d220ae0397b588feb49da3c7 1135 1134 2023-06-12T18:10:53Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Charname/styles.css" /><span class="character-name" style="display:inline-flex;"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span> 2de8f4fdb97e1601c2b5f24e0d1ce6017c3e365b 1137 1135 2023-06-12T18:15:42Z Otonashi Ayana 2 wikitext text/x-wiki <span class="character-name" style="display:inline-flex;"><span class="given-name">{{{1}}}</span> <span class="family-name">{{{2|}}}</span></span> 60fb4fba35b76db9d220ae0397b588feb49da3c7 MediaWiki:Common.css 8 7 1138 1106 2023-06-12T18:16:01Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 10be15a7981deb71c261633d4fac2fccc659490e MediaWiki:Tagline 8 45 1139 88 2023-06-12T19:33:46Z Otonashi Ayana 2 wikitext text/x-wiki ''Click [[How to see spoilers|here]] to see spoilers'' 0903a78ff1aad687bf4f968903ddf137b61a2184 1140 1139 2023-06-12T19:34:34Z Otonashi Ayana 2 wikitext text/x-wiki <i>In order to see spoilers, see the Main Page</i> b1b62dcc3a3ed315f16449ca6181c1e4607a3b99 1141 1140 2023-06-12T19:34:48Z Otonashi Ayana 2 wikitext text/x-wiki In order to see spoilers, see the Main Page 6e5d77ce38b3d836471987c0eaee12e6cbebbb1a Template:Main Page 10 180 1142 998 2023-06-12T19:36:11Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css />This is a wiki dedicated to '''{{kns|n}}''', a trilogy of visual novels developed by Innocent Grey. Each title follows a strange set of murders taking place in 1950s Japan. <div style="text-align:center">'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''</div> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png|link=Cartagra]] <div class="item-title"> Cartagra </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png|link=Kara no Shoujo]] <div class="item-title"> Kara no Shōjo </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]] <div class="item-title"> Kara no Shōjo<br>The Second Episode </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]] <div class="item-title"> Kara no Shōjo<br>The Last Episode </div> </div> </div> 6a12bca9139340d390542ebeb8638c2d0025953c 1143 1142 2023-06-12T19:36:21Z Otonashi Ayana 2 wikitext text/x-wiki <templatestyles src="Main Page/styles.css />This is a wiki dedicated to '''{{kns|n}}''', a trilogy of visual novels developed by Innocent Grey. Each title follows a strange set of murders taking place in 1950s Japan. <div style="text-align:center">'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''.</div> = Games = <div class="main-page-carousel"> <div class="main-page-display"> [[File:cover cartagra.png|link=Cartagra]] <div class="item-title"> Cartagra </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo.png|link=Kara no Shoujo]] <div class="item-title"> Kara no Shōjo </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 2.jpg|link=Kara no Shoujo - The Second Episode]] <div class="item-title"> Kara no Shōjo<br>The Second Episode </div> </div> <div class="main-page-display"> [[File:cover kara no shoujo 3.png|link=Kara no Shoujo - The Last Episode]] <div class="item-title"> Kara no Shōjo<br>The Last Episode </div> </div> </div> d408adf22a8f5b330e45a91f87f529ed0b70fb58 How to see spoilers 0 267 1144 768 2023-06-12T19:37:43Z Otonashi Ayana 2 wikitext text/x-wiki ;In order to see spoilers on this wiki, follow these steps: # [[Special:CreateAccount|Create an account]] # Go to the "Gadgets" tab under your profile preferences page (''Clicking [[Special:Preferences#mw-prefsection-gadgets|'''this link''']] should take you directly there'') # Under the "Spoilers" header, select which games you would like to see spoilers for e7fa37de6c1b727ceff0c7463d4dfb3b26bd673f Kara no Shoujo 0 181 1145 999 2023-06-12T19:41:15Z Otonashi Ayana 2 /* Trivia */ wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo|lit. "Girl in the Shell"}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Trivia == *{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. ''Inferno'' also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} 0a9777575b29f6cb49a2798ae73be0cc864445c7 1157 1145 2023-06-12T21:11:03Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Trivia == *{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. ''Inferno'' also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} 0578c4b46073e4dbdf52e04ab78711332b9cc8f7 1161 1157 2023-06-12T21:15:41Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo''}}{{infobox game | title = Kara no Shōjo | jtitle = 殻ノ少女 | image = [[File:Cover kara no shoujo.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :July 4, 2008 ; HD Remaster : December 12, 2009 }} | prev = {{cartagra}} | next = {{kns2}} }} {{nihongo|'''''Kara no Shōjo'''''|殻ノ少女|Kara no Shoujo}}, also released under the title '''''The Shell Part I: Inferno''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the first mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he investigates a string of gruesome murders in Tokyo. It was first released on July 4, 2008. == Premise == In 1956, private detective {{n|Reiji|Tokisaka}} is brought on to assist a police investigation into the serial murder of several schoolgirls in Tokyo, a case which resembles a previous serial murder incident that claimed Reiji's fiancée. As part of the investigation, Reiji goes undercover at [[Ouba Girls Academy]], where several girls have gone missing, and unravels a web of dark secrets. == Trivia == *{{kns|n}} is heavily inspired by Dante's [[w:Inferno (Dante)|''Inferno'']]. ''Inferno'' also serves as an in-universe inspiration for the string of murders, with excerpts from the text being found in the mouths of several victims. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns/cat}} 90b25829d80daa2cd86b4f0793e9c78143d44100 Shinji Mamiya 0 383 1146 2023-06-12T20:25:00Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]'..." wikitext text/x-wiki {{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}} == Plot == {{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face is partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}. In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}. }}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close. Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}} {{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}} {{kns characters}} 5cae4d2e17472c0dfce11429c659c89cc84e1c23 1147 1146 2023-06-12T20:26:16Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}} == Plot == {{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}. In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}. }}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close. Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}} {{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}} {{kns characters}} 97bce5afcd4527a6c4034132c9768af9f6a0978f 1150 1147 2023-06-12T20:56:36Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:ssin0106a.png|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}} == Plot == {{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}. In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}. }}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close. Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}} {{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}} {{kns characters}} 639fa84996aeba5c75b0359091504c0178d729f9 Template:Kns characters 10 138 1148 989 2023-06-12T20:56:03Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Uozumi|Kyozo}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = [[Ouba Private Girls' Academy|<span style="color:#202122">Ouba Academy</span>]] | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * [[Shinji Mamiya|{{o|Shin|Katsuragi}}]] }} <includeonly> [[Category:Characters]] {{kns/cat}} </includeonly> 189f82670313113b7599623a080d33b690eef1cf File:Ssin0106a.png 6 384 1149 2023-06-12T20:56:30Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Main Page/styles.css 10 179 1151 522 2023-06-12T20:58:49Z Otonashi Ayana 2 sanitized-css text/css #siteSub{ display:none; } .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; transition: transform 0.5s ease; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: x-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } .main-page-display:hover img{ transform: scale(1.05); } 057ea0d262f9353b4893cebc201265e3b4c736b2 1152 1151 2023-06-12T21:00:07Z Otonashi Ayana 2 sanitized-css text/css #siteSub{ display:none !important; } .main-page-carousel{ display:flex; flex-direction:row; justify-content:center; gap:1em; padding-top: 1em; } .main-page-display{ position: relative; display: flex; flex-direction: column; justify-content: center; align-items:center; width: 210px; height: 315px; border: 1px solid black; border-radius: 21px; overflow: hidden; } .main-page-display > p{ height:100%; width:100%; } .main-page-display a{ display:flex; justify-content:center; align-items:center; height:100%; width:100%; } .main-page-display img{ max-height:100%; width:auto; transition: transform 0.5s ease; } .item-title{ position: absolute; bottom: 0; display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; opacity: 0; text-align: center; font-size: x-large; color: white; background-color: rgba(0,0,0,0.5); transition: opacity 0.5s ease; } .main-page-display:hover .item-title{ opacity: 100; } .main-page-display:hover img{ transform: scale(1.05); } e43769b6cf292ef567168315edefd86a225e77cf File:Kara no Shoujo.png 6 385 1153 2023-06-12T21:05:51Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Kara no Shoujo (painting) 0 289 1154 877 2023-06-12T21:06:23Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}[[File:Kara no Shoujo.png|thumb]]'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}} {{kns|cat}} be191800a37abd551c51c11284b5db81e1a5cbaf 1155 1154 2023-06-12T21:06:49Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:{{kns|n}} (painting)}}[[File:Kara no Shoujo.png|thumb]]'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}} {{kns|cat}} 61f833c46d7b2e7110b34521cdf364d0a3a7ff88 1156 1155 2023-06-12T21:07:07Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:{{kns|n}} (painting)}}[[File:Kara no Shoujo.png|thumb]]'''''Kara no Shōjo''''' is a painting by renowned artist {{n|Shinzo|Mamiya}}. {{spoiler|kns|The painting was created in a fit of madness after Shinzo murdered his personal assistant, {{n|Misa|Rokushiki}}.}} {{kns/cat}} edb03cc1edcd082f3deda73746be63b0578d49f0 Template:Infobox game 10 224 1158 668 2023-06-12T21:14:03Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | header11 = Volume Chronology | data12 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; vertical-align: top" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|"{{{prev|}}}"|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|"{{{next|}}}"|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> ae946c47055ffb33b71917f4dafda1ca2607e9eb 1159 1158 2023-06-12T21:15:06Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; vertical-align: top" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|"{{{prev|}}}"|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|"{{{next|}}}"|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 18fe040ce10e197edd9cc0af7ae8c0f0f5795587 1160 1159 2023-06-12T21:15:33Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; vertical-align: top" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 205da25238c10ba8075fd8098406be24564b1eb8 1162 1160 2023-06-12T21:18:36Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: rgba(0,0,0,0.5); text-align: center; line-height: 1.4em; vertical-align: top" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> faf4e4c1c0c8492186a88e66bbe98683f8f21427 1164 1162 2023-06-12T21:19:14Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: rgba(0,0,0,0.14); text-align: center; line-height: 1.4em; vertical-align: top" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 389312279a3c293ff99a0f786e8877c9022ad6c3 1165 1164 2023-06-12T21:20:27Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em;" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 945cbdb1c1d7d1b6422c393f0db960a2120a8e0b 1166 1165 2023-06-12T21:20:41Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; border-top: 1px solid black" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 44592a8b66919baa0ee4e160825805088962e145 Kara no Shoujo - The Second Episode 0 182 1163 1002 2023-06-12T21:19:00Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} | prev = {{kns}} | next = {{kns3}} }} {{nihongo|'''''Kara no Shōjo — The Second Episode'''''|虚ノ少女|Uro no Shoujo|lit. "Girl in the Void"}}, also released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == Trivia == *{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 9be1f6263564aa9bc4ae12a545649494f4b8499e Cartagra 0 194 1167 892 2023-06-12T21:21:04Z Otonashi Ayana 2 wikitext text/x-wiki {{italic title}}{{infobox game | title = Cartagra ~Affliction of the Soul~ | jtitle = カルタグラ~ツキ狂イノ病~ | image = [[File:Cover cartagra.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * KID * Blueberry Soft * MangaGamer }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows, PlayStation 2 | release = {{plainlist | * March 28, 2005 }} | next = {{kns}} }}{{nihongo|'''''Cartagra ~Affliction of the Soul~'''''|カルタグラ~ツキ狂イノ病~|Cartagra ~Tsuki Kurui no Yamai~-}} is a mystery visual novel developed by [[Innocent Grey]]. It has retroactively been deemed a predecessor to the ''Kara no Shōjo'' series. == Premise == In 1950, {{n|Shugo|Takashiro}}, a retired police officer, is approached by the wealthy {{n|Keiichiro|Kozuki}} to begin a phony search for his daughter, {{n|Yura|Kozuki}}, who vanished five years prior. Keiichiro believes his daughter is long dead and merely wants Shugo to maintain the pretense of searching to appease Keiichiro's other daughter, {{n|Kazuna|Kozuki}}. Meanwhile, Shugo gets increasingly involved in an investigation into the string of bizarre murders that are plaguing Ueno. == Characters == == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] [[Category:Cartagra]] 657448849097ed13d1f12e1640eb448854c8b192 Template:Infobox game 10 224 1168 1166 2023-06-12T21:21:35Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; border-top: 1px solid rgba{0,0,0,0.14); padding-top: 10px" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> b4594cd9d2fc10334642e87ad9878b2721cd25b2 1169 1168 2023-06-12T21:21:52Z Otonashi Ayana 2 wikitext text/x-wiki <includeonly>{{ infobox | abovestyle = background:var(--theme-color);font-weight:normal; | headerstyle = background:var(--theme-color); | bodystyle = border-spacing:3.5px; | above = '''''{{{title}}}'''''<br>{{{jtitle}}} | image = {{{image|}}} | label2 = Developer | data2 = {{{developer|}}} | label3 = Publisher | data3 = {{{publisher|}}} | label4 = Director | data4 = {{{director|}}} | label5 = Writer | data5 = {{{writer|}}} | label6 = Artist | data6 = {{{artist|}}} | label7 = Composer | data7 = {{{composer|}}} | label8 = Platform | data8 = {{{platform|}}} | label9 = Release | data9 = {{{release|}}} | label10 = Genre | data10 = {{{genre|}}} | data11 = {{{!}} style="width:100%; background: transparent; text-align: center; line-height: 1.4em; border-top: 1px solid rgba(0,0,0,0.14); padding-top: 10px" {{!}} style="width: 50%; padding: 0.2em 0.1em 0.2em 0; text-align: center;" {{!}} ←&nbsp;'''Previous'''<br />{{#if:{{{prev|}}}|{{{prev|}}}|&mdash;}} {{!}} style="width: 50%; padding: 0.2em 0 0.2em 0.1em; text-align: center;" {{!}} '''Next'''&nbsp;→<br />{{#if:{{{next|}}}|{{{next|}}}|&mdash;}} {{!}}} }}</includeonly> <noinclude>{{documentation}}</noinclude> 8b1c18bdd931132698cd120cee5eaf287dfba48d Kara no Shoujo - The Second Episode 0 182 1170 1163 2023-06-12T21:25:20Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} | prev = {{kns}} | next = {{kns3}} }} '''''Kara no Shōjo — The Second Episode''''', originally released as {{nihongo|'''''Uro no Shōjo'''''|虚ノ少女}} and later released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Characters == == Trivia == *{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 7ba22dab203b49f671cf6a3a7b4ec37cf2e0908c Template:Kns3/cat 10 386 1171 2023-06-12T21:29:27Z Otonashi Ayana 2 Created page with "<includeonly>[[Category:Kara no Shōjo 3]]</includeonly>" wikitext text/x-wiki <includeonly>[[Category:Kara no Shōjo 3]]</includeonly> 62e64a277b76c777c270d25502c19957f199e9c2 Kara no Shoujo - The Last Episode 0 387 1172 2023-06-12T21:29:56Z Otonashi Ayana 2 Created page with "{{DISPLAYTITLE:''Kara no Shōjo — The Last Episode''}}{{infobox game | title = Kara no Shōjo — The Last Episode | jtitle = | image = [[File:Cover kara no shoujo 3.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = December 25, 2020 | p..." wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Last Episode''}}{{infobox game | title = Kara no Shōjo — The Last Episode | jtitle = | image = [[File:Cover kara no shoujo 3.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = December 25, 2020 | prev = {{kns2}} }} '''''Kara no Shōjo — The Last Episode''''', originally released as {{nihongo|'''''Ama no Shōjo'''''|天ノ少女}} and later released under the title '''''The Shell Part III: Paradiso''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the final entry into the ''Kara no Shōjo'' series. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns3/cat}} ccf2722bf6ef7178b4a652caeac97cf375ee3eff MediaWiki:Gadget-hide-spoiler-warning 8 388 1173 2023-06-12T21:32:13Z Otonashi Ayana 2 Created page with "Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page." wikitext text/x-wiki Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page. 3e422339a4da835b69f067b752d1dbd0a78bfb76 1174 1173 2023-06-12T21:32:59Z Otonashi Ayana 2 Otonashi Ayana moved page [[MediaWiki:Gadget-Hide spoiler warning]] to [[MediaWiki:Gadget-Hide-spoiler-warning]] without leaving a redirect wikitext text/x-wiki Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page. 3e422339a4da835b69f067b752d1dbd0a78bfb76 1176 1174 2023-06-12T21:35:45Z Otonashi Ayana 2 Otonashi Ayana moved page [[MediaWiki:Gadget-Hide-spoiler-warning]] to [[MediaWiki:Gadget-hide-spoiler-warning]] without leaving a redirect wikitext text/x-wiki Hide the ''{{Mediawiki:Tagline}}'' text at the top of each page. 3e422339a4da835b69f067b752d1dbd0a78bfb76 MediaWiki:Gadgets-definition 8 46 1175 451 2023-06-12T21:34:52Z Otonashi Ayana 2 wikitext text/x-wiki == header-general == * hide-spoiler-warning | hide-spoiler-warning.css * name-order | name-order.css == header-spoilers == Unchecked items have their spoilers hidden by default. To reveal spoilers for a given game, check the associated box. This will reveal all spoilers for the game. * cartagra | spoilers/cartagra.css * kns1 | spoilers/kns1.css * kns2 | spoilers/kns2.css * kns3 | spoilers/kns3.css e3a024ce92b5a87227c42383417a1c630fd1f53c MediaWiki:Gadget-hide-spoiler-warning.css 8 389 1177 2023-06-12T21:36:09Z Otonashi Ayana 2 Created page with "#siteSub{ display: none !important; }" css text/css #siteSub{ display: none !important; } 215b32feed3fffa3fb214529c25e784c3f38bcfa MediaWiki:Gadget-section-header-general 8 390 1178 2023-06-12T21:36:36Z Otonashi Ayana 2 Created page with "General" wikitext text/x-wiki General 9239ee2cda84eca4c3440e2a7b50148af67da3d4 Masaki Tomoyuki 0 304 1179 1019 2023-06-12T21:40:36Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = 智之 真崎 | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|智之 真崎}}, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}}, is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. == Relationships == {{family tree}} {{hitogata family tree notice}} == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} a2e2fae8c04a93f5cd6e42bb5e735a0bc0ca7212 1185 1179 2023-06-12T21:51:37Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = 智之 真崎 | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|智之 真崎}}, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}}, is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. {{clr| == Relationships == {{family tree}} {{hitogata family tree notice}} }} == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} cd088bfce3ca6ce00dfd227b9cdf07a510e0bbd4 1186 1185 2023-06-12T21:53:17Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = 智之 真崎 | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|智之 真崎}}, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}}, is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} 28d4de794b59cc1b4db4fad70bcc104ca8ca7c4f 1215 1186 2023-06-13T04:19:17Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = 智之 真崎 | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|智之 真崎}}{{spoiler|kns2|, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}},}} is a man who is falsely accused of the murder of {{n|Mayu|Hinagata}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} 0d0bda66727c1087458d4c5fb4a58ee7e99e660d Daisaku Arata 0 229 1180 1113 2023-06-12T21:46:08Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Daisaku | family name = Arata | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. == Plot == In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Meguri|Takamiya}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}. == Trivia == *His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance. **His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name. {{cartagra characters}} {{kns2 characaters|state=collapsed}} 705f82ff826633f46c862adbd6e0a5f168d54b6b 1181 1180 2023-06-12T21:46:36Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Daisaku | family name = Arata | jname = | image = [[File:tako_cartagra.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an enigmatic old man who runs an unpopular takoyaki cart in [[Ueno]]. He sells various obscure types of takoyaki, however his intimidating aura drives away most potential customers. == Plot == In {{kns2}}, Daisaku's refusal to take down old fliers for the Takashiro detective agency that are attached to his cart inadvertently leads both {{n|Meguri|Takamiya}} and {{n|Yayoi|Shigusa}} to {{n|Reiji|Tokisaka}} and {{n|Masaki|Tomoyuki}}. == Trivia == *His name is never given during {{cartagra}} or the {{kns}} titles, as he is always described as merely a takoyaki vendor with a murderous appearance. **His name appears once, in {{kns2}}, after {{o|Reiji|Tokisaka}} receives a New Years card from him, however Reiji does not recognize the name. {{cartagra characters}} {{kns2 characters|state=collapsed}} 02d3b7f7272e8e2cd14cdac369276ccbd11d67e7 Template:Kns2 characters 10 313 1182 997 2023-06-12T21:47:07Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Ryoichi|Yaginuma}} * {{n|Masaki|Tomoyuki}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> ca9b893e23b5c88fcefc72f21c9d6a5d8fedbc3a 1187 1182 2023-06-12T21:56:51Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> a7f0f0a943e6ecc9410f23c38d7c3b847c173f61 Masaki Tomoyuki/Family tree 0 391 1183 2023-06-12T21:48:52Z Otonashi Ayana 2 Created page with "{{Family tree/Shizuru's children}}" wikitext text/x-wiki {{Family tree/Shizuru's children}} fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e Template:Clr 10 392 1184 2023-06-12T21:51:25Z Otonashi Ayana 2 Created page with "<div style="clear:both">{{{1}}}</div>" wikitext text/x-wiki <div style="clear:both">{{{1}}}</div> 63fa839ffdc9b908276ae2c797ebf41515821caa File:Rok0101.png 6 393 1188 2023-06-12T22:06:52Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Makoto Rokushiki 0 394 1189 2023-06-12T22:15:47Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == After Makoto's girlfriend, {{n|Celes|Stella}}, developed a degenerative disease..." wikitext text/x-wiki {{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == After Makoto's girlfriend, {{n|Celes|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. His psychiatric techniques helped [[Stella]] overcome her muteness. Makoto murdered a total of five women, among the being {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}. 3061a07dd99e29ac54a43e0d6c6f9a12de10c51f 1190 1189 2023-06-12T22:16:19Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == After Makoto's girlfriend, {{n|Celes|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. His psychiatric techniques helped [[Stella]] overcome her muteness. Makoto murdered a total of five women, among the being {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}. {{kns characters}} {{kns2 characters|state=collapsed}} 091d80ee67a594ab461c2482444289d4c3ac5149 1197 1190 2023-06-12T23:50:03Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == Though primarily a psychiatrist, Makoto is an extremely talented doctor with a wide array of medical knowledge in countless fields. After World War II, he spent his time curing people on the streets, finding passion in saving others. However, he had a spiritual crisis when a pregnant prostitute asked him for an abortion, an act he disagreed with as a devout Catholic. He performed the surgery, however he fed the prostitute a poisoned drink afterwards, killing her as a form of religious revenge. In doing so, Makoto slipped into madness and came to believe it was his duty to dispense justice to those who violated the "sacred right to life." He crucified the prostitute on a cross and then murdered five more women in the same manner, all of whom were consdering abortion. Among these victims were {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}. After Makoto's girlfriend, {{n|Celestial|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. Makoto was romantically involved with his sister, {{n|Misa|Rokushiki}}, however he has a testicular disease that has rendered him infertile. As such, he believes that Misa's daughter, {{n|Toko|Kuchiki}}, was a result of parthenogenesis and does not consider himself to be her father. His psychiatric techniques helped {{n|Maris|Stella}} overcome her muteness. == Trivia == * Makoto has [[w:situs inversus|situs inversus]]; if Reiji tries to shoot him in the heart at the end of {{kns}}, Makoto survives as his heart is on the opposite side of his body. {{kns characters}} {{kns2 characters|state=collapsed}} 26f2e46dd9975312611ffb42d4277331fb7243ae 1205 1197 2023-06-13T01:28:24Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == Though primarily a psychiatrist, Makoto is an extremely talented doctor with a wide array of medical knowledge in countless fields. After World War II, he spent his time curing people on the streets, finding passion in saving others. However, he had a spiritual crisis when a pregnant prostitute asked him for an abortion, an act he disagreed with as a devout Catholic. He performed the surgery, however he fed the prostitute a poisoned drink afterwards, killing her as a form of religious revenge. In doing so, Makoto slipped into madness and came to believe it was his duty to dispense justice to those who violated the "sacred right to life." He crucified the prostitute on a cross and then murdered five more women in the same manner, all of whom were consdering abortion. Among these victims were {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}. After Makoto's girlfriend, {{n|Celestial|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. Seeking some sort of penance for failing to save her, Makoto devoted his time to curing Celestial's sister, {{n|Maris|Stella}}, of her muteness. Makoto was romantically involved with his sister, {{n|Misa|Rokushiki}}, however he has a testicular disease that has rendered him infertile. As such, he believes that Misa's daughter, {{n|Toko|Kuchiki}}, was a result of parthenogenesis and does not consider himself to be her father. == Trivia == * Makoto has [[w:situs inversus|situs inversus]]; if Reiji tries to shoot him in the heart at the end of {{kns}}, Makoto survives as his heart is on the opposite side of his body. {{kns characters}} {{kns2 characters|state=collapsed}} 4b0b040d16c3f75d6736c5497b29b82567b4a876 Shinji Mamiya 0 383 1191 1150 2023-06-12T22:17:38Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:ssin0106a.png|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name, {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}} == Plot == {{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}. In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}. }}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close. Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}} {{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}} == Trivia == * Shinji took his pen-name from {{n|Motoko|Katsuragi}}, a nun who cared for him at the [[Sisters of Benevolence]] orphanage. {{kns characters}} 9673af440977902f9532e6c6baaacb5578d7caf6 1192 1191 2023-06-12T22:32:09Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:ssin0106a.png|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}} == Plot == {{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later remarried with his personal assistant, {{n|Misa|Rokushiki}}. In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}. }}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close. Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}} {{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}} == Trivia == * Shinji took his pen-name from {{n|Motoko|Katsuragi}}, a nun who cared for him at the [[Sisters of Benevolence]] orphanage. {{kns characters}} d24a6ec3951aef744f602466044d39fe1e6e4b3d 1208 1192 2023-06-13T02:16:25Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Shinji | family name = Mamiya | jname = マミヤ 真司 | image = [[File:ssin0106a.png|x300px]] | aka = {{o|Shin|Katsuragi}} | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|マミヤ 真司}}, better known by his pen name {{nihongo|'''{{o|Shin|Katsuragi}}'''|葛城 シン}}, is an author who wrote the popular novellas ''[[The Egg of Neanis]]'' and ''[[The Shell of Sheol]]''. {{spoiler|kns|He is the primary antagonist of {{kns}}.}} == Plot == {{spoiler|kns|Shinji is the son of famous artist {{n|Shinzo|Mamiya}} and his wife, {{o|Miyuki|Mamiya}}. As Miyuki was infertile, Shinji was conceived using in vitro fertilization, with {{n|Mio|Mizuhara}} serving as his surrogate mother. When Shinji was a child, Miyuki developed a severe form of cacophobia after her face was partially burned. Over time, she began to regularly sexually assault Shinji. During one of these instances, Shinji pushed Miyuki away, accidentally killing her when her head hits the corner of a table. Shinzo covered up the death and later become romantically involved with his personal assistant, {{n|Misa|Rokushiki}}. As Misa was a considerably more motherly figure than Miyuki, Shinji considered Misa to be his real mother. In 1944, Shinzo murdered Misa in a fit of madness. He dismembered Misa's body and fashioned her corpse into an art piece that would later serve as the inspiration for his masterpiece, {{knsp}}. In the spring of 1945, Shinji accidentally found Misa's corpse and ran away from home. Shinji was taken in by the [[Sisters of Benevolence]] orphanage, where he met [[Stella]] and {{n|Toko|Kuchiki}}. }}Shinji became a famous author under the pen name {{o|Shin|Katsuragi}}. {{spoiler|kns|His novella ''[[The Egg of Neanis]]'' became especially popular with teenage girls, influencing a student crime ring in [[Ouba Private Girls' Academy]] called Schisma. One student, {{n|Yui|Nishizono}}, meets Shinji at a book signing and the two become close. Shinji's latent madness eventually inspires him to murder several girls in an attempt to recreate the grotesque {{kns|n}} that Shinzo had created from Misa's corpse. On April 8, 1956, Shinji happens to see {{n|Toko|Kuchiki}} on a train, the first time he had seen her since leaving the Sisters of Benevolence orphanage. Her resemblance to Misa causes Shinji to obsess over her. When a car accident forces Toko to undergo extensive surgery that leaves her without her limbs, Shinji abducts Toko and flees Tokyo.}} {{spoiler|kns2|While caring for Toko in the mountains of Tama, Shinji meets {{n|Naori|Kuroya}}, who uses his medical expertise to help the two when Toko's pregnancy becomes evident. After reading a draft of Shinji's latest work, ''[[The Sheep of Purgatorio]]'', Naori murders Shinji and completes the novella himself, anonymously sending it to a publisher under Shinji's name.}} == Trivia == * Shinji took his pen-name from {{n|Motoko|Katsuragi}}, a nun who cared for him at the [[Sisters of Benevolence]] orphanage. {{kns characters}} a8179a0536c539428962340d6f4c8bf97a14acd7 Hinagami-Shigusa family tree 0 327 1193 1104 2023-06-12T22:39:40Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-| Ari | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | | | | Mho |P|P|G| | | |,|-|-|-|.| | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|.| | | |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | | | |!| | | | | | | | | | | | | | |!| | | |Y|m|P| OrS | | Ori | | | | | | | Yuk = Yukihito Nakahara | OrS = Oribe's sister | Ori = {{charbox|Oribe|alt=Oribe Tokihiro}} }} {{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok | | Mis |-|-|(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | | | Yay | | | | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Stella}} | Cel = {{charbox|Celes|alt=Celes Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = Misa Rokushiki | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|T| | |,|-|-|-|.| | | |!| | | | | | | | | | | | | | | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |Y|m|P| Kan |-| Str |Y|P| Kei | | Bun | | |!| | | | | | | | | | | | | | | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | |!| | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | |!| | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | Mzk | | | | | | | | | | | | | | | | | | |!| | | | | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P|P| Tok | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = Yukio }} {{Tree chart/end}}</div> {{chart bottom}} 4d04248e8084e19c07f10c124cab8d6e8daac48c 1201 1193 2023-06-13T01:01:16Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = Rika Hinagami | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }} {{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }} {{Tree chart/end}}</div> {{chart bottom}} 4a5fb1779480c3c098af41ca982f53ed33066291 1203 1201 2023-06-13T01:11:15Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = {{charbox|Rika|alt=Rika Hinagami}} | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }} {{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }} {{Tree chart/end}}</div> {{chart bottom}} 632782eb108bca906a79e25173ed80d57f6de908 1204 1203 2023-06-13T01:15:29Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = {{charbox|Rika|alt=Rika Hinagami}} | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |,|-| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }} {{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |(| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |`|-| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }} {{Tree chart/end}}</div> {{chart bottom}} 26031d9cab8bdae332b32455db2d241e6318758f 1207 1204 2023-06-13T02:16:08Z Otonashi Ayana 2 wikitext text/x-wiki {{chart top|Hinagami-Shigusa family tree}}<div class="tree-width"> {{Tree chart/start}} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |,|-|-|-|-|-|-|-|v|-|-|-|-|-|-|-|-|-|-|-|-|.| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou | | | | | | | Mrk |-|-|-|v|-| Hid |P|P|P|P|T| | | | | | Rio |-|v|-| Ysh | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Sou = {{charbox|Sou|alt=Sou Kuroya}} | Mrk = {{charbox|Mariko|alt=Mariko Hinagami}} | Hid = {{charbox|Hideomi|alt=Hideomi Hinagami}} | Rio = {{charbox|Rioko|alt=Rioko Shigusa}} | Ysh = {{charbox|Yoshimitsu|alt=Yoshimitsu Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | Shi | | | | | | | | | | | | | | |,|-|^|-|.| | | |,|-|-|-|-|-|-|-|+|-|-|-|-|-|.| | |Q| | | | | | | | | |)|-|-|-|v|-|-|-|-|-|v|-|-|-|-|-|-|-|-|.| | | |S|P|P| Ykn |-|-| Ari | | | | | | | | | | Shi = Shinjiro Nakahara | Ykn = Yukino Arishima | Ari = {{charbox|Arishima|alt=Kazuma Arishima}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | |!| | | | | | | | | Ytd |-|v|-| Cst | | Ckg |v| Yzr |P|P|m|P|P| Rka |-|v|-| Szr |T|Y|P|P|m|P|P|P|P|P| Say | | Miy |-|v|-| Ken | | | | | | | Mho |P|P|G| | | |,|-|-|-|-|.| | | | | | | | | | | Ytd = {{charbox|Yasutada|alt=Yasutada Kuchiki}} | Cst = Chisato Kuroya | Ckg = Chikage Kuroya | Yzr = {{charbox|Yuzuru|alt=Yuzuru Kuroya}} | Rka = {{charbox|Rika|alt=Rika Hinagami}} | Szr = {{charbox|Shizuru|alt=Shizuru Hinagami}} | Say = {{charbox|Saya|alt=Saya Shigusa}} | Miy = {{charbox|Miya|alt=Miya Shigusa}} | Ken = {{charbox|Kensei|alt=Kensei Shigusa}} | Mho = Michio Shigusa }} {{Tree chart|boxstyle=min-width:98px;| | |,|-|-|-|.| | | | | |,|-|-|-|-|-|.| |S|P| Yuk | | | | | | | | | | | |!| | | | | | | | |!| | | |,|-|^|-|.| | | | |!| | | | |Y|P|P|P|b|P|P|P|P|P|P|T| | | | | | |!| | | | | | | | | | | |!| | | |Y|m|P| OrS | | | Ori | | | | | | | | | | Yuk = Yukihito Nakahara | OrS = Shizu Oribe | Ori = {{charbox|Oribe|alt=Tokihiro Oribe}} }} {{Tree chart|boxstyle=min-width:98px;| | Mar | | Cel |P|P|P| Rok |P|m|P| Mis |G| | | | | | | | | | | | |,|-|-|^|-|-|.| | | | | |!| | | Krn | | Mas |P|P|P|b|P|P|P|m|P|P|P| Fuy | | | | | |Q| | | | | | Yay | | | | | | | | | | Tko | | | |!| | | | | | | | | | | | | | | | | | | Mar = {{charbox|Stella|alt=Maris Stella}} | Cel = {{charbox|Celes|alt=Celestial Stella}} | Rok = {{charbox|Rokushiki|alt=Makoto Rokushiki}} | Mis = {{charbox|Misa|alt=Misa Rokushiki}} | Krn = {{charbox|Karen|alt=Karen Hinagami}} | Mas = {{charbox|Masaki|alt=Masaki Tomoyuki}} | Fuy = {{charbox|Fuyumi|alt=Fuyumi Kayahara}} | Yay = {{charbox|Yayoi|alt=Yayoi Shigusa}} | Tko = {{charbox|Tokiko|alt=Tokiko Shigusa}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | |Y|P| Shz |v|-|M| Mki | | Chi |P|P|P| Fum | | | | |!| | | | | | | | | | | | |!| | | |!| | | | |:| | | | | | |H|P|M|P|P|P|P|P|P|P|P|P|P|M|P|P|P|P|P|P|P|P|P|P|b|P|P|m|P|P|P|m|P|P|T| |,|-|-|-|-|.| | Shz = {{charbox|Shinzo|alt=Shinzo Mamiya}} | Mki = Miyuki Mamiya | Chi = {{charbox|Chizuru|alt=Chizuru Kuchiki}} | Fum = {{charbox|Fumiya|alt=Fumiya Kuchiki}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | |!| |Q| | | | | |:| | | | | | | | | | | |!| | | | | | | | | | | | Sat | | |!| | | | |:| | Mdr |P|m|Z| |Y|m|P| Tsb |-| Jir | |Y|m|P| Kan |-| Str | |!| | |!| | | |!| | |Y| Kei | | | Bun | Sat = {{charbox|Satsuki|alt=Satsuki}} | Mdr = Midori Yoshino | Tsb = Tsubaki Kamizono | Jir = Jiro Kamizono | Kan = Kanae Itose | Str = Satoru Itose | Kei = Keiko Zeizen | Bun = {{charbox|Bunji|alt=Bunji Inui}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | |!| | | | | | | | | Shj |Z| | | | | |:| | | |S| Gnj | | | | |!| | | | | | | | | | | | | | | | |!| | | | |:| | | | | |!| | | |!| | | | | | | | | | |!| | | | | | | | | |!| | |!| | | |!| | | | | | | | | | | | Kyo = {{charbox|Kyoko|alt=Kyoko Hazuki}} | Shj = {{charbox|Mamiya|alt=Shinji Mamiya}} | Gnj = Ginji Sawashiro }} {{Tree chart|boxstyle=min-width:98px;| |,|-|-|-|-|-|-|-|.| | | | | |!|F|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|J| | | |Q| |!| | | | | |!| | | | | | | | | | | | | | | | Mcr | | | |:| | | | | Khn | | May | | | | | | | | | Mzk | | | | | | | | |!| | Meg | | Yuu | | | | | | | | | | | Mcr = {{charbox|Michiru|alt=Michiru Shirosaki}} | Khn = {{charbox|Kohane|alt=Kohane Tori}} | May = {{charbox|Mayu|alt=Mayu Kamizono}} | Mzk = {{charbox|Mizuki|alt=Mizuki Itose}} | Meg = {{charbox|Meguri|alt=Meguri Takamiya}} | Yuu = {{charbox|Yu|alt=Yu Futami}} }} {{Tree chart|boxstyle=min-width:98px;| Ykr | | YkM |-| Rji |P|P|P| Tok | | | | | | | | | | | | | | | | | | | | |Y| Nnk |P|P|P| Nao | | | | | | | | | | | | | | | | | | | | |L|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|~|7|,|-|^|-|.| | | | | | | | | | | | | | | | | Ykr = {{charbox|Yukari|alt=Yukari Tokisaka}} | YkM = {{charbox|YukikoM|alt=Yukiko Miyama}} | Rji = {{charbox|Reiji|alt=Reiji Tokisaka}} | Tok = {{charbox|TokoK|alt=Toko Kuchiki}} | Nnk = {{charbox|Nanako|alt=Nanako Sawashiro}} | Nao = {{charbox|Naori|alt=Naori Kuroya}} }} {{Tree chart|boxstyle=min-width:98px;| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Ykk | | Yko | | | | | | | | | | | | | | | | Ykk = {{charbox|YukikoK|alt=Yukiko Kayahara}} | Yko = {{charbox|Yukio|alt=Yukio}} }} {{Tree chart/end}}</div> {{chart bottom}} cfc73d12f20bfca64ad818196fe29bac23ebfd7a Maris Stella 0 395 1194 2023-06-12T23:31:05Z Otonashi Ayana 2 Redirected page to [[Stella]] wikitext text/x-wiki #REDIRECT [[Stella]] 5e5e2f6ec41c11a0d3fa29bdd189774679eb5bb7 Stella 0 293 1195 950 2023-06-12T23:33:57Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:ssta0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led her to being bullied for much of her childhood and she subsequently became a selective mute for several years. She is the twin sister of {{n|Celestial|Stella}}; the two can only be differentiated by the moles near their left eye. == Relationships == {{kns characters}} c8146bec5fdb15ce46b1be152c4cbe179295558d Reiji Tokisaka 0 42 1196 984 2023-06-12T23:48:03Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = | given name = Reiji | family name = Tokisaka | jname = 時坂玲人 | image = [[File:srei0102a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = [[w:Ryōta Takeuchi|Ryōta Takeuchi]] }}{{nihongo|'''{{c}}'''|時坂玲人}} is a private detective and the protagonist of the {{kns}} trilogy. == Plot == Reiji is an extremely obsessive individual and these obsessions fuel much of the story of the {{kns|n}} trilogy. After the death of his fiancée, {{n|Yukiko|Miyama}}, at the hands of {{n|Makoto|Rokushiki}} in 1950, he quits the police force to begin a single-minded pursuit of Makoto, though his drive wanes as years pass with no breakthroughs in the search. His obsessions are reignited when he meets, and eventually falls in love with, {{n|Toko|Kuchiki}}.{{spoiler|kns| Following Toko's disappearance at the end of {{kns}}, Reiji devotes the rest of his life to finding her and is repeatedly haunted by visions of her.}} Fulfilling these obsessions never brings Reiji any joy.{{spoiler|kns| Arresting Makoto at the end of {{kns|n}} leaves him angered that he couldn't avenge his fiancée.}}{{spoiler|kns2| Finding Toko's corpse at the end of {{kns2}} breaks his spirit.}} == Trivia == * In the original release of {{kns|n}}, Reiji was unvoiced. [[w:Ryōta Takeuchi|Ryōta Takeuchi]] was brought on as Reiji's voice actor for the release of the Full HD Voice Edition, as well as for subsequent {{kns/nl}} titles. {{kns characters}} {{kns2 characters|state=collapsed}} adeefc80c1744d1baabab6f49b2b7ce240206498 File:Head Misa.png 6 396 1198 2023-06-13T00:15:17Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Celes.png 6 365 1199 1060 2023-06-13T00:15:20Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Head Celes.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 1206 1199 2023-06-13T01:32:49Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Head Celes.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Yukio.png 6 397 1200 2023-06-13T00:59:15Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Head Rika.png 6 398 1202 2023-06-13T01:11:13Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Karen Hinagami 0 322 1209 1127 2023-06-13T02:20:16Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders a series of women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 6755a4a2745795470161f5ed5551819c4891e345 1210 1209 2023-06-13T02:28:11Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|Like many from the incestuous Hitogata settlement, Karen is romantically attracted to her brother, {{n|Masaki|Tomoyuki}}, however her infertility makes her an unsuitable marriage candidate for him. In order to monopolize her brother's love, Karen clandestinely learns the names of Masaki's marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}}. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ(Yuka) due to Shizuru's sloppy handwriting. Her crime spree is ended when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently arrested and imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 315026bd0a2035f3a55cc8bc5337dd9d7c936565 1211 1210 2023-06-13T03:51:46Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == {{spoiler|kns2|While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko", that is trained by the Shigusa family to carry on the village traditions. After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family. In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting. Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 1e8dd9191434d5f9b84e33b9763ad87b2b8f2996 1212 1211 2023-06-13T03:52:03Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko", that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family. In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting. Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 8fc9fd39613c07c1180d69dba09f480cb0a6e632 1213 1212 2023-06-13T03:52:47Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = [[File:kar0701.png|x300px]] | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko" that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family. In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting. Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 2516435dd571e6d662d20db94c04278c2b92718e Ayato Hinagami 0 399 1214 2023-06-13T04:18:29Z Otonashi Ayana 2 Redirected page to [[Masaki Tomoyuki]] wikitext text/x-wiki #REDIRECT [[Masaki Tomoyuki]] 2854018b5ba5fb33168180543552ea20a9941276 Template:Charbox/styles.css 10 223 1216 1102 2023-06-13T04:25:58Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); height: 0; opacity: 0; transition: height 1s ease, opacity 1s ease; } .charbox:hover .name{ height: auto; opacity: 1; } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -23.8px; display: block; width: 100%; background-color:white; white-space: nowrap; } 6d4649a9876a387cbb0c1c3723ba9d497369ea03 Template:Charbox/styles.css 10 223 1217 1216 2023-06-13T04:27:22Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); height: 0; opacity: 0; transition: height 1s ease, opacity 1s ease; } .charbox:hover .name{ height: 22.4px; opacity: 1; } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -23.8px; display: block; width: 100%; background-color:white; white-space: nowrap; } 62cb935cda93b6d415ec0ab3a17aeaec4eeae844 1218 1217 2023-06-13T04:27:54Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); height: 0; opacity: 0; transition: height 0.5s ease, opacity 0.5s ease; } .charbox:hover .name{ height: 22.4px; opacity: 1; } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -23.8px; display: block; width: 100%; background-color:white; white-space: nowrap; } 17138c4a2910e8bbbec74c546eb16b4c667439d8 1219 1218 2023-06-13T04:28:17Z Otonashi Ayana 2 sanitized-css text/css .charbox{ position: relative; } .charbox > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox .name{ width: 100%; padding: 0.25em 0; position: absolute; bottom: 0; text-align: center; color: white; background-color: rgba(0,0,0,0.7); height: 0; opacity: 0; transition: height 0.25s ease, opacity 0.25s ease; } .charbox:hover .name{ height: 22.4px; opacity: 1; } .charbox .bg{ position: absolute; width: 100%; height: 100%; background-color:lightblue; } .charbox2 > p{ position: relative; display: flex; flex-direction: column; margin: 0; } .charbox2 .name{ position: absolute; bottom: -23.8px; display: block; width: 100%; background-color:white; white-space: nowrap; } 50530b79713f95cf7e9034ddac1f7cefa425b425 File:Bg yukiko.png 6 400 1220 2023-06-13T04:37:38Z Otonashi Ayana 2 wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 MediaWiki:Common.css 8 7 1221 1138 2023-06-13T04:51:21Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-page-container-inner::after{ content: ''; position: absolute; top: 0; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.5; z-index: -1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ effd0f10254f5f6a113a8be9ad1752eb34ce435a 1222 1221 2023-06-13T05:02:07Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-footer::before{ content: ''; position: absolute; top: 0; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.5; transform: scaleX(-100%); z-index: -1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 6371e058126be1abdff2321be9778ea4a90ae845 1223 1222 2023-06-13T05:07:01Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-footer::before{ content: ''; position: absolute; top: 0; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ dee0943cf644c5343ad06fa63abe58d16d8f3066 1224 1223 2023-06-13T05:17:44Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-table-of-contents-container::before{ content: ''; position: absolute; top: 0; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 6de5ceb8d868918baadf430a9296072d6fe1c46b 1225 1224 2023-06-13T05:27:08Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: 0; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 249a8286d7b583b7f3a6bbf1b970a0e111425f6d 1226 1225 2023-06-13T05:34:47Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -245px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 174e3f24f9b8750134dd63c976ef7bff0e41fc81 1227 1226 2023-06-13T05:41:12Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -245px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -21px 10px 10px white; background-color: white; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 1e4b719aa7c90b7fcd9d492da8dfbc786453cb25 1228 1227 2023-06-13T05:43:06Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -245px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-body{ box-shadow: -21px 10px 10px white; background-color: white; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 440a7774be1d037fa41e2bfbc29f791a53accb6d 1229 1228 2023-06-13T05:46:02Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-body{ box-shadow: -21px 10px 10px white; background-color: white; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ edff09d867a33761a28852f089aa1bc497206c49 1230 1229 2023-06-13T05:50:57Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -21px 21px 10px white; background-color: white; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 5fc89a5fc67bdc966c4abe10540e8781009cc3b2 1231 1230 2023-06-13T05:57:54Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-content-container::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-body{ box-shadow: -21px 21px 10px white; background-color: white; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ f01ec9bba40a8bfb1d3f5cc4d5189880c17aea29 1235 1231 2023-06-13T06:06:37Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-body{ box-shadow: -21px 21px 10px white; background-color: white; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 2b9fbb6e6aa9134532d23ca1b36d7831b90dd1f3 Kara no Shoujo - The Last Episode 0 387 1232 1172 2023-06-13T06:03:36Z Otonashi Ayana 2 Otonashi Ayana moved page [[Kara no Shoujo: The Last Episode]] to [[Kara no Shoujo - The Last Episode]] without leaving a redirect wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Last Episode''}}{{infobox game | title = Kara no Shōjo — The Last Episode | jtitle = | image = [[File:Cover kara no shoujo 3.png|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = December 25, 2020 | prev = {{kns2}} }} '''''Kara no Shōjo — The Last Episode''''', originally released as {{nihongo|'''''Ama no Shōjo'''''|天ノ少女}} and later released under the title '''''The Shell Part III: Paradiso''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the final entry into the ''Kara no Shōjo'' series. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns3/cat}} ccf2722bf6ef7178b4a652caeac97cf375ee3eff Template:Kns3 10 59 1233 663 2023-06-13T06:04:29Z Otonashi Ayana 2 wikitext text/x-wiki {{#if:{{{1|}}}|''Kara no Shōjo - The Last Episode''|''[[Kara no Shoujo - The Last Episode|Kara no Shōjo - The Last Episode]]''}} 0ef2d8b544aeffe610bdd8f336f17c668e6b4253 Category:Kara no Shōjo 3 14 401 1234 2023-06-13T06:05:00Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 Template:Pp-template 10 166 1277 384 2023-06-13T14:01:09Z mw>Johannnes89 0 Restored revision 5060924 by [[Special:Contributions/Clump|Clump]] ([[User talk:Clump|talk]]): -crosswiki nonsense ([[:metawiki:TwinkleGlobal|TwinkleGlobal]]) wikitext text/x-wiki <includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}} |*=[[Category:Pages with incorrect protection templates]] |autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]] |sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]] }}</includeonly><noinclude> {{Documentation}} </noinclude> 1046e139e5a0380698fd75d7207e9ef53a4ff91d 1278 1277 2023-06-13T18:05:19Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Pp-template]]: w wikitext text/x-wiki <includeonly>{{#switch:{{#invoke:Effective protection level|edit|{{FULLPAGENAME}}}} |*=[[Category:Pages with incorrect protection templates]] |autoconfirmed={{#tag:indicator|[[File:Semi-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently semi-protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Semi-protected templates}}|{{PAGENAME}}]] |sysop={{#tag:indicator|[[File:Full-protection-shackle-no-text.svg|20px|link=Project:Protected page|alt=Permanently protected {{module other|module|template}}|This high-risk {{module other|module|template}} is permanently protected to prevent vandalism]]|name="pp-default"}}[[Category:{{module other|Modules subject to page protection|Fully protected templates}}|{{PAGENAME}}]] }}</includeonly><noinclude> {{Documentation}} </noinclude> 1046e139e5a0380698fd75d7207e9ef53a4ff91d MediaWiki:Sitenotice 8 402 1236 2023-06-13T17:42:33Z Otonashi Ayana 2 Created page with "'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''" wikitext text/x-wiki '''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]''' 31c8618fa3125c4fdd1fbc2c10025f2cba4b83bf 1237 1236 2023-06-13T17:43:25Z Otonashi Ayana 2 wikitext text/x-wiki {{Notice|'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''}} fa4072a508c72dd5d16dce788b6783257add4eee 1238 1237 2023-06-13T17:45:19Z Otonashi Ayana 2 wikitext text/x-wiki <div style="text-align:center">{{Notice|'''If you wish to see spoilers on this wiki, click [[How to see spoilers|here]]'''}}</div> 311526f555fe62a31ad5d7f1760aa800da4dc371 Template:Translatable 10 403 1240 1239 2023-06-13T18:05:00Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Translatable]]: w wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}| |{{{1|{{FULLPAGENAME}}}}} |{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}} |1 |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}} }} }}<noinclude> {{Documentation|content= {{Lua|Module:String}} <translate> == Examples == <!--T:1--> </translate> * {{tlx|translatable}} {{translatable}} * {{tlx|translatable|2=<translate><!--T:2--> Page name</translate>}} {{translatable|1=<translate><!--T:3--> Page name</translate>}} * {{tlx|translatable|2=<translate><!--T:4--> Page name</translate>/{{PAGELANGUAGE}} }} {{translatable|1=<translate><!--T:5--> Page name</translate>/{{PAGELANGUAGE}} }} }} [[Category:Internationalization templates{{#translation:}}]] </noinclude> 76f8f4907f2c12144291f6adc98a40cc2cc4061f Template:Ll 10 404 1242 1241 2023-06-13T18:05:01Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Ll]]: w wikitext text/x-wiki #REDIRECT [[Template:Localized link]] e3f7e3e940787f3cd08503ff50bc563b52242bdd Template:Localized link 10 405 1244 1243 2023-06-13T18:05:02Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Localized_link]]: w wikitext text/x-wiki <noinclude> <languages/> </noinclude><!-- -->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |<b> }}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }} <!--if the translation page does not exist (or called from the source page), output as is--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{{1}}}}} |{{PAGENAME:{{{1}}}}} |{{{1}}} }} |{{{1}}} }} }}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |</b> }}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude> {{documentation|content= {{tsh|ll|LL}} {{High-use|35000}} <translate> == Purpose == <!--T:1--> </translate> <translate><!--T:8--> This helper template can be used to link to [[<tvar name=1>Special:LanguageStats</tvar>|translatable pages]] in the user's language.</translate> <translate><!--T:9--> It uses the special page prefix <tvar name=1><code>Special:MyLanguage/</code></tvar>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't.</translate> <translate> <!--T:10--> It should be used in translated pages, so that they link to the right page even if there is no translated page in that language. == Usage == <!--T:2--> </translate> {{Localized link/doc}} <translate> <!--T:11--> If "<tvar name=1><code>nsp</code></tvar>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<tvar name=1><code>nsp</code></tvar>" parameter is defined by any value — link text displays the short pagename, without namespace. === Examples of simple usage === <!--T:3--> </translate> {{(}}{{!}} class="wikitable" {{!}}- ! <translate><!--T:4--> Use</translate> ! <translate><!--T:5--> Becomes</translate> {{!}}- {{!}} {{Tlx|ll|Communication}} {{!}} {{ll|Communication}} {{!}}- {{!}} {{Tlx|ll|Communication|コミュニケーション}} {{!}} {{ll|Communication|コミュニケーション}} {{!}}- {{!}} {{Tlx|ll|Project:About}} {{!}} {{ll|Project:About}} {{!}}- {{!}} {{Tlx|ll|Project:About|nsp{{=}}0}} {{!}} {{ll|Project:About|nsp=0}} {{!}}{{)}} <translate> == Usage in translatable pages == <!--T:6--> <!--T:12--> On pages prepared for translation with the <tvar name=1>{{ll|Extension:Translate|nsp=0}}</tvar> extension, this template may be used in three ways. </translate> # <translate><!--T:13--> Should better be substitute this template, and then the wikilink target embedded in a <tvar name=1>{{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>, separately from the translatable displayed text of the link.</translate> #: <translate><!--T:22--> As example, instead <tvar name=1><code><nowiki>{{ll|Communication|About communication}}</nowiki></code></tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}</tvar>.</translate> # <translate><!--T:14--> Alternatively, may be exclude this code from translatable section.</translate> #: <translate><!--T:23--> As example, for <tvar name=1><code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code></tvar>, translation markup in translatable page will be:</translate> #: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}} #: <translate><!--T:15--> This is useful for bulleted lists of links, e.g. in the "See also:" sections.</translate> # <translate><!--T:16--> If link text does not have to be different from the name of landing page, will be better to embed all this code into <tvar name=1>{{tag|tvar|open}}</tvar>.</translate> #: <translate><!--T:24--> As example, instead <tvar name=1>{{Tlx|ll|Communication}}</tvar>, translation markup in translatable page will be <tvar name=2>{{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}</tvar>.</translate> <translate> == See also == <!--T:7--> </translate> * [[Template:Localized link/messagedoc]] — <translate><!--T:17--> should be used for message documentation in translatable pages that use this template.</translate> * {{tl|Translatable template}} - <translate><!--T:18--> alias <tvar name=1>{{tl|TNT}}</tvar> or <tvar name=2>{{tl|tnt}}</tvar></translate> * {{tl|Translatable template name}} - <translate><!--T:19--> alias <tvar name=1>{{tl|TNTN}}</tvar> or <tvar name=2>{{tl|tntn}}</tvar></translate> * {{tl|Page language link}} - <translate><!--T:20--> alias <tvar name=1>{{tl|pll}}</tvar></translate> - <translate><!--T:21--> add a link from a translatable page to another translatable page in the same language</translate> }} [[Category:Internationalization templates]] </noinclude> 26f0ea08ccb53748f8a9c69c65e96d99b1db2575 Template:Dir 10 406 1246 1245 2023-06-13T18:05:02Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Dir]]: w wikitext text/x-wiki {{#switch:{{lc:{{#if:{{{lang|}}}|{{{lang|}}}|{{#if:{{{1|}}}|{{{1|}}}|{{int:lang}}}}}}}} |aeb|aeb-arab|aic|ar|arc|arq|ary|arz|azb|bcc|bgn|bqi|bqp|ckb|ckb-arab|dv|en-rtl|fa|fa-af|glk|ha-arab|haz|he|khw|kk-arab|kk-cn|ks|ks-arab|ku-arab|lki|lrc|luz|mzn|nqo|ota|phn|pnb|prd|prs|ps|sd|sdh|skr|skr-arab|tg-arab|tly|ug|ug-arab|ur|uz-arab|xpu|ydd|yi ={{#ifeq:{{{rtl|}}}|{{{rtl|-}}}|{{{rtl|}}}|{{#ifeq:{{{2|}}}|{{{2|-}}}|{{{2|}}}|rtl}}}} |#default ={{#ifeq:{{{ltr|}}}|{{{ltr|-}}}|{{{ltr|}}}|{{#ifeq:{{{3|}}}|{{{3|-}}}|{{{3|}}}|ltr}}}} }}<noinclude>{{documentation}}</noinclude> 2ea56bd56901a92d8a5cb44b0835e8534d5e0807 Template:Int 10 407 1248 1247 2023-06-13T18:05:03Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Int]]: w wikitext text/x-wiki <onlyinclude>{{#invoke:Int|renderIntMessage|{{{1}}}|missing={{{missing|}}}|lang={{{lang|}}}}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 33458d205943740a9f820054cc2950d639a84aa6 Module:String 828 77 1250 163 2023-06-13T18:05:04Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:String]]: w Scribunto text/plain --[[ This module is intended to provide access to basic string functions. Most of the functions provided here can be invoked with named parameters, unnamed parameters, or a mixture. If named parameters are used, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. Depending on the intended use, it may be advantageous to either preserve or remove such whitespace. Global options ignore_errors: If set to 'true' or 1, any error condition will result in an empty string being returned rather than an error message. error_category: If an error occurs, specifies the name of a category to include with the error message. The default category is [Category:Errors reported by Module String]. no_category: If set to 'true' or 1, no category will be added if an error is generated. Unit tests for this module are available at Module:String/tests. ]] local str = {} --[[ len This function returns the length of the target string. Usage: {{#invoke:String|len|target_string|}} OR {{#invoke:String|len|s=target_string}} Parameters s: The string whose length to report If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. ]] function str.len( frame ) local new_args = str._getParameters( frame.args, {'s'} ) local s = new_args['s'] or '' return mw.ustring.len( s ) end --[[ sub This function returns a substring of the target string at specified indices. Usage: {{#invoke:String|sub|target_string|start_index|end_index}} OR {{#invoke:String|sub|s=target_string|i=start_index|j=end_index}} Parameters s: The string to return a subset of i: The fist index of the substring to return, defaults to 1. j: The last index of the string to return, defaults to the last character. The first character of the string is assigned an index of 1. If either i or j is a negative value, it is interpreted the same as selecting a character by counting from the end of the string. Hence, a value of -1 is the same as selecting the last character of the string. If the requested indices are out of range for the given string, an error is reported. ]] function str.sub( frame ) local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } ) local s = new_args['s'] or '' local i = tonumber( new_args['i'] ) or 1 local j = tonumber( new_args['j'] ) or -1 local len = mw.ustring.len( s ) -- Convert negatives for range checking if i < 0 then i = len + i + 1 end if j < 0 then j = len + j + 1 end if i > len or j > len or i < 1 or j < 1 then return str._error( 'String subset index out of range' ) end if j < i then return str._error( 'String subset indices out of order' ) end return mw.ustring.sub( s, i, j ) end --[[ This function implements that features of {{str sub old}} and is kept in order to maintain these older templates. ]] function str.sublength( frame ) local i = tonumber( frame.args.i ) or 0 local len = tonumber( frame.args.len ) return mw.ustring.sub( frame.args.s, i + 1, len and ( i + len ) ) end --[[ _match This function returns a substring from the source string that matches a specified pattern. It is exported for use in other modules Usage: strmatch = require("Module:String")._match sresult = strmatch( s, pattern, start, match, plain, nomatch ) Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This sub-routine is exported for use in other modules function str._match( s, pattern, start, match_index, plain_flag, nomatch ) if s == '' then return str._error( 'Target string is empty' ) end if pattern == '' then return str._error( 'Pattern string is empty' ) end start = tonumber(start) or 1 if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then return str._error( 'Requested start is out of range' ) end if match_index == 0 then return str._error( 'Match index is out of range' ) end if plain_flag then pattern = str._escapePattern( pattern ) end local result if match_index == 1 then -- Find first match is simple case result = mw.ustring.match( s, pattern, start ) else if start > 1 then s = mw.ustring.sub( s, start ) end local iterator = mw.ustring.gmatch(s, pattern) if match_index > 0 then -- Forward search for w in iterator do match_index = match_index - 1 if match_index == 0 then result = w break end end else -- Reverse search local result_table = {} local count = 1 for w in iterator do result_table[count] = w count = count + 1 end result = result_table[ count + match_index ] end end if result == nil then if nomatch == nil then return str._error( 'Match not found' ) else return nomatch end else return result end end --[[ match This function returns a substring from the source string that matches a specified pattern. Usage: {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}} OR {{#invoke:String|match|s=source_string|pattern=pattern_string|start=start_index |match=match_number|plain=plain_flag|nomatch=nomatch_output}} Parameters s: The string to search pattern: The pattern or string to find within the string start: The index within the source string to start the search. The first character of the string has index 1. Defaults to 1. match: In some cases it may be possible to make multiple matches on a single string. This specifies which match to return, where the first match is match= 1. If a negative number is specified then a match is returned counting from the last match. Hence match = -1 is the same as requesting the last match. Defaults to 1. plain: A flag indicating that the pattern should be understood as plain text. Defaults to false. nomatch: If no match is found, output the "nomatch" value rather than an error. If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from each string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. If the match_number or start_index are out of range for the string being queried, then this function generates an error. An error is also generated if no match is found. If one adds the parameter ignore_errors=true, then the error will be suppressed and an empty string will be returned on any failure. For information on constructing Lua patterns, a form of [regular expression], see: * http://www.lua.org/manual/5.1/manual.html#5.4.1 * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns * http://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Ustring_patterns ]] -- This is the entry point for #invoke:String|match function str.match( frame ) local new_args = str._getParameters( frame.args, {'s', 'pattern', 'start', 'match', 'plain', 'nomatch'} ) local s = new_args['s'] or '' local start = tonumber( new_args['start'] ) or 1 local plain_flag = str._getBoolean( new_args['plain'] or false ) local pattern = new_args['pattern'] or '' local match_index = math.floor( tonumber(new_args['match']) or 1 ) local nomatch = new_args['nomatch'] return str._match( s, pattern, start, match_index, plain_flag, nomatch ) end --[[ pos This function returns a single character from the target string at position pos. Usage: {{#invoke:String|pos|target_string|index_value}} OR {{#invoke:String|pos|target=target_string|pos=index_value}} Parameters target: The string to search pos: The index for the character to return If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the target string. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. The first character has an index value of 1. If one requests a negative value, this function will select a character by counting backwards from the end of the string. In other words pos = -1 is the same as asking for the last character. A requested value of zero, or a value greater than the length of the string returns an error. ]] function str.pos( frame ) local new_args = str._getParameters( frame.args, {'target', 'pos'} ) local target_str = new_args['target'] or '' local pos = tonumber( new_args['pos'] ) or 0 if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then return str._error( 'String index out of range' ) end return mw.ustring.sub( target_str, pos, pos ) end --[[ str_find This function duplicates the behavior of {{str_find}}, including all of its quirks. This is provided in order to support existing templates, but is NOT RECOMMENDED for new code and templates. New code is recommended to use the "find" function instead. Returns the first index in "source" that is a match to "target". Indexing is 1-based, and the function returns -1 if the "target" string is not present in "source". Important Note: If the "target" string is empty / missing, this function returns a value of "1", which is generally unexpected behavior, and must be accounted for separatetly. ]] function str.str_find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target'} ) local source_str = new_args['source'] or '' local target_str = new_args['target'] or '' if target_str == '' then return 1 end local start = mw.ustring.find( source_str, target_str, 1, true ) if start == nil then start = -1 end return start end --[[ find This function allows one to search for a target string or pattern within another string. Usage: {{#invoke:String|find|source_str|target_string|start_index|plain_flag}} OR {{#invoke:String|find|source=source_str|target=target_str|start=start_index|plain=plain_flag}} Parameters source: The string to search target: The string or pattern to find within source start: The index within the source string to start the search, defaults to 1 plain: Boolean flag indicating that target should be understood as plain text and not as a Lua style regular expression, defaults to true If invoked using named parameters, Mediawiki will automatically remove any leading or trailing whitespace from the parameter. In some circumstances this is desirable, in other cases one may want to preserve the whitespace. This function returns the first index >= "start" where "target" can be found within "source". Indices are 1-based. If "target" is not found, then this function returns 0. If either "source" or "target" are missing / empty, this function also returns 0. This function should be safe for UTF-8 strings. ]] function str.find( frame ) local new_args = str._getParameters( frame.args, {'source', 'target', 'start', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['target'] or '' local start_pos = tonumber(new_args['start']) or 1 local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return 0 end plain = str._getBoolean( plain ) local start = mw.ustring.find( source_str, pattern, start_pos, plain ) if start == nil then start = 0 end return start end --[[ replace This function allows one to replace a target string or pattern within another string. Usage: {{#invoke:String|replace|source_str|pattern_string|replace_string|replacement_count|plain_flag}} OR {{#invoke:String|replace|source=source_string|pattern=pattern_string|replace=replace_string| count=replacement_count|plain=plain_flag}} Parameters source: The string to search pattern: The string or pattern to find within source replace: The replacement text count: The number of occurences to replace, defaults to all. plain: Boolean flag indicating that pattern should be understood as plain text and not as a Lua style regular expression, defaults to true ]] function str.replace( frame ) local new_args = str._getParameters( frame.args, {'source', 'pattern', 'replace', 'count', 'plain' } ) local source_str = new_args['source'] or '' local pattern = new_args['pattern'] or '' local replace = new_args['replace'] or '' local count = tonumber( new_args['count'] ) local plain = new_args['plain'] or true if source_str == '' or pattern == '' then return source_str end plain = str._getBoolean( plain ) if plain then pattern = str._escapePattern( pattern ) replace = mw.ustring.gsub( replace, "%%", "%%%%" ) --Only need to escape replacement sequences. end local result if count ~= nil then result = mw.ustring.gsub( source_str, pattern, replace, count ) else result = mw.ustring.gsub( source_str, pattern, replace ) end return result end --[[ simple function to pipe string.rep to templates. ]] function str.rep( frame ) local repetitions = tonumber( frame.args[2] ) if not repetitions then return str._error( 'function rep expects a number as second parameter, received "' .. ( frame.args[2] or '' ) .. '"' ) end return string.rep( frame.args[1] or '', repetitions ) end --[[ escapePattern This function escapes special characters from a Lua string pattern. See [1] for details on how patterns work. [1] https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns Usage: {{#invoke:String|escapePattern|pattern_string}} Parameters pattern_string: The pattern string to escape. ]] function str.escapePattern( frame ) local pattern_str = frame.args[1] if not pattern_str then return str._error( 'No pattern string specified' ) end local result = str._escapePattern( pattern_str ) return result end --[[ count This function counts the number of occurrences of one string in another. ]] function str.count(frame) local args = str._getParameters(frame.args, {'source', 'pattern', 'plain'}) local source = args.source or '' local pattern = args.pattern or '' local plain = str._getBoolean(args.plain or true) if plain then pattern = str._escapePattern(pattern) end local _, count = mw.ustring.gsub(source, pattern, '') return count end --[[ endswith This function determines whether a string ends with another string. ]] function str.endswith(frame) local args = str._getParameters(frame.args, {'source', 'pattern'}) local source = args.source or '' local pattern = args.pattern or '' if pattern == '' then -- All strings end with the empty string. return "yes" end if mw.ustring.sub(source, -mw.ustring.len(pattern), -1) == pattern then return "yes" else return "" end end --[[ join Join all non empty arguments together; the first argument is the separator. Usage: {{#invoke:String|join|sep|one|two|three}} ]] function str.join(frame) local args = {} local sep for _, v in ipairs( frame.args ) do if sep then if v ~= '' then table.insert(args, v) end else sep = v end end return table.concat( args, sep or '' ) end --[[ Helper function that populates the argument list given that user may need to use a mix of named and unnamed parameters. This is relevant because named parameters are not identical to unnamed parameters due to string trimming, and when dealing with strings we sometimes want to either preserve or remove that whitespace depending on the application. ]] function str._getParameters( frame_args, arg_list ) local new_args = {} local index = 1 local value for _, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index] index = index + 1 end new_args[arg] = value end return new_args end --[[ Helper function to handle error messages. ]] function str._error( error_str ) local frame = mw.getCurrentFrame() local error_category = frame.args.error_category or 'Errors reported by Module String' local ignore_errors = frame.args.ignore_errors or false local no_category = frame.args.no_category or false if str._getBoolean(ignore_errors) then return '' end local error_str = '<strong class="error">String Module Error: ' .. error_str .. '</strong>' if error_category ~= '' and not str._getBoolean( no_category ) then error_str = '[[Category:' .. error_category .. ']]' .. error_str end return error_str end --[[ Helper Function to interpret boolean strings ]] function str._getBoolean( boolean_str ) local boolean_value if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower() if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0' or boolean_str == '' then boolean_value = false else boolean_value = true end elseif type( boolean_str ) == 'boolean' then boolean_value = boolean_str else error( 'No boolean value found' ) end return boolean_value end --[[ Helper function that escapes all pattern characters so that they will be treated as plain text. ]] function str._escapePattern( pattern_str ) return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ) end return str 6df794dd52434e0f6a372c9918f5a9dedd15f579 Module:Int 828 408 1252 1251 2023-06-13T18:05:04Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Int]]: w Scribunto text/plain -- This is a helper module for [[Template:int]] local templateTranslation = require('Module:Template translation') local this = {} function this.renderIntMessage(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local arguments = {} for k, v in pairs(pargs) do local n = tonumber(k) or 0 if (n >= 2) then arguments[n - 1] = mw.text.trim(v) end end local lang if args.lang and args.lang ~= '' and mw.language.isValidCode(args.lang) then lang = args.lang else lang = templateTranslation.getLanguage() end local msg = mw.message.new(mw.text.trim(args[1]), arguments):inLanguage(lang) if msg:exists() or lang == 'qqx' then if msg:isDisabled() then return args.missing or '' else local msgstr = msg:plain() return frame:preprocess(msgstr) end else return args.missing ~= '' and args.missing or '⧼' .. args[1] .. '⧽' end end return this 8bd789d31d4f269e575c5806864031420e6a5c86 Template:Localized link/en 10 409 1254 1253 2023-06-13T18:05:07Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Localized_link/en]]: w wikitext text/x-wiki <noinclude> <languages/> </noinclude><!-- -->{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |<b> }}[[Special:MyLanguage/{{{1}}}|{{#if:{{{2|}}}|{{{2}}}|{{{2|{{#ifexist:Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page display title/{{PAGELANGUAGE}}<!--if the source page, PAGELANGUAGE returns en--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{PAGENAME:{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} | nsp = 0 }} }} |{{ {{TNTN|Translations:{{#if:{{NAMESPACE:{{{1}}}}}|{{NAMESPACE:{{{1}}}}}:}}{{PAGENAME:{{{1}}}}}/Page_display_title}} }} }} <!--if the translation page does not exist (or called from the source page), output as is--> |{{#if:{{{nsp|}}} |{{#if:{{PAGENAME:{{{1}}}}} |{{PAGENAME:{{{1}}}}} |{{{1}}} }} |{{{1}}} }} }}}}}}}]]{{#ifeq:{{FULLPAGENAME:{{{1}}}}}|{{FULLPAGENAME:{{translatable}}}}<!--self link (including translation pages)--> |</b> }}<span style="display:none">[[:{{{1}}}| ]]</span><!-- T63547 --><noinclude> {{documentation|content= {{tsh|ll|LL}} {{High-use|35000}} == Purpose == This helper template can be used to link to [[Special:LanguageStats|translatable pages]] in the user's language. It uses the special page prefix <code>Special:MyLanguage/</code>, which checks if there is a translated version of a page in the user's language, and links to it if there is one, and links to a fallback language where available, or the default wiki language version (English in MediaWiki) if there isn't. It should be used in translated pages, so that they link to the right page even if there is no translated page in that language. == Usage == {{Localized link/doc}} If "<code>nsp</code>" parameter is not defined, as link text displays the full pagename (including namespace); otherwise — if "<code>nsp</code>" parameter is defined by any value — link text displays the short pagename, without namespace. === Examples of simple usage === {{(}}{{!}} class="wikitable" {{!}}- ! Use ! Becomes {{!}}- {{!}} {{Tlx|ll|Communication}} {{!}} {{ll|Communication}} {{!}}- {{!}} {{Tlx|ll|Communication|コミュニケーション}} {{!}} {{ll|Communication|コミュニケーション}} {{!}}- {{!}} {{Tlx|ll|Project:About}} {{!}} {{ll|Project:About}} {{!}}- {{!}} {{Tlx|ll|Project:About|nsp{{=}}0}} {{!}} {{ll|Project:About|nsp=0}} {{!}}{{)}} == Usage in translatable pages == On pages prepared for translation with the {{ll|Extension:Translate|nsp=0}} extension, this template may be used in three ways. # Should better be substitute this template, and then the wikilink target embedded in a {{#tag:syntaxhighlight|{{^(}}tvar name=id{{)^}}...{{^(}}/tvar{{)^}}|lang=html|inline=1}}, separately from the translatable displayed text of the link. #: As example, instead <code><nowiki>{{ll|Communication|About communication}}</nowiki></code>, translation markup in translatable page will be {{#tag:syntaxhighlight|[[{{^(}}tvar name=1{{)^}}Special:MyLanguage/Communication{{^(}}/tvar{{)^}}|About communication]]|lang=html|inline=1}}. # Alternatively, may be exclude this code from translatable section. #: As example, for <code>some text <nowiki>{{ll|Communication|About communication}}</nowiki> some text</code>, translation markup in translatable page will be: #: {{#tag:syntaxhighlight|{{^(}}translate{{)^}}some text{{^(}}/translate{{)^}} {{((}}ll{{!}}Communication{{!}}2={{^(}}translate{{)^}}About communication{{^(}}/translate{{)^}}{{))}} {{^(}}translate{{)^}}some text{{^(}}/translate{{)^}}|lang=html|inline=1}} #: This is useful for bulleted lists of links, e.g. in the "See also:" sections. # If link text does not have to be different from the name of landing page, will be better to embed all this code into {{tag|tvar|open}}. #: As example, instead {{Tlx|ll|Communication}}, translation markup in translatable page will be {{#tag:syntaxhighlight|{{^(}}tvar name=1{{)^}}{{((}}ll{{!}}Communication{{))}}{{^(}}/tvar{{)^}}|lang=html|inline=1}}. == See also == * [[Template:Localized link/messagedoc]] — should be used for message documentation in translatable pages that use this template. * {{tl|Translatable template}} - alias {{tl|TNT}} or {{tl|tnt}} * {{tl|Translatable template name}} - alias {{tl|TNTN}} or {{tl|tntn}} * {{tl|Page language link}} - alias {{tl|pll}} - add a link from a translatable page to another translatable page in the same language }} [[Category:Internationalization templates]] </noinclude> 9e7370c695bb1a61b15996006b40f9e437acbba4 Template:Translatable/en 10 410 1256 1255 2023-06-13T18:05:08Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Translatable/en]]: w wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#ifeq:{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}| |{{{1|{{FULLPAGENAME}}}}} |{{#invoke:String|sub|{{{1|{{FULLPAGENAME}}}}} |1 |{{#expr:{{#invoke:String|len|{{{1|{{FULLPAGENAME}}}}}}}-{{#invoke:String|len|{{pagelang|{{{1|{{FULLPAGENAME}}}}}}}}}-1}} }} }}<noinclude> {{Documentation|content= {{Lua|Module:String}} == Examples == * {{tlx|translatable}} {{translatable}} * {{tlx|translatable|2=Page name}} {{translatable|1=Page name}} * {{tlx|translatable|2=Page name/{{PAGELANGUAGE}} }} {{translatable|1=Page name/{{PAGELANGUAGE}} }} }} [[Category:Internationalization templates{{#translation:}}]] </noinclude> 7fee927d686a6bf590db77885cbef8376112670f Template:Nowrap/styles.css 10 411 1258 1257 2023-06-13T18:05:14Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Nowrap/styles.css]]: w sanitized-css text/css .nowrap, .nowrap a:before, .nowrap .selflink:before { white-space: nowrap; } becbf59e1bc0e28944a852c01b3f8473995d87b8 Template:Magic word 10 412 1260 1259 2023-06-13T18:05:15Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Magic_word]]: w wikitext text/x-wiki <onlyinclude><!-- -->{{#ifexpr:<!-- -->{{yesno|{{{code|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!-- -->|<!-- -->{{#if:{{yesno|{{{mono|}}}}}|<templatestyles src="Template:Mono/styles.css"/>}}<!-- -->{{#if:{{yesno|{{{nowrap|}}}}}|<templatestyles src="Template:Nowrap/styles.css"/>}}<!-- --><{{#if:{{yesno|{{{code|}}}}}|code|span}} {{#ifexpr:<!-- -->{{yesno|{{{mono|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!-- -->|<!-- -->class="{{yesno|{{{mono|}}}|yes=monospaced|no=}} {{yesno|{{{nowrap|}}}|yes=nowrap|no=}}"<!-- -->}}><!-- -->}}<!-- -->{{((}}<!-- -->[[mw:Special:MyLanguage/{{#switch:{{{ext|}}}<!-- Extensions with public domain help page documentation: -->|Translate=Help:Extension:Translate<!-- -->{{#switch:{{{1}}}<!-- -->|#translation=/Page translation administration<!-- -->}}<!-- -->|ParserFunctions=Help:Extension:ParserFunctions<!-- Extensions with documentation in subpages of the “Extension:” namespace: -->|Page Forms=Extension:Page Forms<!-- -->{{#switch:{{{1}}}<!-- -->|#arraymap<!-- -->|#arraymaptemplate<!-- -->|#template_display<!-- -->|#template_params<!-- -->=/Page Forms and templates<!-- -->|#autoedit<!-- -->|#forminput<!-- -->|#formlink<!-- -->|#formredlink<!-- -->=/Linking to forms<!-- -->|#queryformlink<!-- -->=/Creating query forms<!-- -->|#default_form<!-- -->=/The "edit with form" tab<!-- -->}}<!-- Default page when `ext` is specified: -->|#default=Extension:{{{ext}}}<!-- Default page when `ext` is not specified: -->|=Help:Magic words<!-- -->}}<includeonly>#{{#ifeq:{{Str left|{{{1}}}}}|#<!-- Workaround bug which causes the leading `#`s in the fragment of a “Special:MyLanguage/...” link to be discarded: -->|.23{{Str right|{{{1}}}|1}}<!-- -->|{{{1}}}<!-- -->}}|{{{1}}}</includeonly><noinclude>|magic word</noinclude>]]<!-- -->{{#ifexpr:<!-- -->{{#ifeq:{{{2|¬}}}|{{{2}}}|1|0}}or{{#ifeq:{{Str left|{{{1}}}}}|#|1|0}}<!-- -->|&#58;{{{2|}}}<!-- -->}}<!-- -->{{))}}<!-- -->{{#ifexpr:<!-- -->{{yesno|{{{code|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{mono|}}}|yes=1|no=0}}<!-- -->or{{yesno|{{{nowrap|}}}|yes=1|no=0}}<!-- -->|</{{#if:{{yesno|{{{code|}}}}}|code|span}}><!-- -->}}<!-- --></onlyinclude> {{Documentation}} aa8986c941a5e9ac9ff1dd2876f7455839290bd4 Template:Str left 10 413 1262 1261 2023-06-13T18:05:15Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Str_left]]: w wikitext text/x-wiki <includeonly>{{safesubst:padleft:|{{{2|1}}}|{{{1}}}}}</includeonly><noinclude> {{documentation}} </noinclude> b0625523728bd6c2c9e6c0a5722a80621103d361 Template:Str right 10 414 1264 1263 2023-06-13T18:05:16Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Str_right]]: w wikitext text/x-wiki <includeonly>{{{{{|safesubst:}}}#ifexpr: {{{2|0}}} < 0 |{{{1}}} |{{{{{|safesubst:}}}#ifexpr: {{{2|0}}}+1 > {{{{{|safesubst:}}}#invoke:String|len|s={{{1}}}}} | | {{{{{|safesubst:}}}#invoke:String|sub|s={{{1}}}|{{{{{|safesubst:}}}#expr:{{{2|0}}}+1}}|nocategory={{{nocategory|}}}}} }} }}</includeonly><noinclude> {{Documentation}} </noinclude> 1a455b5358c1f1bac690d40d8310e098b907075a Template:Tmpl 10 415 1266 1265 2023-06-13T18:05:16Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tmpl]]: w wikitext text/x-wiki <onlyinclude><includeonly>{{#invoke:Tmpl|renderTmpl}}</includeonly></onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> c29b0448e5b4220ef09fba833ddabdebb7b41ceb Module:Tmpl 828 416 1268 1267 2023-06-13T18:05:16Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Tmpl]]: w Scribunto text/plain -- This is a helper module for {{tmpl}} require('strict') -- The trailing `[^0-9]?` ensures that `$10` doesn't potentially change -- from being treated as `${1}0` to being treated as `${10}` -- if the number of supported parameters is ever expanded: local PATTERN = "%$([1-9])[^0-9]?" local this = {} function this.renderTmpl(frame) local args = frame.args local pargs = (frame:getParent() or {}).args local input = pargs[0] or '' local result = {} local prevPos = 1 do local startPos, _, k while true do startPos, _, k = string.find(input, PATTERN, prevPos) if (not startPos) then break end table.insert(result, string.sub(input, prevPos, startPos - 1)) local n = tonumber(k) local r = pargs[n] if (r) then table.insert(result, r) else table.insert(result, '$' .. n) end prevPos = startPos + #k + 1 end end table.insert(result, string.sub(input, prevPos)) return table.concat(result) end return this a44958c165a7b935145f1c840d1ec428886bf193 Template:Nmbox 10 417 1270 1269 2023-06-13T18:05:17Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Nmbox]]: w wikitext text/x-wiki <templatestyles src="Template:Nmbox/styles.css" /> <div class="nmbox noprint {{dir|{{PAGELANGUAGE}}|mw-content-rtl|mw-content-ltr}}">{{#if: {{{image|}}}{{{header|}}} |<div class="nmbox-header">{{#if: {{{image|}}}|<div class="nmbox-image mbox-image">{{{image|}}}</div>}}{{{header|}}} </div>}} {{#if:{{{text|}}}|<div class="nmbox-text mbox-text">{{{text|}}}</div>}} </div><noinclude> {{documentation}} </noinclude> 65d650d49fef1164b81d6520492d31f2e477c2bf Template:Nmbox/styles.css 10 418 1272 1271 2023-06-13T18:05:17Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Nmbox/styles.css]]: w sanitized-css text/css .nmbox { clear: both; background: #f8f9fa; border: 1px solid #AAA; box-sizing: border-box; margin: 2px 0; padding: 0; } .nmbox * { box-sizing: border-box; } .nmbox-header { background: #eaecf0; padding: 4px 0.5em; font-weight: bold; text-align: center; white-space: nowrap } .nmbox .mbox-image { display: inline-block; padding-right: 1em; } .nmbox-text { border-top: 1px solid #AAA; width: 100%; padding: 4px 0.5em; } @media screen and (min-width: 768px) { .nmbox-header { display: table-cell; border-right: 1px solid #AAA; width: 1%; } .nmbox-text { border-top: none; display: table-cell; } } 167c42527fe0b23e717da7cc834c96d0c4f9d1cc Template:Ombox 10 146 1274 340 2023-06-13T18:05:18Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Ombox]]: w wikitext text/x-wiki {{#invoke:Message box|ombox}}<noinclude> {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> </noinclude> 0e54065432d540737b9e56c4e3a8e7f74d4534ea Template:Tlc 10 419 1276 1275 2023-06-13T18:05:18Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tlc]]: w wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Nowrap/styles.css"/><!-- --><code class="nowrap"><!-- -->{{((}}<!-- --><includeonly>{{{1}}}</includeonly><!-- --><noinclude>tlc{{!}}...</noinclude><!-- -->{{#ifeq:{{{2|x}}}|{{{2|}}}| {{!}}{{{2}}} | }}<!-- -->{{#ifeq:{{{3|x}}}|{{{3|}}}| {{!}}{{{3}}} | }}<!-- -->{{#ifeq:{{{4|x}}}|{{{4|}}}| {{!}}{{{4}}} | }}<!-- -->{{#ifeq:{{{5|x}}}|{{{5|}}}| {{!}}{{{5}}} | }}<!-- -->{{#ifeq:{{{6|x}}}|{{{6|}}}| {{!}}{{{6}}} | }}<!-- -->{{#ifeq:{{{7|x}}}|{{{7|}}}| {{!}}{{{7}}} | }}<!-- -->{{#ifeq:{{{8|x}}}|{{{8|}}}| {{!}}{{{8}}} | }}<!-- -->{{#ifeq:{{{9|x}}}|{{{9|}}}| {{!}}{{{9}}} | }}<!-- -->{{))}}<!-- --></code><!-- --></onlyinclude> {{Documentation}} <!-- Add categories and interwikis to the /doc subpage, not here! --> 587b3ef23459fe76a16b04d3770178ad99c11882 Template:Languages 10 420 1280 1279 2023-06-13T18:05:22Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Languages]]: w wikitext text/x-wiki {{#ifeq:<languages exists/>|<languages/>|<languages/>| {{nmbox | header = {{ll|Project:Language policy|{{Languages/Title|{{SUBPAGENAME}}}}}} | text = '''[[{{{1|:{{translatable}}}}}|English]]''' {{Languages/Lang|af|{{{1|}}}| }}{{Languages/Lang|ar|{{{1|}}}| }}{{Languages/Lang|ast|{{{1|}}}| }}{{Languages/Lang|az|{{{1|}}}| }}{{Languages/Lang|bcc|{{{1|}}}| }}{{Languages/Lang|be|{{{1|}}}| }}{{Languages/Lang|be-tarask|{{{1|}}}| }}{{Languages/Lang|bg|{{{1|}}}| }}{{Languages/Lang|br|{{{1|}}}| }}{{Languages/Lang|bn|{{{1|}}}| }}{{Languages/Lang|bs|{{{1|}}}| }}{{Languages/Lang|ca|{{{1|}}}| }}{{Languages/Lang|ckb|{{{1|}}}| }}{{Languages/Lang|cs|{{{1|}}}| }}{{Languages/Lang|da|{{{1|}}}| }}{{Languages/Lang|de|{{{1|}}}| }}{{Languages/Lang|diq|{{{1|}}}| }}{{Languages/Lang|el|{{{1|}}}| }}{{Languages/Lang|eo|{{{1|}}}| }}{{Languages/Lang|es|{{{1|}}}| }}{{Languages/Lang|fa|{{{1|}}}| }}{{Languages/Lang|fi|{{{1|}}}| }}{{Languages/Lang|fr|{{{1|}}}| }}{{Languages/Lang|gl|{{{1|}}}| }}{{Languages/Lang|gu|{{{1|}}}| }}{{Languages/Lang|he|{{{1|}}}| }}{{Languages/Lang|hi|{{{1|}}}| }}{{Languages/Lang|hr|{{{1|}}}| }}{{Languages/Lang|hu|{{{1|}}}| }}{{Languages/Lang|hy|{{{1|}}}| }}{{Languages/Lang|id|{{{1|}}}| }}{{Languages/Lang|io|{{{1|}}}| }}{{Languages/Lang|it|{{{1|}}}| }}{{Languages/Lang|ja|{{{1|}}}| }}{{Languages/Lang|jv|{{{1|}}}| }}{{Languages/Lang|ka|{{{1|}}}| }}{{Languages/Lang|kk|{{{1|}}}| }}<span class="autonym">{{Languages/Lang|km|{{{1|}}}| }}</span>{{Languages/Lang|ko|{{{1|}}}| }}{{Languages/Lang|ko-kp|{{{1|}}}| }}{{Languages/Lang|ksh|{{{1|}}}| }}{{Languages/Lang|kw|{{{1|}}}| }}{{Languages/Lang|la|{{{1|}}}| }}{{Languages/Lang|map-bms|{{{1|}}}| }}{{Languages/Lang|min|{{{1|}}}| }}{{Languages/Lang|mk|{{{1|}}}| }}{{Languages/Lang|ml|{{{1|}}}| }}<span class="autonym">{{Languages/Lang|mr|{{{1|}}}| }}</span>{{Languages/Lang|ms|{{{1|}}}| }}{{Languages/Lang|mwl|{{{1|}}}| }}{{Languages/Lang|nl|{{{1|}}}| }}{{Languages/Lang|no|{{{1|}}}| }}{{Languages/Lang|oc|{{{1|}}}| }}{{Languages/Lang|or|{{{1|}}}| }}{{Languages/Lang|pl|{{{1|}}}| }}{{Languages/Lang|pt|{{{1|}}}| }}{{Languages/Lang|pt-br|{{{1|}}}| }}{{Languages/Lang|ro|{{{1|}}}| }}{{Languages/Lang|ru|{{{1|}}}| }}{{Languages/Lang|sc|{{{1|}}}| }}{{Languages/Lang|si|{{{1|}}}| }}{{Languages/Lang|sk|{{{1|}}}| }}{{Languages/Lang|sl|{{{1|}}}| }}{{Languages/Lang|so|{{{1|}}}| }}{{Languages/Lang|sq|{{{1|}}}| }}{{Languages/Lang|sr|{{{1|}}}| }}{{Languages/Lang|sv|{{{1|}}}| }}{{Languages/Lang|ta|{{{1|}}}| }}{{Languages/Lang|th|{{{1|}}}| }}{{Languages/Lang|tr|{{{1|}}}| }}{{Languages/Lang|uk|{{{1|}}}| }}{{Languages/Lang|vi|{{{1|}}}| }}{{Languages/Lang|yi|{{{1|}}}| }}{{Languages/Lang|yue|{{{1|}}}| }}{{Languages/Lang|zh|{{{1|}}}| }}{{Languages/Lang|zh-hans|{{{1|}}}| }}{{Languages/Lang|zh-hant|{{{1|}}}| }}{{Languages/Lang|zh-tw|{{{1|}}}}}| }}<!--/nmbox--><includeonly>{{#if:{{Languages/Lang|af|{{{1|}}}| }}{{Languages/Lang|ar|{{{1|}}}| }}{{Languages/Lang|ast|{{{1|}}}| }}{{Languages/Lang|az|{{{1|}}}| }}{{Languages/Lang|bcc|{{{1|}}}| }}{{Languages/Lang|be|{{{1|}}}| }}{{Languages/Lang|be-tarask|{{{1|}}}| }}{{Languages/Lang|bg|{{{1|}}}| }}{{Languages/Lang|br|{{{1|}}}| }}{{Languages/Lang|bn|{{{1|}}}| }}{{Languages/Lang|bs|{{{1|}}}| }}{{Languages/Lang|ca|{{{1|}}}| }}{{Languages/Lang|ckb|{{{1|}}}| }}{{Languages/Lang|cs|{{{1|}}}| }}{{Languages/Lang|da|{{{1|}}}| }}{{Languages/Lang|de|{{{1|}}}| }}{{Languages/Lang|diq|{{{1|}}}| }}{{Languages/Lang|el|{{{1|}}}| }}{{Languages/Lang|eo|{{{1|}}}| }}{{Languages/Lang|es|{{{1|}}}| }}{{Languages/Lang|fa|{{{1|}}}| }}{{Languages/Lang|fi|{{{1|}}}| }}{{Languages/Lang|fr|{{{1|}}}| }}{{Languages/Lang|gl|{{{1|}}}| }}{{Languages/Lang|gu|{{{1|}}}| }}{{Languages/Lang|he|{{{1|}}}| }}{{Languages/Lang|hi|{{{1|}}}| }}{{Languages/Lang|hr|{{{1|}}}| }}{{Languages/Lang|hu|{{{1|}}}| }}{{Languages/Lang|hy|{{{1|}}}| }}{{Languages/Lang|id|{{{1|}}}| }}{{Languages/Lang|io|{{{1|}}}| }}{{Languages/Lang|it|{{{1|}}}| }}{{Languages/Lang|ja|{{{1|}}}| }}{{Languages/Lang|jv|{{{1|}}}| }}{{Languages/Lang|ka|{{{1|}}}| }}{{Languages/Lang|kk|{{{1|}}}| }}{{Languages/Lang|km|{{{1|}}}| }}{{Languages/Lang|ko|{{{1|}}}| }}{{Languages/Lang|ko-kp|{{{1|}}}| }}{{Languages/Lang|ksh|{{{1|}}}| }}{{Languages/Lang|kw|{{{1|}}}| }}{{Languages/Lang|la|{{{1|}}}| }}{{Languages/Lang|map-bms|{{{1|}}}| }}{{Languages/Lang|min|{{{1|}}}| }}{{Languages/Lang|mk|{{{1|}}}| }}{{Languages/Lang|ml|{{{1|}}}| }}{{Languages/Lang|mr|{{{1|}}}| }}{{Languages/Lang|ms|{{{1|}}}| }}{{Languages/Lang|mwl|{{{1|}}}| }}{{Languages/Lang|nl|{{{1|}}}| }}{{Languages/Lang|no|{{{1|}}}| }}{{Languages/Lang|oc|{{{1|}}}| }}{{Languages/Lang|or|{{{1|}}}| }}{{Languages/Lang|pl|{{{1|}}}| }}{{Languages/Lang|pt|{{{1|}}}| }}{{Languages/Lang|pt-br|{{{1|}}}| }}{{Languages/Lang|ro|{{{1|}}}| }}{{Languages/Lang|ru|{{{1|}}}| }}{{Languages/Lang|si|{{{1|}}}| }}{{Languages/Lang|sk|{{{1|}}}| }}{{Languages/Lang|sl|{{{1|}}}| }}{{Languages/Lang|so|{{{1|}}}| }}{{Languages/Lang|sq|{{{1|}}}| }}{{Languages/Lang|sr|{{{1|}}}| }}{{Languages/Lang|sv|{{{1|}}}| }}{{Languages/Lang|ta|{{{1|}}}| }}{{Languages/Lang|th|{{{1|}}}| }}{{Languages/Lang|tr|{{{1|}}}| }}{{Languages/Lang|uk|{{{1|}}}| }}{{Languages/Lang|vi|{{{1|}}}| }}{{Languages/Lang|yi|{{{1|}}}| }}{{Languages/Lang|yue|{{{1|}}}| }}{{Languages/Lang|zh|{{{1|}}}| }}{{Languages/Lang|zh-hans|{{{1|}}}| }}{{Languages/Lang|zh-hant|{{{1|}}}| }}{{Languages/Lang|zh-tw|{{{1|}}}}} ||[[Category:Languages pages without translations]]}}<!--/#if--><!-- -->[[Category:Languages pages]]<!-- -->{{#switch:{{PAGELANGUAGE}} |en=<!--empty--> |ku-latn=[[Category:Languages pages/ku]] |zh-hans|zh-hant=[[Category:Languages pages/zh]] |#default=[[Category:Languages pages{{#translation:}}]] }}<!--/#switch--></includeonly>}}<!--/#ifeq--><noinclude> {{documentation}} </noinclude> 55bb0db791ef7b2ac02d610038d723c74f71cd00 Template:Languages/Title 10 421 1282 1281 2023-06-13T18:05:23Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Languages/Title]]: w wikitext text/x-wiki {{LangSwitch|lang={{{1|}}} |default={{int:tpt-languages-legend{{#if:{{{1|}}}|/{{{1}}} }} }} |aln=Gjuha: |am=ቋምቋ፦ |an=Idioma: |ang=Sprǣc: |ar=:اللغة |arc=ܠܫܢܐ: |arn=Dungun: |arz=:اللغة |avk=Ava: |ay=Aru: |az=Dil: |bat-smg=Kalba: |bcc=زبان: |bcl=Tataramon: |cdo=Ngṳ̄-ngiòng: |ceb=Pinulongan: |ch=Lengguahe: |ckb-arab=زمان: |co=Lingua : |crh-cyrl=Тиль: |crh-latn=Til: |cu=ѩꙁꙑ́къ : |cv=Чĕлхе: |ext=Palra: |fa=زبان: |fo=Mál: |frc=Langue : |fy=Taal: |ga=Teanga: |gag=Dil: |gan-hans=语言: |gan-hant=語言: |gn=Ñe'ẽ: |got=Razda: |grc=Γλῶσσα: |gu=ભાષા: |gv=Çhengey: |hak=Ngî-ngièn: |haw=Kou 'ōlelo: |he=שפה: |hi=भाषा: |hif-latn=Bhasa: |hy=Լեզու. |ie=Lingue: |ilo=Lengguahe: |ja=言語: |ka=ენა: |kaa=Til: |kg=Ndinga: |kiu=Zon: |kk-arab=:ٴتىل |kk-latn=Til: |km=ភាសា៖ |kn=ಭಾಷೆ: |kv=Кыв: |kw=Yeth: |la=Lingua: |li=Taol: |lij=Lengoa: |loz=Zwa Siselect: |lzh=語: |mdf=Кяль: |mg=fiteny: |mhr=Йылме: |ml=ഭാഷ: |mn=Хэл: |mwl=Lhéngua: |my=ဘာသာ: |nah=Tlahtōlli: |nap=Lengua: |nds=Spraak: |nds-nl=Taal: |ne=भाषा: |new=भाषा: |nso=Polelo: |os=Æвзаг: |pa=ਭਾਸ਼ਾ: |pam=Amanu: |pdt=Sproak: |pnb=بولی: |pnt=Γλώσσαν: |prg=Bilā: |ps=ژبه: |qu=Rimay: |sa=भाषा: |sah=Омугун тыла: |sc=Limba: |sdc=Linga: |se=Giella: |sei=Itom: |shi=tutlayt: |si=භාෂාව: |sli=Sproache: |so=Luqada: |sq=Gjuha: |srn=Tongo: |ss=Lúlwîmi: |stq=Sproake: |su=Basa: |szl=Godka: |ta=மொழி: |te=భాష: |tet=Lian: |tg-cyrl=Забон: |th=ภาษา: |ti=ቋንቋ: |tk=Dil: |to=Lea: |tyv=Дыл: |ug-latn=Til: |vec=Łéngua: |vro=Kiil: |wa=Lingaedje: |war=Yinaknan: |wo=Làkk: |wuu=语言: |xal=Келн: |xh=Ulwimi: |xmf=ნინა: |yo=Èdè: |yue=語言: |zea=Taele: |zu=Ulimi: }}<noinclude>{{Documentation}}</noinclude> 8bade1b59d3829a030e04f265e135347310a41c4 Template:LangSwitch 10 422 1284 1283 2023-06-13T18:05:24Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:LangSwitch]]: w wikitext text/x-wiki {{{ {{#switch: {{{ {{Uselang|lang={{{lang|}}}}} |}}} | ~ = empty | = {{#switch: {{{ {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}} | ~ = empty | = {{#switch: {{{ {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}} |}}} | ~ = empty | = {{#if: {{{default|}}} | default | en }} | #default = {{GetFallback2| {{Uselang|lang={{{lang|}}}}} |default=default}} }} | #default = {{GetFallback| {{Uselang|lang={{{lang|}}}}} |default=default}} }} | #default = {{Uselang|lang={{{lang|}}}}} }} |}}}<noinclude> {{Documentation}} </noinclude> 6276da6db4a231df3efb5b4f4a68cc35dc2b8211 Template:Uselang 10 423 1286 1285 2023-06-13T18:05:24Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Uselang]]: w wikitext text/x-wiki {{#if: {{{lang|}}} | {{{lang|}}} | {{int:Lang}} }}<noinclude>{{documentation}}</noinclude> 41c26d61caeb65fae8bd137d6b11adbfce457574 Template:GetFallback 10 424 1288 1287 2023-06-13T18:05:25Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:GetFallback]]: w wikitext text/x-wiki {{#switch: {{Uselang|lang={{{1|}}}}} | arz = ar | be-x-old = be-tarask <!-- same language; be-x-old is used on be-x-old.wikipedia but be-tarask is the preferred code --> | be-tarask = be-x-old | crh-cyrl | crh-latn = crh | als | bar | de-formal | de-at | de-ch | frr | ksh = de | en-gb = en | ckb | mzn | glk = fa | mg | br | co | frp | ht | ty | wa = fr | hif-deva | hif-latn = hif | ike-cans | ike-latn = ike | vec = it | kk-arab | kk-cyrl | kk-latn | kk-cn | kk-kz | kk-tr = kk | ku-latn | ku-arab = ku | nds-nl | pdt = nds | nds = nds-nl | af | fy | li | nl-informal | vls | zea = nl | szl | csb = pl | pt-br = pt | ruq-cyrl | ruq-grek | ruq-latn = ruq | sr-ec | sr-el = sr | tg-cyrl | tg-latn = tg | tt-cyrl | tt-latn = tt | gan | gan-hans | ii | wuu | za | zh | zh-cn | zh-my | zh-sg = zh-hans | ami | cdo | gan-hant | hak | lzh | nan | pwn | szy | tay | trv | zh-classical | zh-hk | zh-min-nan | zh-mo | zh-tw = zh-hant | #default = {{#if: {{{default|}}} | {{{default|}}} | en }} }}<noinclude> {{documentation}} </noinclude> 7deecc99a03a7fd2bab8ac12e18aa7a782979d2f Template:Languages/Lang 10 425 1290 1289 2023-06-13T18:05:25Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Languages/Lang]]: w wikitext text/x-wiki {{#ifexist: {{#if:{{{2|}}}|{{{2}}}|{{translatable}}}}/{{{1|}}} |&nbsp;• <bdi lang="{{{1|}}}">{{#if:{{{2|}}} |<span class="plainlinks">[{{fullurl:{{{2|}}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span> |<span class="plainlinks">[{{fullurl:{{translatable}}/{{{1|}}}}} {{#language:{{{1|}}}}}]</span> }}</bdi> }}<noinclude> {{Documentation}} </noinclude> 7aabf502401e5b3500551280a475fafa5adc42bc Template:(! 10 426 1292 1291 2023-06-13T18:05:26Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:(!]]: w wikitext text/x-wiki <onlyinclude><includeonly>{|</includeonly></onlyinclude><nowiki>{|</nowiki> {{Documentation}} 13b9672984a140a00c683872647b3b2f8f29c381 Template:!) 10 427 1294 1293 2023-06-13T18:05:26Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:!)]]: w wikitext text/x-wiki <onlyinclude>|}</onlyinclude> {{Documentation}} 469fe8c3efa0a39c92333858a80cd9d9b8b82968 Template:Unordered list 10 428 1296 1295 2023-06-13T18:05:27Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Unordered_list]]: w wikitext text/x-wiki <onlyinclude>{{<includeonly>safesubst:</includeonly>#invoke:List|bulleted}}</onlyinclude> {{Documentation}} <!-- Categories go on the /doc subpage, and interwikis go on Wikidata. --> bb14fb759a0fb4040a621405e0c2616019ac9a62 Template:Used in system 10 429 1298 1297 2023-06-13T18:05:27Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Used_in_system]]: w wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#switch:<translate></translate> | = {{ombox | type = content | text = '''<translate><!--T:1--> This <tvar|1>{{lcfirst:{{NAMESPACE}}}}</> is used {{<tvar|2>#if:{{{1|}}}|{{{1}}}</>|in system messages}}.</translate>'''<br/> <translate><!--T:2--> Changes to it can cause immediate changes to the MediaWiki user interface.</translate> <!-- -->{{tmpl|0=<translate><!--T:3--> To avoid large-scale disruption, any changes should first be tested in this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>'s [[<tvar|2>$1/sandbox</>|/sandbox]] or [[<tvar|3>$1/testcases</>|/testcases]] subpage, or in your own [[<tvar|4>Special:MyLanguage/Help:Subpages</>|user space]].</translate> |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}} | #default = {{SUBJECTPAGENAME}} }}<!--#switch--> }}<!--tmpl--><!-- --><translate><!--T:4--> The tested changes can then be added in one single edit to this <tvar|1>{{lcfirst:{{NAMESPACE}}}}</>.</translate> <!-- -->{{tmpl|0=<translate><!--T:5--> Please discuss any changes {{<tvar|1>#if:{{{2|}}}</>|at <tvar|2>[[{{{2}}}]]</>|on the [[<tvar|3>$1</>|talk page]]}} before implementing them.</translate> |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}} | #default = {{TALKPAGENAME}} }}<!--#switch--> }}<!--tmpl--> }} | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{documentation}} </noinclude> 9473a2f94595eec596f5d10d2e45e7711cff83cb Template:Used in system/en 10 430 1300 1299 2023-06-13T18:05:28Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Used_in_system/en]]: w wikitext text/x-wiki <noinclude> <languages /> </noinclude>{{#switch: | = {{ombox | type = content | text = '''This {{lcfirst:{{NAMESPACE}}}} is used {{#if:{{{1|}}}|{{{1}}}|in system messages}}.'''<br/> Changes to it can cause immediate changes to the MediaWiki user interface. <!-- -->{{tmpl|0=To avoid large-scale disruption, any changes should first be tested in this {{lcfirst:{{NAMESPACE}}}}'s [[$1/sandbox|/sandbox]] or [[$1/testcases|/testcases]] subpage, or in your own [[Special:MyLanguage/Help:Subpages|user space]]. |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{SUBJECTSPACE}}:{{BASEPAGENAME}} | #default = {{SUBJECTPAGENAME}} }}<!--#switch--> }}<!--tmpl--><!-- -->The tested changes can then be added in one single edit to this {{lcfirst:{{NAMESPACE}}}}. <!-- -->{{tmpl|0=Please discuss any changes {{#if:{{{2|}}}|at [[{{{2}}}]]|on the [[$1|talk page]]}} before implementing them. |1={{#switch: {{SUBPAGENAME}} | doc | sandbox = {{TALKSPACE}}:{{BASEPAGENAME}} | #default = {{TALKPAGENAME}} }}<!--#switch--> }}<!--tmpl--> }} | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Template:Used in system|noshift=1|uselang={{int:lang}}}} }}<noinclude> {{documentation}} </noinclude> 10ae6df0c95ce682437a36e6cb3c517e21d200d0 Template:Module rating 10 196 1302 555 2023-06-13T18:05:28Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Module_rating]]: w wikitext text/x-wiki <includeonly>{{#ifeq:{{SUBPAGENAME}}|doc|<!--do not show protection level of the module on the doc page, use the second and optionally third parameter if the doc page is also protected -->{{#if:{{{2|}}}|{{Pp|{{{2}}}|action={{{3|}}}}}}}|{{Module other|{{ombox | type = notice | image = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = [[File:Ambox warning blue construction.svg|40x40px|link=|alt=Pre-alpha]] | alpha | a = [[File:Alpha lowercase.svg|26x26px|link=|alt=Alpha]] | beta | b = [[File:Greek lc beta.svg|40x40px|link=|alt=Beta]] | release | r | general | g = [[File:Green check.svg|40x40px|link=|alt=Ready for use]] | protected | protect | p = [[File:{{#switch:{{#invoke:Effective protection level|edit|{{#switch:{{SUBPAGENAME}}|doc|sandbox={{FULLBASEPAGENAME}}|{{FULLPAGENAME}}}}}}|autoconfirmed=Semi|extendedconfirmed=Extended|accountcreator|templateeditor=Template|#default=Full}}-protection-shackle.svg|40x40px|link=|alt=Protected]] | semiprotected | semiprotect | semi =[[File:Semi-protection-shackle.svg|40x40px|link=|alt=Semi-protected]] }} | style = | textstyle = | text = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = This module is rated as [[:Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }} }} | alpha | a = This module is rated as [[:Category:Modules in alpha|alpha]]. It is ready for third-party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }} }} | beta | b = This module is rated as [[:Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }} }} | release | r | general | g = This module is rated as [[:Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[Wikipedia:Template sandbox and test cases|sandbox testing]] rather than repeated trial-and-error editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }} }} | protected | protect | p = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Wikipedia:Protection policy|protected]] from editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | semiprotected | semiprotect | semi = This module is [[:Category:Modules subject to page protection|subject to page protection]]. It is a [[Wikipedia:High-risk templates|highly visible module]] in use by a very large number of pages, or is [[Wikipedia:Substitution|substituted]] very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[WP:SEMI|semi-protected]] from editing.<!-- -->{{#switch: {{SUBPAGENAME}}|doc|sandbox=<!-- No category for /doc or /sandbox subpages --> | {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | #default = {{error|Module rating is invalid or not specified.}} }} }}|{{error|Error: {{tl|Module rating}} must be placed in the Module namespace.}} [[Category:Pages with templates in the wrong namespace]]|demospace={{{demospace|<noinclude>module</noinclude>}}}}}}}</includeonly><noinclude> {{module rating|release|nocat=true|demospace=module}} {{documentation}} <!-- Categories go on the /doc subpage, and interwikis go in Wikidata. --> </noinclude> bbd244b3ea2e13ec4c1c810ae44f2f3789a93efc Template:Module rating/en 10 431 1304 1303 2023-06-13T18:05:30Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Module_rating/en]]: w wikitext text/x-wiki <noinclude> <languages /> </noinclude><includeonly>{{Module other|{{ombox | type = notice | image = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = [[File:OOjs UI icon text-style.svg|40x40px|link=]] | alpha | a = [[File:OOjs UI icon bold-a.svg|40x40px|link=]] | beta | b = [[File:OOjs UI icon bold-b.svg|40x40px|link=]] | release | r | general | g = [[File:OOjs UI icon check-constructive.svg|40x40px|link=]] | protected | protect | p = [[File:{{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|Cascade-protection-shackle.svg|{{#ifeq:{{PROTECTIONLEVEL:edit}}|sysop|Full-protection-shackle-red.svg|Semi-protection-shackle-no-text.svg}}}}|40x40px|link=]] | semiprotected | semiprotect | semi = [[File:Semi-protection-shackle.svg|40x40px|link=]] | #default = [[File:OOjs UI icon alert-destructive.svg|40x40px|link=]] }} | style = | textstyle = | text = {{#switch: {{{1|}}} | pre-alpha | prealpha | pa = This module is rated as [[Special:MyLanguage/Category:Modules in pre-alpha development|pre-alpha]]. It is unfinished, and may or may not be in active development. It should not be used from article namespace pages. Modules remain pre-alpha until the original editor (or someone who takes one over if it is abandoned for some time) is satisfied with the basic structure.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in pre-alpha development|{{PAGENAME}}]] }} }} | alpha | a = This module is rated as [[Special:MyLanguage/Category:Modules in alpha|alpha]]. It is ready for third party input, and may be used on a few pages to see if problems arise, but should be watched. Suggestions for new features or changes in their input and output mechanisms are welcome.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in alpha|{{PAGENAME}}]] }} }} | beta | b = This module is rated as [[Special:MyLanguage/Category:Modules in beta|beta]], and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules in beta|{{PAGENAME}}]] }} }} | release | r | general | g = This module is rated as [[Special:MyLanguage/Category:Modules for general use|ready for general use]]. It has reached a mature form and is thought to be bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other resources as an option for new users to learn. To reduce server load and bad output, it should be improved by [[w:WP:TESTCASES|sandbox testing]] rather than repeated trial-and-error editing.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules for general use|{{PAGENAME}}]] }} }} | protected | protect | p = This module is [[Special:MyLanguage/Category:Modules subject to page protection|subject to {{#if:{{CASCADINGSOURCES:{{FULLPAGENAME}}}}|cascading|page}} protection]]. It is a highly visible module in use by a very large number of pages. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is [[Special:MyLanguage/Project:Protected page|protected]] from editing.<!-- -->{{#ifexpr: <!-- No category for /doc or /sandbox subpages --> {{IsDocSubpage|false=0}} or {{#ifeq:{{SUBPAGENAME}}|sandbox|1|0}} || {{#ifeq: {{{nocat|}}} | true | <!-- No category if user sets nocat=true --> | [[Category:Modules subject to page protection|{{PAGENAME}}]] }} }} | #default = {{error|1=Module rating is invalid or not specified.}} }} }}|{{error|1=Error: {{tl|Module rating}} must be placed in the Module namespace.}}|demospace={{{demospace|<noinclude>module</noinclude>}}}}}</includeonly><noinclude> {{documentation|content= This template is used to rate [[Lua/Overview|Lua modules]] by quality. It is placed at the top of the module's /doc subpage. It produces a message informing users about the rating system, and it also places the module into a tracking category. == Usage == Basic usage: {{pre|{{tlx|module rating|''rating''}}}} Without categories: {{pre|{{tlx|module rating|''rating''|3=nocat=true}}}} If {{tlx|Module rating}} is used outside the Module namespace, an error message is shown: {{module rating}} == Ratings == The rating should be placed in the first positional parameter. There are five different ratings: '''pre-alpha'''{{int|comma-separator}}'''alpha'''{{int|comma-separator}}'''beta'''{{int|comma-separator}}'''release'''{{int|and}}{{int|word-separator}}'''protected'''. There are also short alias codes for each of the ratings. {{(!}} class="wikitable" ! Rating ! Aliases ! Result {{!}}- {{!}} <code>pre-alpha</code> {{!}} <code>prealpha</code><br/><code>pa</code> {{!}} {{module rating|pre-alpha|nocat=true|demospace=Module}} {{!}}- {{!}} <code>alpha</code> {{!}} <code>a</code> {{!}} {{module rating|alpha|nocat=true|demospace=module}} {{!}}- {{!}} <code>beta</code> {{!}} <code>b</code> {{!}} {{module rating|beta|nocat=true|demospace=module}} {{!}}- {{!}} <code>release</code> {{!}} <code>r</code><br/><code>general</code><br/><code>g</code> {{!}} {{module rating|release|nocat=true|demospace=module}} {{!}}- {{!}} <code>protected</code> {{!}} <code>protect</code><br/><code>p</code> {{!}} {{module rating|protected|nocat=true|demospace=module}} {{!}}- {{!}} ''Anything else or if missing'' {{!}} {{!}} {{module rating|prdaskidkated|nocat=true|demospace=module}} {{!}}- {{!)}} == TemplateData == {{Module rating/doc}} == Categories == The template will put modules in one of the following categories, according to the rating specified: * {{ll|Category:Modules in pre-alpha development}} * {{ll|Category:Modules in alpha}} * {{ll|Category:Modules in beta}} * {{ll|Category:Modules for general use}} * {{ll|Category:Modules subject to page protection}} These categories are suppressed on pages ending with /doc. To suppress categories on all pages, you can use the code {{para|nocat|true}}. == See also == * {{tl|module-rating categories}} * [[Lua]] * {{tl|Lua}} }} </noinclude> be9721892adcac867736e318ab01f848049afb88 Module:Separated entries 828 432 1306 1305 2023-06-13T18:05:30Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Separated_entries]]: w Scribunto text/plain -- This module takes positional parameters as input and concatenates them with -- an optional separator. The final separator (the "conjunction") can be -- specified independently, enabling natural-language lists like -- "foo, bar, baz and qux". The starting parameter can also be specified. local compressSparseArray = require('Module:TableTools').compressSparseArray local p = {} function p._main(args) local separator = args.separator -- Decode (convert to Unicode) HTML escape sequences, such as "&#32;" for space. and mw.text.decode(args.separator) or '' local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator -- Discard values before the starting parameter. local start = tonumber(args.start) if start then for i = 1, start - 1 do args[i] = nil end end -- Discard named parameters. local values = compressSparseArray(args) return mw.text.listToText(values, separator, conjunction) end local function makeInvokeFunction(separator, conjunction, first) return function (frame) local args = require('Module:Arguments').getArgs(frame) args.separator = separator or args.separator args.conjunction = conjunction or args.conjunction args.first = first or args.first return p._main(args) end end p.main = makeInvokeFunction() p.br = makeInvokeFunction('<br />') p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain()) return p e80231ff3de01afd7f62a94e0a34dc1e67504085 Template:Separated entries 10 433 1308 1307 2023-06-13T18:05:31Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Separated_entries]]: w wikitext text/x-wiki <onlyinclude>{{{{{|safesubst:}}}#invoke:Separated entries|main}}</onlyinclude> {{Documentation}} f242d7f2dfe32f26a4a0618a9b30a22925a9f79a Module:Message box/doc 828 434 1310 1309 2023-06-13T18:05:31Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box/doc]]: w wikitext text/x-wiki <noinclude><!-- -->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!-- --><languages /><!-- --></noinclude>{{#switch:<translate></translate> | = <includeonly>{{Languages|Module:Message box/doc}}</includeonly> <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> <!-- {{Shared Template Warning|Module:Message box}} --> {{Used in system}} {{module rating|r}} {{module rating|p}} {{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}} {{Uses TemplateStyles | Module:Message box/ambox.css | Module:Message box/cmbox.css | Module:Message box/fmbox.css | Module:Message box/imbox.css | Module:Message box/ombox.css | Module:Message box/tmbox.css }} <translate><!--T:1--> This is a meta-module that implements the message box templates <tvar name=1>{{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang={{TRANSLATIONLANGUAGE}}|and}}{{int|lang={{TRANSLATIONLANGUAGE}}|word-separator}}<nowiki/>}}</tvar>.</translate> <translate><!--T:2--> It is intended to be used from Lua modules, and should not be used directly from wiki pages.</translate> <translate><!--T:3--> If you want to use this module's functionality from a wiki page, please use the individual message box templates instead.</translate> <translate> == Usage == <!--T:4--> <!--T:5--> To use this module from another Lua module, first you need to load it. </translate> <syntaxhighlight lang="lua"> local messageBox = require('Module:Message box') </syntaxhighlight> <translate><!--T:6--> To create a message box, use the <tvar name=1><code>main</code></tvar> function.</translate> <translate><!--T:7--> It takes two parameters:</translate> {{Unordered list |1= <translate><!--T:8--> the first is the box type (as a string).</translate> |2= <translate><!--T:9--> the second is a table containing the message box parameters.</translate> }} <syntaxhighlight lang="lua"> local box = messageBox.main( boxType, { param1 = param1, param2 = param2, -- <translate nowrap><!--T:10--> More parameters...</translate> }) </syntaxhighlight> <translate> <!--T:11--> There are seven available box types: </translate> {{(!}} class="wikitable" ! <translate><!--T:12--> Box type</translate> ! <translate><!--T:13--> Template</translate> ! <translate><!--T:14--> Purpose</translate> {{!}}- {{!}} <code>mbox</code> {{!}} {{tlx|mbox}} {{!}} <translate><!--T:15--> For message boxes to be used in multiple namespaces</translate> {{!}}- {{!}} <code>ambox</code> {{!}} {{tlx|ambox}} {{!}} <translate><!--T:16--> For article message boxes</translate> {{!}}- {{!}} <code>cmbox</code> {{!}} {{tlx|cmbox}} {{!}} <translate><!--T:17--> For category message boxes</translate> {{!}}- {{!}} <code>fmbox</code> {{!}} {{tlx|fmbox}} {{!}} <translate><!--T:18--> For interface message boxes</translate> {{!}}- {{!}} <code>imbox</code> {{!}} {{tlx|imbox}} {{!}} <translate><!--T:19--> For file namespace message boxes</translate> {{!}}- {{!}} <code>tmbox</code> {{!}} {{tlx|tmbox}} {{!}} <translate><!--T:20--> For talk page message boxes</translate> {{!}}- {{!}} <code>ombox</code> {{!}} {{tlx|ombox}} {{!}} <translate><!--T:21--> For message boxes in other namespaces</translate> {{!)}} <translate> <!--T:22--> See the template page of each box type for the available parameters. == Usage from <tvar name=1><code>#invoke</code></tvar> == <!--T:23--> </translate> <translate><!--T:24--> As well as the <tvar name=1><code>main</code></tvar> function, this module has separate functions for each box type.</translate> <translate><!--T:25--> They are accessed using the code <tvar name=1>{{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}</tvar>, <tvar name=2>{{tlc|#invoke:Message box|ambox|...}}</tvar>, etc.</translate> <translate><!--T:26--> These will work when called from other modules, but they access code used to process arguments passed from <tvar name=1>{{tlc|#invoke:...}}</tvar>, and so calling them will be less efficient than calling <tvar name=2><code>main</code></tvar></translate>. <translate> == Technical details == <!--T:27--> <!--T:28--> The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at <tvar name=1>[[Module:Message box/configuration]]</tvar>. </translate> <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Modules{{#translation:}}]] }}</includeonly><noinclude> [[Category:Module documentation pages{{#translation:}}]] </noinclude> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}} }} a3ce6d93b2de5e278623d054d7a82b6a21fb5b57 Module:Message box/doc/en 828 435 1312 1311 2023-06-13T18:05:33Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box/doc/en]]: w wikitext text/x-wiki <noinclude><!-- -->{{#ifeq:{{SUBPAGENAME}}|doc||{{Documentation subpage}}}}<!-- --><languages /><!-- --></noinclude>{{#switch: | = <includeonly>{{Languages|Module:Message box/doc}}</includeonly> <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> <!-- {{Shared Template Warning|Module:Message box}} --> {{Used in system}} {{module rating|r}} {{module rating|p}} {{Lua|Module:Message box/configuration|Module:Arguments|Module:Yesno}} {{Uses TemplateStyles | Module:Message box/ambox.css | Module:Message box/cmbox.css | Module:Message box/fmbox.css | Module:Message box/imbox.css | Module:Message box/ombox.css | Module:Message box/tmbox.css }} This is a meta-module that implements the message box templates {{separated entries|{{tlx|mbox}}|{{tlx|ambox}}|{{tlx|cmbox}}|{{tlx|fmbox}}|{{tlx|imbox}}|{{tlx|ombox}}|{{tlx|tmbox}}|separator=<nowiki/>{{int|lang=en|comma-separator}}<nowiki/>|conjunction=<nowiki/>{{int|lang=en|and}}{{int|lang=en|word-separator}}<nowiki/>}}. It is intended to be used from Lua modules, and should not be used directly from wiki pages. If you want to use this module's functionality from a wiki page, please use the individual message box templates instead. == Usage == To use this module from another Lua module, first you need to load it. <syntaxhighlight lang="lua"> local messageBox = require('Module:Message box') </syntaxhighlight> To create a message box, use the <code>main</code> function. It takes two parameters: {{Unordered list |1= the first is the box type (as a string). |2= the second is a table containing the message box parameters. }} <syntaxhighlight lang="lua"> local box = messageBox.main( boxType, { param1 = param1, param2 = param2, -- More parameters... }) </syntaxhighlight> There are seven available box types: {{(!}} class="wikitable" ! Box type ! Template ! Purpose {{!}}- {{!}} <code>mbox</code> {{!}} {{tlx|mbox}} {{!}} For message boxes to be used in multiple namespaces {{!}}- {{!}} <code>ambox</code> {{!}} {{tlx|ambox}} {{!}} For article message boxes {{!}}- {{!}} <code>cmbox</code> {{!}} {{tlx|cmbox}} {{!}} For category message boxes {{!}}- {{!}} <code>fmbox</code> {{!}} {{tlx|fmbox}} {{!}} For interface message boxes {{!}}- {{!}} <code>imbox</code> {{!}} {{tlx|imbox}} {{!}} For file namespace message boxes {{!}}- {{!}} <code>tmbox</code> {{!}} {{tlx|tmbox}} {{!}} For talk page message boxes {{!}}- {{!}} <code>ombox</code> {{!}} {{tlx|ombox}} {{!}} For message boxes in other namespaces {{!)}} See the template page of each box type for the available parameters. == Usage from <code>#invoke</code> == As well as the <code>main</code> function, this module has separate functions for each box type. They are accessed using the code {{magic word|ext=Scribunto|nowrap=1|code=1|#invoke|[[Module:Message box|Message box]]<nowiki>|mbox|...</nowiki>}}, {{tlc|#invoke:Message box|ambox|...}}, etc. These will work when called from other modules, but they access code used to process arguments passed from {{tlc|#invoke:...}}, and so calling them will be less efficient than calling <code>main</code>. == Technical details == The module uses the same basic code for each of the templates listed above; the differences between each of them are configured using the data at [[Module:Message box/configuration]]. <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Modules{{#translation:}}]] }}</includeonly><noinclude> [[Category:Module documentation pages{{#translation:}}]] </noinclude> | #default= {{#invoke:Template translation|renderTranslatedTemplate|template=Module:Message box/doc|noshift=1|uselang={{int:lang}}}} }} eb0368b68b66e7bfdf66f0fbded73f3e1a15bad8 Module:Message box/ambox.css 828 436 1314 1313 2023-06-13T18:06:52Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box/ambox.css]]: w sanitized-css text/css /** * {{ambox}} (article message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.ambox { /* 10% = Will not overlap with other elements */ margin: 0 10%; /* Prevent overflow in narrow screens (<=850px) in the Timeless skin. See [[Skin:Timeless#Less than 851 pixels]] and https://phabricator.wikimedia.org/source/Timeless/browse/REL1_39/resources/screen-mobile.less$268 */ width: unset; border: 1px solid #a2a9b1; /* Default "notice" blue */ border-left: 10px solid #36c; background-color: #fbfbfb; box-sizing: border-box; } /* Single border between stacked boxes. */ table.ambox + table.ambox, table.ambox + link + table.ambox, table.ambox + style + table.ambox { margin-top: -1px; } /* An empty narrow cell */ .ambox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .ambox th.mbox-text, .ambox td.mbox-text { border: none; /* 0.5em left/right */ padding: 0.25em 0.5em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .ambox td.mbox-image { /* 0.5em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.5em; } /* The right image cell */ .ambox td.mbox-imageright { /* 0px left, 0.5em right */ /* @noflip */ padding: 2px 0.5em 2px 0; } table.ambox-notice { /* Blue */ border-left-color: #36c; } table.ambox-speedy { /* Pink */ background-color: #fee7e6; } table.ambox-delete, table.ambox-speedy { /* Red */ border-left-color: #b32424; } table.ambox-content { /* Orange */ border-left-color: #f28500; } table.ambox-style { /* Yellow */ border-left-color: #fc3; } table.ambox-move { /* Purple */ border-left-color: #9932cc; } table.ambox-protection { /* Gray-gold */ border-left-color: #a2a9b1; } /** * {{ambox|small=1}} styles * * These ".mbox-small" classes must be placed after all other * ".ambox" classes. "html body.mediawiki .ambox" * is so they override both "table.ambox + table.ambox" * and "table.ambox + link + table.ambox" above. * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ /* For the "small=yes" option. */ html body.mediawiki .ambox.mbox-small { clear: right; float: right; margin: 4px 0 4px 1em; box-sizing: border-box; width: 238px; font-size: 88%; line-height: 1.25em; } /* For the "small=left" option. */ html body.mediawiki .ambox.mbox-small-left { margin: 4px 1em 4px 0; box-sizing: border-box; overflow: hidden; width: 238px; border-collapse: collapse; font-size: 88%; line-height: 1.25em; } 095fcb9be9e02488b74d8093dc30d52fabe48ddd Template:Ambox 10 437 1316 1315 2023-06-13T18:06:53Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Ambox]]: w wikitext text/x-wiki <onlyinclude>{{#invoke:Message box|ambox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> c1c08bfba73362a15b45ed57cd7458ff9fbc5413 Template:Cmbox 10 438 1318 1317 2023-06-13T18:15:32Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Cmbox]]: w wikitext text/x-wiki <onlyinclude>{{#invoke:Message box|cmbox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> 04e229bdcc4ed5f8322f6a29df0d25d01316f5bf Template:Transclude 10 439 1320 1319 2023-06-13T18:15:39Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Transclude]]: w wikitext text/x-wiki <onlyinclude>{{#switch: {{NAMESPACE: {{{1}}} }} |#default = {{FULLPAGENAME: {{{1}}} }} <!-- leading namespace prefix, eg "Template:Foo" --> |{{ns:0}} = {{#ifeq: {{NAMESPACE: {{{1}}} }} | {{NAMESPACE: Template{{{1}}} }} | Template:{{{1}}} <!-- no leading colon, eg "Foo" --> | {{PAGENAME: {{{1}}} }} <!-- leading colon, eg ":Foo", so we want the article --> }} }}</onlyinclude> {{Documentation}} 4865c652e363aa2057dba3e36aaffcdd76885a4e Template:Navbar 10 109 1322 235 2023-06-13T18:15:39Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Navbar]]: w wikitext text/x-wiki <includeonly>{{#invoke:Navbar|navbar}}</includeonly><noinclude> {{documentation}} </noinclude> 868e3566b7e8a9a5a7f3dac75cac429c47de10d3 Template:Navbar/en 10 440 1324 1323 2023-06-13T18:15:40Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Navbar/en]]: w wikitext text/x-wiki <noinclude> <languages/> </noinclude><templatestyles src="Module:Navbar/styles.css"/><span class="noprint plainlinks navbar" style="{{{style|}}}"><small><!-- -->{{#if:{{{mini|}}}{{{plain|}}}|<!--nothing-->|<!--else: --><span style="{{{fontstyle|}}}">{{#if:{{{text|}}}|{{{text}}}|This box:}} </span>}}<!-- -->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">&#91;</span>}}<!-- --><span style="white-space:nowrap;word-spacing:-.12em;"><!-- -->[[{{transclude|{{{1}}}}}|<span style="{{{fontstyle|}}}" title="View this template"><!-- -->{{#if:{{{mini|}}}|v|view}}</span>]]<!-- --><span style="{{{fontstyle|}}}">&#32;<b>&middot;</b>&#32;</span><!-- -->[{{fullurl:{{<noinclude><nowiki/></noinclude>TALKPAGENAME:{{transclude|{{{1}}}}}}}}} <span style="{{{fontstyle|}}}" title="Discuss this template"><!-- -->{{#if:{{{mini|}}}|d|talk}}</span>]<!-- -->{{#if:{{{noedit|}}}|<!--nothing-->|<!--else: --><span style="{{{fontstyle|}}}">&#32;<b>&middot;</b>&#32;</span><!-- -->[{{fullurl:{{transclude|{{{1}}}}}|action=edit}} <span style="{{{fontstyle|}}}" title="Edit this template"><!-- -->{{#if:{{{mini|}}}|e|edit}}</span>]}}<!-- --></span><!-- -->{{#if:{{{brackets|}}}|<span style="{{{fontstyle|}}}">&#93;</span>}}<!-- --></small></span><noinclude> {{Documentation|content= {{Uses TemplateStyles|Module:Navbar/styles.css}} == Usage == === General === When one of the following examples is placed inside a given [[Special:MyLanguage/Help:Templates|template]], it adds navbar navigational functionality: : {{tlx|Navbar|Navbar|mini{{=}}1}} : {{tlx|Navbar|Navbar|plain{{=}}1}} : {{tlx|Navbar|Navbar|fontstyle{{=}}color:green}} The <code><nowiki>{{subst:PAGENAME}}</nowiki></code> will be substituted with the template's name when parsed by the servers. For example, {{tlx|Navbar|navbar/doc}} gives: {{Navbar|navbar/doc}} === Font-size === Font-size is <code>88%</code> when used in a navbar, and <code>100%</code> when nested in a navbox. In the navbar, the weight is "<code>normal</code>"; when nested in navbox, it takes on the outer setting. The middot is bold. == Examples == === Required parameters === * {{tlx|Navbar|''template name''}} — the template name is required. === Optional parameters === {{(}}{{!}} class="wikitable" ! Options ! Parameters ! Produces... {{!}}- {{!}} Basic {{!}} {{tlx|Navbar|2=''template name''}} {{!}} {{navbar|navbar/doc}} {{!}}- {{!}} Different text {{!}} {{tlx|Navbar|2=''template name''|3=text{{=}}This template:}} {{!}} {{navbar|navbar/doc|text=This template:}} {{!}}- {{!}} Without "This box:" text {{!}} {{tlx|Navbar|2=''template name''|3=plain{{=}}1}} {{!}} {{navbar|navbar/doc|plain=1}} {{!}}- {{!}} Short version {{!}} {{tlx|Navbar|2=''template name''|3=mini{{=}}1}} {{!}} {{navbar|navbar/doc|mini=1}} {{!}}- {{!}} With a color option {{!}} {{tlx|Navbar|2=''template name''|3=fontstyle{{=}}color:green}} {{!}} {{navbar|navbar/doc|fontstyle=color:green}} {{!}}- {{!}} With brackets {{!}} {{tlx|Navbar|2=''template name''|3=brackets{{=}}1}} {{!}} {{navbar|navbar/doc|brackets=1}} {{!}}- {{!}} Custom namespace {{!}} {{tlx|Navbar|2=''namespaced template name''|3=plain{{=}}1|4=brackets{{=}}1}} {{!}} {{navbar|User:Example|plain=1|brackets=1}} {{!}}{{)}} == TemplateData == {{Navbar/doc}} == Notes == Navbar is contained within a {{tag|div}} in order to accommodate a horizontal unnumbered list. This means it cannot be placed inside a {{tag|span}} or other inline element, because Tidy will 'fix' situations where it finds block elements inside inline elements. <!--- PLEASE ADD METADATA TO THE <includeonly> SECTION HERE ---> <includeonly> [[Category:Formatting templates{{#translation:}}]] </includeonly> }} </noinclude> 3f53ea49b7933ec59655f626eef09d907f4d3f53 Module:Navbar/styles.css 828 93 1326 203 2023-06-13T18:15:43Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Navbar/styles.css]]: w sanitized-css text/css /* {{pp|small=yes}} */ .navbar { display: inline; font-size: 88%; font-weight: normal; } .navbar-collapse { float: left; text-align: left; } .navbar-boxtext { word-spacing: 0; } .navbar ul { display: inline-block; white-space: nowrap; line-height: inherit; } .navbar-brackets::before { margin-right: -0.125em; content: '[ '; } .navbar-brackets::after { margin-left: -0.125em; content: ' ]'; } .navbar li { word-spacing: -0.125em; } .navbar a > span, .navbar a > abbr { text-decoration: inherit; } .navbar-mini abbr { font-variant: small-caps; border-bottom: none; text-decoration: none; cursor: inherit; } .navbar-ct-full { font-size: 114%; margin: 0 7em; } .navbar-ct-mini { font-size: 114%; margin: 0 4em; } 9d4056f949b4f0b159e3d40dfb1a5f01e72f9571 Template:Para 10 108 1328 233 2023-06-13T18:15:45Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Para]]: w wikitext text/x-wiki <code class="tpl-para" style="word-break:break-word;{{SAFESUBST:<noinclude />#if:{{{plain|}}}|border: none; background-color: inherit;}} {{SAFESUBST:<noinclude />#if:{{{plain|}}}{{{mxt|}}}{{{green|}}}{{{!mxt|}}}{{{red|}}}|color: {{SAFESUBST:<noinclude />#if:{{{mxt|}}}{{{green|}}}|#006400|{{SAFESUBST:<noinclude />#if:{{{!mxt|}}}{{{red|}}}|#8B0000|inherit}}}};}} {{SAFESUBST:<noinclude />#if:{{{style|}}}|{{{style}}}}}">&#124;{{SAFESUBST:<noinclude />#if:{{{1|}}}|{{{1}}}&#61;}}{{{2|}}}</code><noinclude> {{Documentation}} <!--Categories and interwikis go near the bottom of the /doc subpage.--> </noinclude> 06006deea2ed5d552aab61b4332321ab749ae7e8 Template:Tl 10 67 1330 137 2023-06-13T18:15:45Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tl]]: w wikitext text/x-wiki #REDIRECT [[Template:Template link]] {{Redirect category shell| {{R from move}} }} d6593bb3b4a866249f55d0f34b047a71fe1f1529 Template:Blue 10 441 1332 1331 2023-06-13T18:15:46Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Blue]]: w wikitext text/x-wiki <span style="color:#0645AD;">{{{1}}}</span><noinclude>{{documentation}} [[Category:Formatting templates{{#translation:}}|{{PAGENAME}}]] </noinclude> 636ccfaac2c8947c9d036c2a6ac80aeb94f89713 Template:Flatlist 10 442 1334 1333 2023-06-13T18:15:47Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Flatlist]]: w wikitext text/x-wiki <onlyinclude><templatestyles src="Template:Flatlist/styles.css"/><div class="hlist {{{class|}}}" {{#if:{{{style|}}}{{{indent|}}}|style="{{#if:{{{indent|}}}|margin-left: {{#expr:{{{indent}}}*1.6}}em;}} {{{style|}}}"}}>{{#if:{{{1|}}}| {{{1}}} </div>}}</onlyinclude></div> {{Documentation}} 457fae85129828fe5719eedf96107aac37dc02f4 Template:Flatlist/styles.css 10 443 1336 1335 2023-06-13T18:15:47Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Flatlist/styles.css]]: w sanitized-css text/css /** * Style for horizontal lists (separator following item). * @source https://www.mediawiki.org/wiki/Snippets/Horizontal_lists * @revision 9 (2016-08-10) * @author [[User:Edokter]] */ .hlist dl, .hlist ol, .hlist ul { margin: 0; padding: 0; } /* Display list items inline */ .hlist dd, .hlist dt, .hlist li { /* don't trust the note that says margin doesn't work with inline * removing margin: 0 makes dds have margins again */ margin: 0; display: inline; } /* Display nested lists inline */ /* We remove .inline since it's not used here. .hlist.inline, .hlist.inline dl, .hlist.inline ol, .hlist.inline ul, */ .hlist dl dl, .hlist dl ol, .hlist dl ul, .hlist ol dl, .hlist ol ol, .hlist ol ul, .hlist ul dl, .hlist ul ol, .hlist ul ul { display: inline; } /* Hide empty list items */ .hlist .mw-empty-li, .hlist .mw-empty-elt { display: none; } /* Generate interpuncts */ .hlist dt:after { content: ": "; } .hlist dd:after, .hlist li:after { content: " · "; font-weight: bold; } .hlist dd:last-child:after, .hlist dt:last-child:after, .hlist li:last-child:after { content: none; } /* Add parentheses around nested lists */ .hlist dd dd:first-child:before, .hlist dd dt:first-child:before, .hlist dd li:first-child:before, .hlist dt dd:first-child:before, .hlist dt dt:first-child:before, .hlist dt li:first-child:before, .hlist li dd:first-child:before, .hlist li dt:first-child:before, .hlist li li:first-child:before { content: " ("; font-weight: normal; } .hlist dd dd:last-child:after, .hlist dd dt:last-child:after, .hlist dd li:last-child:after, .hlist dt dd:last-child:after, .hlist dt dt:last-child:after, .hlist dt li:last-child:after, .hlist li dd:last-child:after, .hlist li dt:last-child:after, .hlist li li:last-child:after { content: ")"; font-weight: normal; } /* Put ordinals in front of ordered list items */ .hlist ol { counter-reset: listitem; } .hlist ol > li { counter-increment: listitem; } .hlist ol > li:before { content: " " counter(listitem) "\a0"; } .hlist dd ol > li:first-child:before, .hlist dt ol > li:first-child:before, .hlist li ol > li:first-child:before { content: " (" counter(listitem) "\a0"; } 9e75e584c328c44948ca9aae5c1cb4fa3c76a622 Module:Message box/cmbox.css 828 444 1338 1337 2023-06-13T18:15:48Z Otonashi Ayana 2 1 revision imported from [[:mw:Module:Message_box/cmbox.css]]: w sanitized-css text/css /** * {{cmbox}} (category message box) styles * * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-enwp-boxes.css * @revision 2021-07-15 */ table.cmbox { margin: 3px 10%; border-collapse: collapse; border: 1px solid #a2a9b1; /* Default "notice" blue */ background-color: #dfe8ff; box-sizing: border-box; } /* An empty narrow cell */ .cmbox td.mbox-empty-cell { border: none; padding: 0; width: 1px; } /* The message body cell(s) */ .cmbox th.mbox-text, .cmbox td.mbox-text { border: none; /* 0.9em left/right */ padding: 0.25em 0.9em; /* Make all mboxes the same width regardless of text length */ width: 100%; } /* The left image cell */ .cmbox td.mbox-image { /* 0.9em left, 0px right */ /* @noflip */ padding: 2px 0 2px 0.9em; } /* The right image cell */ .cmbox td.mbox-imageright { /* 0px left, 0.9em right */ /* @noflip */ padding: 2px 0.9em 2px 0; } table.cmbox-notice { /* Blue */ background-color: #d8e8ff; } table.cmbox-speedy { margin-top: 4px; margin-bottom: 4px; /* Red */ border: 4px solid #b32424; } table.cmbox-delete, table.cmbox-speedy { /* Pink */ background-color: #ffdbdb; } table.cmbox-content { /* Orange */ background-color: #ffe7ce; } table.cmbox-style { /* Yellow */ background-color: #fff9db; } table.cmbox-move { /* Purple */ background-color: #e4d8ff; } table.cmbox-protection { /* Gray-gold */ background-color: #efefe1; } 4a01a155911e7f7e0e61ad9eecbe3d762883b93b Template:Tll 10 445 1340 1339 2023-06-13T18:15:49Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Tll]]: w wikitext text/x-wiki <onlyinclude><!-- --><templatestyles src="Template:Mono/styles.css"/><!-- -->{{#if:{{yesno|{{{nowrap|}}}}}<!-- -->|<templatestyles src="Template:Nowrap/styles.css"/><!-- -->}}<span class=" monospaced {{#if:{{yesno|{{{nowrap|}}}}}|nowrap}} "><!-- -->{{((}}<!-- --><includeonly>[[Special:MyLanguage/Template:{{{{{|safesubst:}}}ucfirst:{{{1}}}}}|{{{1}}}]]</includeonly><!-- --><noinclude>[[Special:MyLanguage/{{translatable}}|Template link localized]]</noinclude><!-- -->{{{{{|safesubst:}}}#ifeq:{{{2|}}}|{{{2}}}|{{!}}{{{2}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{3|}}}|{{{3}}}|{{!}}{{{3}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{4|}}}|{{{4}}}|{{!}}{{{4}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{5|}}}|{{{5}}}|{{!}}{{{5}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{6|}}}|{{{6}}}|{{!}}{{{6}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{7|}}}|{{{7}}}|{{!}}{{{7}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{8|}}}|{{{8}}}|{{!}}{{{8}}}}}<!-- -->{{{{{|safesubst:}}}#ifeq:{{{9|}}}|{{{9}}}|{{!}}{{{9}}}}}<!-- -->{{))}}<!-- --></span><!-- --></onlyinclude> {{Documentation}} <!-- Categories go on the /doc subpage and interwikis go on Wikidata. --> 590499106cdfec1fb3c1797e6cc6fc56946b3e0d Template:Mbox/TemplateData 10 446 1342 1341 2023-06-13T18:15:49Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Mbox/TemplateData]]: w wikitext text/x-wiki <noinclude>{{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> </noinclude>{{TemplateData header|editlinks=1|docpage=Mbox/TemplateData}} <templatedata> { "description": "This is the specialized version of the {{mbox}} or “multi namespace message box” meta-template.", "format": "block", "params": { "type": { "label": "Type", "suggestedvalues": [ "speedy", "delete", "content", "style", "notice", "move", "protection" ], "type": "string", "default": "notice", "suggested": true }, "image": { "label": "Image (left)", "suggestedvalues": [ "none" ], "default": "Depends on the “type” parameter.", "suggested": true, "type": "content" }, "imageright": { "label": "Image (right)", "type": "content" }, "style": { "label": "CSS Style", "type": "string" }, "textstyle": { "label": "Text CSS Style", "type": "string" }, "text": { "label": "Text", "suggested": true, "type": "content" }, "small": { "label": "Small?", "suggestedvalues": [ "{{{small|}}}", "left", "yes", "1" ], "default": "0", "type": "boolean" }, "smallimage": { "label": "Small Image (left)", "suggestedvalues": [ "none" ], "default": "{{{image}}}", "type": "content" }, "smallimageright": { "label": "Small Image (right)", "suggestedvalues": [ "none" ], "default": "{{{imageright}}}", "type": "content" }, "smalltext": { "label": "Small Text", "default": "{{{text}}}", "type": "content" } } } </templatedata><noinclude> <!-- Categories below this line; interwikis at Wikidata --> [[Category:TemplateData documentation{{#translation:}}]] </noinclude> 9df258d03498993e318125a2a2c84537a95b0653 Template:Mbox templates 10 447 1344 1343 2023-06-13T18:15:50Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Mbox_templates]]: w wikitext text/x-wiki <languages/> <onlyinclude>{{nmbox | image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]] | header = {{ll|Template:Mbox|2=<translate><!--T:1--> Message box templates</translate>}} | text = {{flatlist|1= * {{tll|ambox}} * {{tll|cmbox}} * {{tll|fmbox}} * {{tll|imbox}} * {{tll|nmbox}} * {{tll|ombox}} * {{tll|tmbox}} }} }}</onlyinclude> [[Category:Navigation templates{{#translation:}}]] 9dc6ee90892df1c583767586088a9a448e0a441c Template:Mbox templates/en 10 448 1346 1345 2023-06-13T18:15:51Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Mbox_templates/en]]: w wikitext text/x-wiki <languages/> <onlyinclude>{{nmbox | image = [[File:OOjs UI icon puzzle-ltr.svg|22px|link=]] | header = {{ll|Template:Mbox|2=Message box templates}} | text = {{flatlist|1= * {{tll|ambox}} * {{tll|cmbox}} * {{tll|fmbox}} * {{tll|imbox}} * {{tll|nmbox}} * {{tll|ombox}} * {{tll|tmbox}} }} }}</onlyinclude> [[Category:Navigation templates{{#translation:}}]] d09263a3b65012961144152a83c6a76b403d4e21 Template:\sandbox 10 449 1348 1347 2023-06-13T18:15:53Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:\sandbox]]: w wikitext text/x-wiki <onlyinclude>{{#ifeq:{{SUBPAGENAME}}|sandbox|/sandbox}}</onlyinclude> {{Documentation}} <!-- Add categories to the /doc subpage and interwikis in Wikidata, not here! --> b84c7b18d05a12c4da67f5f1a5e12c4371eea588 Template:Cmbox/doc 10 450 1350 1349 2023-06-13T18:15:55Z Otonashi Ayana 2 1 revision imported from [[:mw:Template:Cmbox/doc]]: w wikitext text/x-wiki {{Mbox templates}} {{Documentation subpage}} <!-- Add categories where indicated at the bottom of this page and interwikis at Wikidata --> {{Lua|Module:Message box{{\sandbox}}}} {{Uses TemplateStyles|Module:Message box/ambox.css}} This is the {{tl|Cmbox}} (['''C''']ategory ['''m''']essage ['''box''']) metatemplate. It is used to build message box templates for category pages. It offers several different colours, uses default images if no image parameter is given, and it has some other features. This template works almost exactly like {{tl|Ambox}} and uses the same parameters. === Usage === Simple usage example: <pre> {{cmbox | text = Some text.}} </pre> {{cmbox{{\sandbox}} | text = Some text.}} Complex example: <pre> {{cmbox | type = style | image = [[File:Emblem-question-yellow.svg|40px]] | style = width: 400px; | textstyle = color: red; font-weight: bold; font-style: italic; | text = The message body text. }} </pre> {{cmbox{{\sandbox}} | type = style | image = [[File:Emblem-question-yellow.svg|40px]] | style = width: 400px; | textstyle = color: red; font-weight: bold; font-style: italic; | text = The message body text. }} === Category message box types === The following examples use different '''type''' parameters but use no image parameters, thus they use the default images for each type. {{cmbox{{\sandbox}} | type = speedy | text = type=<u>speedy</u> – Speedy deletion templates such as {{tl|db-c1}}. }} {{cmbox{{\sandbox}} | type = delete | text = type=<u>delete</u> – Deletion templates such as {{tl|cfd}}. }} {{cmbox{{\sandbox}} | type = content | text = type=<u>content</u> – Major warnings and problems such as {{tl|Categorization of people disputed}}. }} {{cmbox{{\sandbox}} | type = style | text = type=<u>style</u> – Minor warnings and problems such as {{tl|Underpopulated category}}. }} {{cmbox{{\sandbox}} | type = notice | text = type=<u>notice</u> – Notices and messages of any kind, both permanent and temporary. }} {{cmbox{{\sandbox}} | type = move | text = type=<u>move</u> – Move, merge, and split messages and proposals such as {{tl|Category redirect}}. }} {{cmbox{{\sandbox}} | type = protection | text = type=<u>protection</u> – Protection templates such as {{tl|pp}} when shown on a category page. }} === Other images === The default images shown above are mostly for convenience. In many cases it is more appropriate to use more specific images. These examples use the '''image''' parameter to specify an image other than the default images. {{cmbox{{\sandbox}} | type = style | image = [[File:Sub-arrows.svg|40px]] | text = type = style<br />image = <nowiki>[[File:Sub-arrows.svg|40px]]</nowiki><br />This image is used for {{tl|Very large}} and {{tl|Category diffuse}}. }} {{cmbox{{\sandbox}} | type = move | image = [[File:Redirect arrow.svg|52px]] | text = type = move<br />image = <nowiki>[[File:Redirect arrow.svg|52px]]</nowiki><br />This image is used for {{tl|Category redirect}}. }} === Special === Some other parameter combinations. {{cmbox{{\sandbox}} | text = No type and no image given ('''default''') }} {{cmbox{{\sandbox}} | image = none | text = No type and '''image=none''' – No image is used and the '''text''' uses the whole message box area. }} {{cmbox{{\sandbox}} | image = [[File:Gnome globe current event.svg|42px]] | imageright = [[File:Nuvola apps bookcase.svg|40px]] | text = image = <nowiki>[[File:Gnome globe current event.svg|42px]]</nowiki><br />imageright = <nowiki>[[File:Nuvola apps bookcase.svg|40px]]</nowiki> }} {{cmbox{{\sandbox}} | image = [[File:Gnome globe current event.svg|42px]] | imageright = [[File:Shuttle.svg|20px]] | text = '''This category lists articles about current and recent [[w:Spaceflight|spaceflights]].'''<br />It is populated by the {{tl|Current spaceflight}} template. }} === Parameters === List of all parameters: <pre> {{cmbox | type = speedy / delete / content / style / notice / move / protection | image = none / [[File:Some image.svg|40px]] | imageright = [[File:Some image.svg|40px]] | class = A custom CSS class to apply to the box | style = CSS values | textstyle = CSS values | plainlinks = no | text = The message body text. }} </pre> '''type''' :If no '''type''' parameter is given, the template defaults to type '''notice'''. That means it gets a blue background. '''image''' :'''No parameter''' = If no '''image''' parameter is given, the template uses a default image. Which default image it uses depends on the '''type''' parameter. :'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size). ::For example: <code><nowiki>image = [[File:Sub-arrows.svg|40px]]</nowiki></code> :'''none''' = Means that no image is used. '''imageright''' :'''No parameter''' = If no '''imageright''' parameter is given, no image is shown on the right side. :'''An image''' = Should be an image with usual wiki notation. 40px - 50px width is usually about right depending on the image height-to-width ratio (but the message box can handle images of any size). ::For example: <code><nowiki>imageright = [[File:Nuvola apps bookcase.svg|40px]]</nowiki></code> :'''Anything''' = Any other object that you want to show on the right side. '''style''' :An optional [[w:Cascading Style Sheets|CSS]] value used by the entire message box table. Without quotation marks <code>" "</code>. ::For example: <code>style = margin-bottom: 0.5em;</code> '''textstyle''' :An optional [[w:Cascading Style Sheets|CSS]] value used by the text cell. ::For example: <code>textstyle = text-align: center;</code> '''plainlinks''' :Normally on Wikipedia, external links have an arrow icon next to them, like this: [http://www.example.com Example.com]. However, in message boxes, the arrow icon is suppressed by default, like this: <span class="plainlinks">[http://www.example.com Example.com]</span>. To get the normal style of external link with the arrow icon, use {{para|plainlinks|no}}. '''text''' :The message body text. === Technical details === If you need to use special characters in the text parameter then you need to escape them like this: <pre> {{cmbox | text = <div> Equal sign = and a start and end brace { } work fine as they are. But here is a pipe {{!}} and two end braces &lt;nowiki>}}&lt;/nowiki>. And now a pipe and end braces &lt;nowiki>|}}&lt;/nowiki>. </div> }} </pre> {{cmbox{{\sandbox}} | text = <div> Equal sign = and a start and end brace { } work fine as they are. But here is a pipe {{!}} and two end braces <nowiki>}}</nowiki>. And now a pipe and end braces <nowiki>|}}</nowiki>. </div> }} This template uses the cmbox CSS classes in {{Blue|MediaWiki:Common.css}} for most of its looks, thus it is fully skinnable. Internally this meta-template uses HTML markup instead of wiki markup for the table code. That is the usual way we make meta-templates since wiki markup has several drawbacks. For instance it makes it harder to use [[Help:Extension:ParserFunctions|parser functions]] and special characters in parameters. The default images for this meta-template are in PNG format instead of SVG format. The main reason is that some older web browsers have trouble with the transparent background that MediaWiki renders for SVG images. The PNG images here have hand-optimised transparent background colour so they look good in all browsers. Note that SVG icons only look somewhat bad in the old browsers, thus such hand optimisation is only worth the trouble for very widely used icons. For more technical details see the [[Template talk:Cmbox|talk page]]. Since this template works almost exactly like the other mboxes, their talk pages and related pages might also contain more details (see the [[#See also|See also]] section below). == TemplateData == {{Mbox/TemplateData}} <includeonly>{{Sandbox other|| <!-- Categories below this line; interwikis at Wikidata --> [[Category:Mbox templates{{#translation:}}]] }}</includeonly> 5d5a78d9d3dac08ea8c76d1802b8e71065e9b565 MediaWiki:Common.css 8 7 1351 1235 2023-06-13T18:51:01Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:has(a):hover{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-body{ box-shadow: -21px 21px 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 75ea509548bf6ae1fe59d2f135ef5b8bf4f2bccc 1353 1351 2023-06-13T19:16:10Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:hover .family-name{ text-decoration: underline; } .character-name:hover .given-name{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-body{ box-shadow: -21px 21px 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 087f464490fa83bd0d2c829e955a701a91b06c0d Kara no Shoujo - The Second Episode 0 182 1352 1170 2023-06-13T19:14:33Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} | prev = {{kns}} | next = {{kns3}} }} '''''Kara no Shōjo — The Second Episode''''', originally released as {{nihongo|'''''Uro no Shōjo'''''|虚ノ少女}} and later released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Premise == In late 1957, {{n|Reiji|Tokisaka}} is still no closer to finding {{n|Shinji|Mamiya}} and {{n|Toko|Kuchiki}}. After another string of murders begins in Tokyo that is seemingly tied to the spiritual traditions of an isolated village in rural Japan, Reiji and his newest assistant, {{n|Masaki|Tomoyuki}} set out to solve the case. == Trivia == *{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} 968e4b5208b8ad23c31229c0d5f9515d8f2df694 Natsume Takashiro 0 305 1354 940 2023-06-13T19:20:23Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:snat0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}}. == Relationships == {{family tree}} {{kns characters}} {{kns2 characters|state=collapsed}} 661ee174d5e44122d3b22044c5e9b9ce78d8ac47 1371 1354 2023-06-13T21:13:41Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Natsume | family name = Takashiro | jname = | image = [[File:snat0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a coroner who runs a clinic in Takadanobaba. She performs every autopsy in the {{kns}} trilogy. She is a longtime friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}} and is the older sister of {{n|Shugo|Takashiro}} and {{n|Nana|Takashiro}}. == Relationships == {{family tree}} {{kns characters}} {{kns2 characters|state=collapsed}} aacc6bfc84061f3d794edc9f93a68ff537149633 Template:Kns2 characters 10 313 1355 1187 2023-06-13T19:21:36Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{n|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 834d931dcfb88e49cf5f070a36db9689a543f12a File:Aok0102.png 6 451 1356 2023-06-13T19:23:03Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Aoki Toji 0 452 1357 2023-06-13T19:23:38Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Aoki | family name = Toji | jname = 冬史 蒼木 | image = [[File:aok0102.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }} {{cartagra characters}} {{kns2 characters|state=collapsed}}" wikitext text/x-wiki {{infobox character | given name = Aoki | family name = Toji | jname = 冬史 蒼木 | image = [[File:aok0102.png|x300px]] | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }} {{cartagra characters}} {{kns2 characters|state=collapsed}} 3d15b784d32d8311a5b6870511ce67a830612a27 1359 1357 2023-06-13T20:57:33Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Aoki | family name = Toji | jname = 冬史 蒼木 | image = <tabber> |-| Short Hair= [[File:aok0102.png|x300px]] |-| Long Hair = [[File:tou100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }} {{cartagra characters}} {{kns2 characters|state=collapsed}} 9da8484dd160a88bbf07113ed104ba908b49ddf1 1370 1359 2023-06-13T21:12:22Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Aoki | family name = Toji | jname = 冬史 蒼木 | image = <tabber> |-| Short Hair= [[File:aok0102.png|x300px]] |-| Long Hair = [[File:tou100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|冬史 蒼木}} is a drifter who was once a high-ranking member of an underworld organization called the "Hand of Death" in Ueno. She is an old friend of {{n|Shugo|Takashiro}}. She lost her left arm when she was younger. {{cartagra characters}} {{kns2 characters|state=collapsed}} 9d6dbabe799a1bef0a41a445c2b6df84e32334a3 File:Tou100a.png 6 453 1358 2023-06-13T20:57:29Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Tok100a.png 6 454 1360 2023-06-13T20:58:33Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Tokiko Shigusa 0 455 1361 2023-06-13T21:01:39Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Tokiko | family name = Shigusa | jname = 祠草 時子 | image = [[File:tok100a.png|x300px]] | aka = The Holy Prophet | gender = Female | age = | appearance = {{cartagra}} | seiyu = {{o|Rei|Hikura}} }}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoilers|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years pri..." wikitext text/x-wiki {{infobox character | given name = Tokiko | family name = Shigusa | jname = 祠草 時子 | image = [[File:tok100a.png|x300px]] | aka = The Holy Prophet | gender = Female | age = | appearance = {{cartagra}} | seiyu = {{o|Rei|Hikura}} }}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoilers|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. {{cartagra characters}} 7a4e0d52771daa582ef2d2f3d0dca11a56ddbd42 1362 1361 2023-06-13T21:02:04Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Tokiko | family name = Shigusa | jname = 祠草 時子 | image = [[File:tok100a.png|x300px]] | aka = The Holy Prophet | gender = Female | age = | appearance = {{cartagra}} | seiyu = {{o|Rei|Hikura}} }}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoilers|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. }} {{cartagra characters}} 8b847ba0bc39948682f3e17c9ec871cb3191def8 1363 1362 2023-06-13T21:02:38Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Tokiko | family name = Shigusa | jname = 祠草 時子 | image = [[File:tok100a.png|x300px]] | aka = The Holy Prophet | gender = Female | age = | appearance = {{cartagra}} | seiyu = {{o|Rei|Hikura}} }}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoiler|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. }} {{cartagra characters}} 74184a88d2877e973e7f45354bdd9195df888dc1 1364 1363 2023-06-13T21:05:45Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Tokiko | family name = Shigusa | jname = 祠草 時子 | image = [[File:tok100a.png|x300px]] | aka = The Holy Prophet | gender = Female | age = | appearance = {{cartagra}} | seiyu = {{o|Rei|Hikura}} }}{{nihongo|'''{{c}}'''|祠草 時子}} is a mysterious woman connected to the [[Senri]] cult. {{spoiler|cartagra|She is searching for her father, {{n|Michio|Shigusa}}, who disappeared two years prior to the story of {{cartagra}}. }} == Relationships == {{family tree}} {{hitogata family tree notice}} {{cartagra characters}} f24bc8cb8b2feda177161810b471f01b8594f13d Tokiko Shigusa/Family tree 0 456 1365 2023-06-13T21:06:02Z Otonashi Ayana 2 Created page with "{{Tree chart/start|align=center}} {{Tree chart| Mch | Mch = Michio }} {{Tree chart| |!| |}} {{Tree chart| Tok | Tok = {{charbox|Tokiko|119px|link=Tokiko Shigusa}}}} {{Tree chart/end}}" wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| Mch | Mch = Michio }} {{Tree chart| |!| |}} {{Tree chart| Tok | Tok = {{charbox|Tokiko|119px|link=Tokiko Shigusa}}}} {{Tree chart/end}} 81da37cada0edc7e135d6782ef22fa76677a23b8 1366 1365 2023-06-13T21:07:13Z Otonashi Ayana 2 wikitext text/x-wiki {{Tree chart/start|align=center}} {{Tree chart| |!| }} {{Tree chart| Mch | Mch = Michio }} {{Tree chart| |!| |}} {{Tree chart| Tok | Tok = {{charbox|Tokiko|119px|link=Tokiko Shigusa}}}} {{Tree chart/end}} 91559e41c3a024b87d48db81c86b0de8d2b72e3a Template:Cartagra characters 10 201 1367 1110 2023-06-13T21:08:33Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] | group3 = Other | list3 = * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * {{n|Daisaku|Arata}} }}<includeonly> [[Category:Cartagra]] [[Category:Characters]] </includeonly> 1c9efde5eff1fc650acfb3db97cb0fae00e26bbe 1369 1367 2023-06-13T21:09:36Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] | group3 = Other | list3 = * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * {{n|Daisaku|Arata}} }}<includeonly> [[Category:Characters]] [[Category:Cartagra]] </includeonly> a352c4ec90b571983cdce200565c4c7cc43c2e71 Category:Pages using Tabber parser tag 14 457 1368 2023-06-13T21:09:13Z Otonashi Ayana 2 Created page with "__HIDDENCAT__" wikitext text/x-wiki __HIDDENCAT__ 183b9c38bff80327776bd180634fccfd19cf616f File:Kar0701.png 6 323 1372 1012 2023-06-13T21:16:14Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Kar0701.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Kar0501.png 6 458 1373 2023-06-13T21:17:05Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Karen Hinagami 0 322 1374 1213 2023-06-13T21:17:08Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hingami | jname = | image = <tabber> |-| Adult = [[File:kar0701.png|x300px]] |-| Teenager = [[File:kar0501.png|x300px]] </tabber> | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko" that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family. In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting. Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} 31c63a0bb0556e7edcc3981dbbb1c8d21b0decfc Hitogata 0 459 1375 2023-06-13T21:38:56Z Otonashi Ayana 2 Created page with "'''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led through a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are he..." wikitext text/x-wiki '''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led through a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are heirs to the Hinagami family are set up to marry a designated "Miko," a girl who is trained by the Shigusa family to continue the village's traditions. {{spoiler|kns2|In truth, these two families are incestuously intertwined; the Miko is always a part of the Shigusa family herself, hidden away from the rest of the village at birth and reintroduced upon reaching maturity as being an enigmatic "guest" of Hitogata.}} == See also == * [[Hinagami-Shigusa family tree]] {{kns2/cat}} e3e8f71a882fe17c3d4fa4c97d6642bf2fbe4d98 1376 1375 2023-06-13T21:39:52Z Otonashi Ayana 2 wikitext text/x-wiki '''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led through a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are heirs to the Hinagami family are set up to marry a designated "Miko," a girl who is trained by the Shigusa family to carry on the village's traditions. {{spoiler|kns2|In truth, these two families are incestuously intertwined; the Miko is always a part of the Shigusa family herself, hidden away from the rest of the village at birth and reintroduced upon reaching maturity as being an enigmatic "guest" of Hitogata.}} == See also == * [[Hinagami-Shigusa family tree]] {{kns2/cat}} c43e4a77860c8a58920dee04552f5d2571c6b041 1377 1376 2023-06-13T22:04:51Z Otonashi Ayana 2 wikitext text/x-wiki '''Hitogata''' is a rural village in the Toyama prefecture and is a major location in {{kns2}}. The village is led by a mutual cooperation between the Hinagami and Shigusa families. The Hinagami family is responsible for much of the village's wealth owing to their successful Hinagami Pharmaceuticals company, while the Shigusa family runs the local shrine and maintains the village's longstanding religious traditions. To ensure this continuing alliance, men who are heirs to the Hinagami family are set up to marry a designated "Miko," a girl who is trained by the Shigusa family to carry on the village's traditions. {{spoiler|kns2|In truth, these two families are incestuously intertwined; the Miko is always a part of the Shigusa family herself, hidden away from the rest of the village at birth and reintroduced upon reaching maturity as being an enigmatic "guest" of Hitogata.}} == See also == * [[Hinagami-Shigusa family tree]] {{kns2/cat}} 443634018f04cf0376dda834297a94e9445ce7c2 Fuyumi Kayahara 0 314 1378 965 2023-06-13T23:49:02Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}} == Plot == Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately meet and fall in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family. In 1940, in the days leading up to the village's annual festival, Satsuki makes plans to see Ayato. However, Ayako secretly changes the date of the meeting and meets with Ayato in an abandoned cabin, where the two have sex. After the festival, Satsuki learns of what happened and attempts to murder Ayako. However, Ayako manages to overpower her and strangles Satsuki to death. The panicked Ayako is found by {{n|Kensei|Shigusa}}, who then helps Ayako escape the village. {{n|Saya|Shigusa}} discovers Satsuki's corpse and stages her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine. Ayako adopts the name Fuyumi Kayahara and begins a new life in Tokyo. She is approached by a new-age religious cult called the [[Blessed Congregation]] and is given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation will provide Fuyumi with a monetary reward when they return to collect Yukiko after reaching adulthood. {{kns2 characters}} c7979c6f510b7e94ea107f38fadaebb247c1088f 1379 1378 2023-06-13T23:52:39Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is a nursery employee and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}} == Plot == Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family. In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine. Ayako went on to adopt the name Fuyumi Kayahara and begin a new life in Tokyo. She was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood. {{kns2 characters}} 52b14e00b61fa77b9ba076232fd1b379eb6d8038 1381 1379 2023-06-13T23:55:45Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:fuy0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}} == Plot == Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family. In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine. Ayako went on to adopt the name Fuyumi Kayahara and begin a new life in Tokyo. She was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood. {{kns2 characters}} 79deac579e3e7d40172d3392273310eb0c8772ae File:Fuy0301.png 6 460 1380 2023-06-13T23:55:09Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Template:Location 10 461 1382 2023-06-13T23:57:48Z Otonashi Ayana 2 Created page with "{{subpage|List of locations}}<includeonly>[[Category:Locations]]</includeonly>" wikitext text/x-wiki {{subpage|List of locations}}<includeonly>[[Category:Locations]]</includeonly> 06777bcbcc2ac07fe05c3c5c08fc39754d0ab7cb Ouba Private Girls' Academy 0 275 1383 817 2023-06-13T23:58:02Z Otonashi Ayana 2 wikitext text/x-wiki {{location}}[[File:academy front.png|thumb|The exterior of the Academy]]'''{{PAGENAME}}''' is a private all-girls school located in [[w:Hōya, Tokyo|Hōya]]. === Known Students === * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tori|Kohane}} * {{n|Ayumu|Sato}} * {{n|Orihime|Tsukishime}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Yui|Nishizono}} * {{n|Haruka|Imamura}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takigawa}} === Known Faculty === * {{n|Tokio|Saeki}} * {{n|Tatsuhiko|Kusaka}} * {{n|Nene|Akazaki}} * {{n|Reiji|Tokisaka}} (temporary) 3165ef9ee9ba091f13b4c7fc6b6e05edf1f84936 File:Nursery interior.png 6 462 1384 2023-06-14T00:04:20Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 New Leaf Garden 0 463 1385 2023-06-14T00:05:55Z Otonashi Ayana 2 Created page with "{{location}}[[File:nursery interior.png|thumb]]The '''New Leaf Garden''' is a nursery owned by the [[Blessed Congregation]] that was created after the dissolution of the [[White Lily Garden]] orphanage. {{n|Fuyumi|Kayahara}} and {{n|Nanako|Sawashiro}} work at the nursery." wikitext text/x-wiki {{location}}[[File:nursery interior.png|thumb]]The '''New Leaf Garden''' is a nursery owned by the [[Blessed Congregation]] that was created after the dissolution of the [[White Lily Garden]] orphanage. {{n|Fuyumi|Kayahara}} and {{n|Nanako|Sawashiro}} work at the nursery. 486be7ff1a3d06e2da00937323b4db160b60f69f 1386 1385 2023-06-14T00:06:28Z Otonashi Ayana 2 wikitext text/x-wiki {{location}}[[File:nursery interior.png|thumb|The interior of the nursery]]The '''New Leaf Garden''' is a nursery owned by the [[Blessed Congregation]] that was created after the dissolution of the [[White Lily Garden]] orphanage. {{n|Fuyumi|Kayahara}} and {{n|Nanako|Sawashiro}} work at the nursery. bcc2b8fac2b29d971308c6c8dc54af4820ca3507 Template:Minor 10 464 1387 2023-06-14T00:15:38Z Otonashi Ayana 2 Created page with "{{#switch: {{{1}}} | cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns = {{#if:{{{3|}}}|[[List of minor characters in {{kns|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns2 = {{#if:{{{3|}}}|[[List of minor characters in {{kns2|n}}#{{{2}}}|{{{2}}}]]|List of minor c..." wikitext text/x-wiki {{#switch: {{{1}}} | cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns = {{#if:{{{3|}}}|[[List of minor characters in {{kns|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns2 = {{#if:{{{3|}}}|[[List of minor characters in {{kns2|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns2|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns3 = {{#if:{{{3|}}}|[[List of minor characters in {{kns3|n}}#{{{2}}}|{{{2}}}]]|[[List of minor characters in {{kns3|n}}#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} }} d86dea3f969378d2f3297801de11cd38987c1e28 1388 1387 2023-06-14T00:18:56Z Otonashi Ayana 2 wikitext text/x-wiki {{#switch: {{{1}}} | cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo#{{{2}}}|{{{2}}}]]|[[List of minor characters in Kara no Shoujo#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns2 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}|{{{2}}}]]|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} | kns3 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}|{{{2}}}]]|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]}} }} dd010cbc8d9815abf709761a261f1541cbc955fc 1389 1388 2023-06-14T00:20:52Z Otonashi Ayana 2 wikitext text/x-wiki {{#switch: {{{1}}} | cartagra = {{#if:{{{3|}}}|[[List of minor characters in Cartagra#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Cartagra#{{{2}}}|{{{2}}}]]}} | kns = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Kara no Shoujo#{{{2}}}|{{{2}}}]]}} | kns2 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Kara no Shoujo - The Second Episode#{{{2}}}|{{{2}}}]]}} | kns3 = {{#if:{{{3|}}}|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}_{{{3|}}}|{{charname|{{{2}}}|{{{3|}}}}}]]|[[List of minor characters in Kara no Shoujo - The Last Episode#{{{2}}}|{{{2}}}]]}} }} 2b7d49f9dc7e9d4bdd90be737b8cf5f0340480ac List of minor characters in Kara no Shoujo - The Second Episode 0 465 1390 2023-06-14T00:22:24Z Otonashi Ayana 2 Created page with "{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== {{kns2 characters}}" wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== {{kns2 characters}} 944b2360364206448032ca76acdb9b5c6a4dcc2f 1394 1390 2023-06-14T00:29:40Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== ==== Yayoi Shigusa ==== <div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]] {{nihongo|'''{{o|Yayoi|Shigusa}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. </div> {{kns2 characters}} 418e04069db17f120be640ee5b62b89909beb0f2 1396 1394 2023-06-14T00:32:06Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== <div style="clear:both"> {{nihongo|'''{{o|Saizo|Kuki}}'''|犀造 九鬼}} is a resident of the [[Hitogata]] settlement, working at the branch office. </div> ==== Yayoi Shigusa ==== <div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]] {{nihongo|'''{{o|Yayoi|Shigusa}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. </div> {{kns2 characters}} da3800d80ec5ff5074ff74feca8252e8332ae6a2 1397 1396 2023-06-14T00:32:14Z Otonashi Ayana 2 /* Saizo Kuki */ wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== <div style="clear:both"> {{nihongo|'''{{o|Saizo|Kuki}}'''|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office. </div> ==== Yayoi Shigusa ==== <div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]] {{nihongo|'''{{o|Yayoi|Shigusa}}'''|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. </div> {{kns2 characters}} bcf2fb892ae6723d769b35c0d0f4037bccc4ee35 1398 1397 2023-06-14T00:32:49Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== <div style="clear:both"> {{nihongo|{{o|Saizo|Kuki}}|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office. </div> ==== Yayoi Shigusa ==== <div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]] {{nihongo|{{o|Yayoi|Shigusa}}|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. </div> {{kns2 characters}} 15bea866fb0180bb5f5327cf91a9103d2a6c8ef1 Template:Kns2 characters 10 313 1391 1355 2023-06-14T00:22:46Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{n|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{n|Miya|Shigusa}} * {{n|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{n|Shinobu|Takayama}} * {{minor|kns2|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> e08e60e4ef608d33a1ecfcabd7ed739ba07da897 1392 1391 2023-06-14T00:24:51Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{minor|kns2|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{minor|kns2|Miya|Shigusa}} * {{minor|kns2|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{minor|kns2|Shinobu|Takayama}} * {{minor|kns2|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Bunji|Inui}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 1165a2b25dd2c3939c805b21eb9531c74efa25e5 1416 1392 2023-06-14T00:59:40Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} * {{n|Bunji|Inui}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{minor|kns2|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{minor|kns2|Miya|Shigusa}} * {{minor|kns2|Yayoi|Shigusa}} * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{minor|kns2|Shinobu|Takayama}} * {{minor|kns2|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 8bd96b38f4dea2b457635e31cde52d88e416f76e File:Yay0201.png 6 466 1393 2023-06-14T00:25:58Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Yayoi Shigusa 0 380 1395 1130 2023-06-14T00:30:07Z Otonashi Ayana 2 Redirected page to [[List of minor characters in Kara no Shoujo - The Second Episode#Yayoi Shigusa]] wikitext text/x-wiki #REDIRECT [[List of minor characters in Kara no Shoujo - The Second Episode#Yayoi Shigusa]] 7f4a63d1d18f9ad1ed3e8084618a1ec1b2d921e3 MediaWiki:Common.css 8 7 1399 1353 2023-06-14T00:34:50Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:hover .family-name{ text-decoration: underline; } .character-name:hover .given-name{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -10px 0 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 441d3da5fbc686b48f1ec8c53ae737d2f1ec2473 1400 1399 2023-06-14T00:36:46Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:hover .family-name{ text-decoration: underline; } .character-name:hover .given-name{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -10px 10px 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 65095b258ea4c4faf450bce9fb0c9260adc460c8 Kara no Shoujo 2 0 467 1401 2023-06-14T00:37:50Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo - The Second Episode]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo - The Second Episode]] dd2def2cf3420d38903a7328d20e368f2d71c976 Uro no Shoujo 0 468 1402 2023-06-14T00:38:20Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo - The Second Episode]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo - The Second Episode]] dd2def2cf3420d38903a7328d20e368f2d71c976 Ama no Shoujo 0 469 1403 2023-06-14T00:38:35Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo - The Last Episode]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo - The Last Episode]] aeca3ca6670ab0bbbd03c23b2ce7be53685bab00 Kara no Shoujo 3 0 470 1404 2023-06-14T00:38:50Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo - The Last Episode]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo - The Last Episode]] aeca3ca6670ab0bbbd03c23b2ce7be53685bab00 The Shell Part III 0 471 1405 2023-06-14T00:39:40Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo - The Last Episode]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo - The Last Episode]] aeca3ca6670ab0bbbd03c23b2ce7be53685bab00 The Shell Part I 0 472 1406 2023-06-14T00:40:02Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo]] 0bf375957100375d059b3b83ab5cc9da24088021 The Shell Part II 0 473 1407 2023-06-14T00:40:45Z Otonashi Ayana 2 Redirected page to [[Kara no Shoujo - The Second Episode]] wikitext text/x-wiki #REDIRECT [[Kara no Shoujo - The Second Episode]] dd2def2cf3420d38903a7328d20e368f2d71c976 File:Smiy0101a.png 6 474 1408 2023-06-14T00:43:47Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Yukiko Miyama 0 475 1409 2023-06-14T00:46:14Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Yukiko | family name = Miyama | jname = 深山 由紀子 | image = [[File:smiya0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Hikaru|Isshiki}} }}{{nihongo|'''{{c}}'''|深山 由紀子}} is the late fiancée of {{n|Reiji|Tokisaka}}. She was murdered by {{n|Makoto|Rokushiki}}, the final victim of his killing spree before his disappearance. {{kns charact..." wikitext text/x-wiki {{infobox character | given name = Yukiko | family name = Miyama | jname = 深山 由紀子 | image = [[File:smiya0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Hikaru|Isshiki}} }}{{nihongo|'''{{c}}'''|深山 由紀子}} is the late fiancée of {{n|Reiji|Tokisaka}}. She was murdered by {{n|Makoto|Rokushiki}}, the final victim of his killing spree before his disappearance. {{kns characters}} f0e597177760b07cc7b346b586fff7b26b1281b1 1410 1409 2023-06-14T00:47:26Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Yukiko | family name = Miyama | jname = 深山 由紀子 | image = [[File:smiy0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Hikaru|Isshiki}} }}{{nihongo|'''{{c}}'''|深山 由紀子}} is the late fiancée of {{n|Reiji|Tokisaka}}. She was murdered by {{n|Makoto|Rokushiki}}, the final victim of his killing spree before his disappearance. {{kns characters}} db5005c3c2a98218141313a830a55a032e211325 File:Rok0101.png 6 393 1411 1188 2023-06-14T00:49:18Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Rok0101.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Makoto Rokushiki 0 394 1412 1205 2023-06-14T00:50:32Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Makoto | family name = Rokushiki | jname = 六識 命 | image = [[File:rok0101.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }}{{nihongo|'''{{c}}'''|六識 命}}, also known as {{nihongo|'''{{o|Tamaki|Saito}}'''|西藤 環}}, is a talented psychiatrist and serial killer. == Plot == Though primarily a psychiatrist, Makoto is an extremely talented doctor with a wide array of medical knowledge in countless fields. After World War II, he spent his time curing people on the streets, finding passion in saving others. However, he had a spiritual crisis when a pregnant prostitute asked him for an abortion, an act he disagreed with as a devout Catholic. He performed the surgery, however he fed the prostitute a poisoned drink afterwards, killing her as a form of religious revenge. In doing so, Makoto slipped into madness and came to believe it was his duty to dispense justice to those who violated the "sacred right to life." He crucified the prostitute on a cross and then murdered five more women in the same manner, all of whom were consdering abortion. Among these victims were {{o|Miu|Saeki}} and {{n|Yukiko|Miyama}}. After Makoto's girlfriend, {{minor|kns|Celestial|Stella}}, developed a degenerative disease that slowly paralyzed her, he began an exhaustive search for a cure, however he was ultimately unable to prevent her death. Seeking some sort of penance for failing to save her, Makoto devoted his time to curing Celestial's sister, {{n|Maris|Stella}}, of her muteness. Makoto was romantically involved with his sister, {{n|Misa|Rokushiki}}, however he has a testicular disease that has rendered him infertile. As such, he believes that Misa's daughter, {{n|Toko|Kuchiki}}, was a result of parthenogenesis and does not consider himself to be her father. == Trivia == * Makoto has [[w:situs inversus|situs inversus]]; if Reiji tries to shoot him in the heart at the end of {{kns}}, Makoto survives as his heart is on the opposite side of his body. {{kns characters}} {{kns2 characters|state=collapsed}} fac1bbd8a8219b60fd48a81ca9a14214cf9204d1 File:Celes pendant.png 6 476 1413 2023-06-14T00:53:17Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 List of minor characters in Kara no Shoujo 0 477 1414 2023-06-14T00:55:44Z Otonashi Ayana 2 Created page with "{{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo''}} ==== Celestial Stella ==== <div style="clear:both">[[File:celes pendant.png|thumb|left|upright=0.5]] {{o|Celestial|Stella}} is the twin sister of {{n|Maris|Stella}} and late girlfriend of {{n|Makoto|Rokushiki}}. She died of degenerative disease that slowly paralyzed her. A photograph of her can be found in a pendant given to Maris by Makoto. </div> {{kns characters}}" wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo''}} ==== Celestial Stella ==== <div style="clear:both">[[File:celes pendant.png|thumb|left|upright=0.5]] {{o|Celestial|Stella}} is the twin sister of {{n|Maris|Stella}} and late girlfriend of {{n|Makoto|Rokushiki}}. She died of degenerative disease that slowly paralyzed her. A photograph of her can be found in a pendant given to Maris by Makoto. </div> {{kns characters}} 8542581f04ce865233f8ffd7363cf775fdc53b49 Ryoichi Yaginuma 0 203 1415 881 2023-06-14T00:58:21Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ryoichi | family name = Yaginuma | jname = | image = | aka = | gender = | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement from the police force. He takes on a greater role in {{kns}}, where he has since become a founding member of the [[w:National Police Agency (Japan)|NPA]]. == Plot == Yaginuma was a frequent patron of the [[Yukishiro]] brothel, with a preference for seeing [[Otoha]]. {{spoiler|cartagra|He plays a pivotal role in the arrest of {{n|Kazuma|Arishima}} after being convinced of his guilt by {{n|Shugo|Takashiro}}.}} {{cartagra characters|state=collapsed}} {{kns characters}} {{kns2 characters|state=collapsed}} 380b99819178367ce462227e2be0aa32a82d26ff File:Kay0101.png 6 478 1417 2023-06-14T01:01:02Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Yukiko Kayahara 0 381 1418 1132 2023-06-14T01:01:05Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Yukiko | family name = Kayahara | jname = 茅原 雪子 | image = [[File:kay0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends. == Plot == Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality. Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs Kyoko in [[Moon World]] but flees upon seeing her blood. A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}. }} {{kns2 characters}} 9b737cebc1273c54a65aa72ac5429aa5a6644b4a File:Nao0101.png 6 479 1419 2023-06-14T01:03:40Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Nao0301.png 6 480 1420 2023-06-14T01:03:43Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Naori Kuroya 0 481 1421 2023-06-14T01:08:08Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Naori | family name = Kuroya | jname = | image = <tabber> |-| Adult = [[File:nao0301.png|x300px]] |-| Teenager = [[File:nao0101.png|x300px]] </tabber> | aka = | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement and the on-call doctor for the [[Blessed Congregation]] == Plot == {{spoiler|kns2|When {{n|Nanako|Sawashiro}} moves t..." wikitext text/x-wiki {{infobox character | given name = Naori | family name = Kuroya | jname = | image = <tabber> |-| Adult = [[File:nao0301.png|x300px]] |-| Teenager = [[File:nao0101.png|x300px]] </tabber> | aka = | gender = Male | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement and the on-call doctor for the [[Blessed Congregation]] == Plot == {{spoiler|kns2|When {{n|Nanako|Sawashiro}} moves to Tokyo and murders her father, Naori helps dispose of his corpse by taking the body to the Tama mountains. When Naori meets {{n|Shinji|Mamiya}}, he assists in caring for the pregnant {{n|Toko|Kuchiki}} until she eventually dies in childbirth. After this, Naori murders Shinji with an axe and buries his corpse, along with Toko's. He sends a manuscript titled ''[[The Sheep of Purgatorio]]'' to publishers in Tokyo under Shinji's name, which is subsequently published.}} {{kns2 characters}} 82dc6f2b81d3b3a8e93405331c7031065448ffcd Blessed Congregation 0 295 1422 916 2023-06-14T01:11:05Z Otonashi Ayana 2 /* Senri */ wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. === Congregation of the Blessed === The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}. === Senri === After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him. After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction. === Blessed Congregation === === Known Members === {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} a0efb0850822a2c16b4412b452d2220ed81615d7 Yukiko Kayahara 0 381 1423 1418 2023-06-14T01:13:37Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Yukiko | family name = Kayahara | jname = 茅原 雪子 | image = [[File:kay0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|茅原 雪子}} is a student at [[Ouba Private Girls' Academy]]. She is a reserved person, having suffered from bullying at her previous school after rumors circulated that she had been responsible for the death of one of her friends. == Plot == Although Yukiko is quiet at school, {{n|Yukari|Tokisaka}} makes earnest efforts to befriend her. Another classmate, {{n|Kohane|Tori}}, claims to have been friends with Yukiko when they were children, however Yukiko has no memory of this. {{spoiler|kns2|This is because Yukiko represses memories associated with certain events; Yukiko desires to "become" the people she admires, which she does by killing them and mimicking their personalities. After doing this, she unconsciously represses any memory associated with her actions. When she was a child she strangled her brother Yukio, resulting in her forgetting most of her time at the orphanage. Prior to transferring to Ouba Academy, she pushed her friend Mie in front of a moving train and subsequently copied Mie's demure personality. Yukiko becomes enamored with both {{n|Kyoko|Hazuki}} and {{o|Yukari|Tokisaka}}. On January 7, 1958, Yukiko stabs Kyoko in [[Moon World]] but flees upon seeing her blood. A week afterwards, Yukiko convinces Yukari to come with her to the now-abandoned White Lily Garden orphanage, where she intends to "become" Yukari, however she is stopped by the intervention of {{n|Reiji|Tokisaka}}, {{n|Masaki|Tomoyuki}}, and {{n|Fuyumi|Kayahara}}. }} <hr> ;Alternate endings :If Reiji fails to stop Yukiko from killing Yukari, she adopts Yukari's personality. Upon being arrested, she is not found sane enough to stand trial and is hospitalized at the [[Kuchiki Hospital]]. When Reiji visits her, he finds that she has cut her hair to match Yukari's. {{kns2 characters}} f99e05ec629fe27895dfb41c8ba2276015a64192 Ayumu Sato 0 302 1424 1105 2023-06-14T01:15:06Z Otonashi Ayana 2 /* Trivia */ wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}. == Trivia == *Ayumu is notably tall. She is described as being nearly as tall as {{n|Reiji|Tokisaka}} and her sprite art shows her as taller than most other characters. *Ayumu is a possible romantic option in {{kns2}}, however pursuing her with prevent the player from reaching the True End. {{kns characters}} {{kns2 characters|state=collapsed}} 2a0b342f8fa131a9e87d528ab7dd20035ae513e1 1425 1424 2023-06-14T01:15:54Z Otonashi Ayana 2 /* Trivia */ wikitext text/x-wiki {{infobox character | given name = Ayumu | family name = Sato | jname = | image = [[File:sayu0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. She is a part of the kendo club and aspires to become a detective after meeting {{n|Reiji|Tokisaka}}. == Trivia == *Ayumu is notably tall. She is described as being nearly as tall as {{n|Reiji|Tokisaka}} and her sprite art shows her as taller than most other characters. {{spoiler|kns2|Ayumu is a possible romantic option in {{kns2}}, however pursuing her will prevent the player from reaching the True End.|bullet=yes}} {{kns characters}} {{kns2 characters|state=collapsed}} 3b284a7ed6a3cfed4442c3bb6b6f00074e0f7667 Yukio 0 482 1426 2023-06-14T17:11:44Z Otonashi Ayana 2 Redirected page to [[List of minor characters in Kara no Shoujo - The Second Episode]] wikitext text/x-wiki #REDIRECT [[List of minor characters in Kara no Shoujo - The Second Episode]] 4d4c0302767ee98df243f68d004cc55be7184537 1427 1426 2023-06-14T17:12:42Z Otonashi Ayana 2 Changed redirect target from [[List of minor characters in Kara no Shoujo - The Second Episode]] to [[List of minor characters in Kara no Shoujo - The Second Episode#Yukio]] wikitext text/x-wiki #REDIRECT [[List of minor characters in Kara no Shoujo - The Second Episode#Yukio]] 929c6046e22a498be1583e4de15631601ae4bba2 List of minor characters in Kara no Shoujo - The Second Episode 0 465 1428 1398 2023-06-14T17:14:07Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== <div style="clear:both"> {{nihongo|{{o|Saizo|Kuki}}|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office. </div> ==== Yayoi Shigusa ==== <div style="clear:both">[[File:head_Yayoi.png|thumb|left|upright=0.5]] {{nihongo|{{o|Yayoi|Shigusa}}|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. </div> ==== Yukio ==== <div style="clear:both">[[File:head_Yukio.png|thumb|left|upright=0.5]] Yukio is {{n|Yukiko|Kayahara}}'s brother. While the two were living in the [[White Lily Garden]] orphanage, Yukiko murdered him in hopes to "become" him. </div> {{kns2 characters}} 577dafe9ff55084057e403bc0a9674e05a174a09 1429 1428 2023-06-14T17:16:20Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:List of minor characters in ''Kara no Shōjo — The Second Episode''}} ==== Saizo Kuki ==== <div style="clear:both"> {{nihongo|{{o|Saizo|Kuki}}|犀造 九鬼}} is a resident of the [[Hitogata]] settlement working at the branch office. </div> <div style="clear:both"> ==== Yayoi Shigusa ==== [[File:head_Yayoi.png|thumb|left|upright=0.5]] {{nihongo|{{o|Yayoi|Shigusa}}|祠草 夜宵}} is a resident of the [[Hitogata]] settlement. She is sent to Tokyo to notify {{n|Masaki|Tomoyuki}} of the impending death of {{n|Hideomi|Hinagami}}. </div> <div style="clear:both"> ==== Yukio ==== [[File:head_Yukio.png|thumb|left|upright=0.5]] Yukio is {{n|Yukiko|Kayahara}}'s brother. While the two were living in the [[White Lily Garden]] orphanage, Yukiko murdered him in hopes to "become" him. </div> {{kns2 characters}} a01e55a55de1a7f062c157a5a530162d3dd36adc Toko Kuchiki 0 273 1430 980 2023-06-14T18:58:15Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Toko | family name = Kuchiki | jname = | image = [[File:shuy0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''' is an enigmatic girl who attends [[Ouba Private Girls' Academy]]. She eventually becomes the focal point of the {{kns/nl}} franchise as {{n|Reiji|Tokisaka}}'s obsession with her deepens. == Plot == Toko approaches {{n|Reiji|Tokisaka}} after he begins his undercover investigation at Ouba Private Girls' Academy, having learned that Reiji was a detective through his younger sister, Toko's friend {{n|Yukari|Tokisaka}}. Toko gives Reiji a case: to find her true self. {{spoiler|kns2|Toko's corpse is found behind a villa in the mountains of Tama, alongside the corpses of {{o|Ginji|Sawashiro}} and Shinji. A makeshift infirmary inside the villa reveals that Toko had died after giving birth. Toko briefly reappears in {{kns2}}, in the alternate "Obsession End." While searching the mountains of Tama, Reiji slips and falls. It is unclear whether this incapacitates him or kills him. Reiji goes on to experience an elaborate fantasy wherein Toko is alive; the two begin a relationship and eventually get married as the screen fades to white.}} {{kns characters}} bdd3c1fe2cea6659ed03ac989695268e128f9a5d Saya Shigusa 0 483 1431 2023-06-14T19:13:00Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Saya | family name = Shigusa | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == Saya is a former Miko. She gives birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}. == Trivia == {{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the cor..." wikitext text/x-wiki {{infobox character | given name = Saya | family name = Shigusa | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == Saya is a former Miko. She gives birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}. == Trivia == {{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the corpses of Rika and Satsuki, she stores their limbs in boxes she keeps in the basement beneath the Shigusa shrine storehouse. On a second playthrough of {{kns2|n}}, a scene depicts Saya using one of Satsuki's dismembered arms to masturbate.|bullet=yes}} {{kns2 characters}} f382a95ccec3bbe2e5156d861a770a7fc85ddc5d 1432 1431 2023-06-14T19:14:12Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Saya | family name = Shigusa | jname = | image = [[File:|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == Saya is a former Miko. She gave birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}. == Trivia == {{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the corpses of Rika and Satsuki, she stores their limbs in boxes she keeps in the basement beneath the Shigusa shrine storehouse. On a second playthrough of {{kns2|n}}, a scene depicts Saya using one of Satsuki's dismembered arms to masturbate.|bullet=yes}} {{kns2 characters}} e8e4bfd64a6c3ae1ff19eab3d3fc440977fb84b5 Ayako 0 484 1433 2023-06-14T19:14:44Z Otonashi Ayana 2 Redirected page to [[Fuyumi Kayahara]] wikitext text/x-wiki #REDIRECT [[Fuyumi Kayahara]] 9f6af3aa791053108329757dbb2e5a7ade16e0c0 Template:Kns2 characters 10 313 1434 1416 2023-06-14T19:20:52Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} * {{n|Bunji|Inui}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{minor|kns2|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{minor|kns2|Miya|Shigusa}} * {{minor|kns2|Yayoi|Shigusa}} * [[Fuyumi Kayahara|Ayako]] * [[Satsuki]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{minor|kns2|Shinobu|Takayama}} * {{minor|kns2|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> 677e1d9646297635c55086720417e27320532965 1435 1434 2023-06-14T19:21:32Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} * {{n|Bunji|Inui}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{minor|kns2|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{minor|kns2|Miya|Shigusa}} * {{minor|kns2|Yayoi|Shigusa}} * [[Satsuki]] * [[Fuyumi Kayahara|Ayako]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{minor|kns2|Shinobu|Takayama}} * {{minor|kns2|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> a46acd1846567961f8aa12f776e1e9c359b23192 1470 1435 2023-06-15T01:14:26Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns2 characters | title = [[Kara no Shoujo - The Second Episode|<span style="color:#202122; font-style:italic">Kara no Shōjo — The Second Episode</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Masaki|Tomoyuki}} * {{n|Aoki|Toji}} * {{n|Ryoichi|Yaginuma}} * {{n|Bunji|Inui}} | group2 = Students | list2 = * {{n|Yukari|Tokisaka}} * {{n|Yukiko|Kayahara}} * {{n|Kohane|Tori}} * {{n|Ayumu|Sato}} | group4 = Hitogata Residents | list4 = {{Navbox|child | group1 = Hinagami family | list1 = * [[Masaki Tomoyuki|{{o|Ayato|Hinagami}}]] * {{n|Karen|Hinagami}} * {{n|Shizuru|Hinagami}} * {{n|Hideomi|Hinagami}} * {{n|Mariko|Hinagami}} | group2 = Shigusa family | list2 = * {{n|Saya|Shigusa}} * {{n|Yoshimitsu|Shigusa}} * {{minor|kns2|Rioko|Shigusa}} * {{n|Kensei|Shigusa}} * {{minor|kns2|Miya|Shigusa}} * {{minor|kns2|Yayoi|Shigusa}} * [[Satsuki]] * [[Fuyumi Kayahara|Ayako]] | group3 = Other | list3 = * {{n|Naori|Kuroya}} * {{n|Yuzuru|Kuroya}} * {{n|So|Kuroya}} * {{n|Yu|Futami}} * {{n|Yoshie|Futami}} * {{n|Nanako|Sawashiro}} * {{n|Meguri|Takamiya}} * {{n|Yuka|Kirimura}} * {{minor|kns2|Shinobu|Takayama}} * {{minor|kns2|Saizo|Kuki}} }} | group5 = Other | list5 = * {{n|Fuyumi|Kayahara}} * {{n|Koharu|Yamanouchi}} * {{n|Natsume|Takashiro}} * {{n|Kyoko|Hazuki}} * {{n|Fumiya|Kuchiki}} * {{n|Chizuru|Kuchiki}} * {{n|Daisaku|Arata}} }} <includeonly> [[Category:Characters]] {{kns2/cat}} </includeonly> b8732b9fe168abea0e8760dccc901d02d6941e85 Fuyumi Kayahara 0 314 1436 1381 2023-06-14T19:24:39Z Otonashi Ayana 2 /* Plot */ wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:fuy0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}} == Plot == Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family. In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine. Ayako went on to adopt the name Fuyumi Kayahara and began a new life in Tokyo. She was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood. {{kns2 characters}} 333602714b536034dd817db625be04c69b2c2f86 1437 1436 2023-06-14T19:30:34Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = [[File:fuy0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}} == Plot == Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family. In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine. Ayako went on to adopt the name Fuyumi Kayahara and began a new life in Tokyo. Having been impregnated during her rendezvous with Ayato, Fuyumi gave birth to {{n|Michiru|Shirosaki}}. She gave Michiru up for adoption after she began to strangle her. Fuyumi was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood. == Relationships == ;Yukiko Kayahara :Though the two are not related by blood, Fuyumi and Yukiko share a pathological drive to "become" others. {{kns2 characters}} 4b6262f8affd9afff9030acd3bc646cbeb9700e4 1455 1437 2023-06-14T22:54:58Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fuyumi | family name = Kayahara | jname = | image = <tabber> |-| Adult = [[File:fuy0301.png|x300px]] |-| Teenager = [[File:sat0201.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}'''{{spoiler|kns2|, born as '''Ayako''',}} is an employee at the [[New Leaf Garden]] nursery and the adoptive mother of {{n|Yukiko|Kayahara}}. {{spoiler|kns2|Originally born in secret at the [[Hitogata]] settlement, she is the half-sister of [[Satsuki]] and was raised to serve as Satsuki's body double owing to their near-identical appearance.}} == Plot == Ayako was raised in [[Hitogata]] in secret, being forced to live in a hidden basement beneath the Shigusa shrine storehouse. As needed, she would occasionally switch places with her half-sister, [[Satsuki]], who was being trained as a future Miko. Ayako and Satsuki separately met and fell in love with {{n|Ayato|Hinagami}}, the heir to the Hinagami family. In 1940, in the days leading up to the village's annual festival, Satsuki made plans to see Ayato. However, Ayako secretly changed the date of the meeting and met with Ayato in an abandoned cabin, where the two had sex. After the festival, Satsuki learned of what happened and attempted to murder Ayako. However, Ayako overpowered her and strangled Satsuki to death. The panicked Ayako was found by {{n|Kensei|Shigusa}}, who then helped Ayako escape the village. {{n|Saya|Shigusa}} discovered Satsuki's corpse and staged her death as part of a curse in the village's folklore by dismembering the body and stringing the remains to a torii outside the Shigusa shrine. Ayako went on to adopt the name Fuyumi Kayahara and began a new life in Tokyo. Having been impregnated during her rendezvous with Ayato, Fuyumi gave birth to {{n|Michiru|Shirosaki}}. She gave Michiru up for adoption after she began to strangle her. Fuyumi was later approached by a new-age religious cult called the [[Blessed Congregation]] and was given a child named [[Yukiko Kayahara|Yukiko]]; in exchange for raising Yukiko, the Blessed Congregation would provide Fuyumi with a monetary reward when they returned to collect Yukiko after reaching adulthood. == Relationships == ;Yukiko Kayahara :Though the two are not related by blood, Fuyumi and Yukiko share a pathological drive to "become" others. {{kns2 characters}} 01525893f3342c8f16c7b3f35e2452a8ca4bc0f6 File:Meg0701.png 6 485 1438 2023-06-14T22:39:26Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Meg0101.png 6 320 1439 1008 2023-06-14T22:39:30Z Otonashi Ayana 2 Otonashi Ayana uploaded a new version of [[File:Meg0101.png]] wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Meguri Takamiya 0 321 1440 1010 2023-06-14T22:39:46Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Meguri | family name = Takamiya | jname = | image = <tabber> |-| Adult = [[File:meg0701.png|x300px]] |-| Teenager = [[File:meg0501.png|x300px]] </tabber> | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == {{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} {{kns2 characters}} b2a4ce239ed650ab2d48e05c4e5472d3e4018b60 1441 1440 2023-06-14T22:39:57Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Meguri | family name = Takamiya | jname = | image = <tabber> |-| Adult = [[File:meg0701.png|x300px]] |-| Teenager = [[File:meg0701.png|x300px]] </tabber> | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == {{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} {{kns2 characters}} c250d6428fe8d7dbf02f3ad17621442211b521bf 1442 1441 2023-06-14T22:40:09Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Meguri | family name = Takamiya | jname = | image = <tabber> |-| Adult = [[File:meg0701.png|x300px]] |-| Teenager = [[File:meg0101.png|x300px]] </tabber> | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == {{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} {{kns2 characters}} f903b6cff09574d8f5710c32b6c23a81d0a083da 1456 1442 2023-06-15T00:58:27Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Meguri | family name = Takamiya | jname = | image = <tabber> |-| Adult = [[File:meg0701.png|x300px]] |-| Teenager = [[File:meg0101.png|x300px]] </tabber> | aka = Guriko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == {{spoiler|kns2|On December 20, 1957, Meguri is murdered in her hotel room by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}} ba17f1565ddc255f3531025fece9d873534fffae Karen Hinagami 0 322 1443 1374 2023-06-14T22:41:37Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Karen | family name = Hinagami | jname = | image = <tabber> |-| Adult = [[File:kar0701.png|x300px]] |-| Teenager = [[File:kar0501.png|x300px]] </tabber> | aka = Ohina<br>The Miko | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. {{spoiler|kns2|After moving to Tokyo, she becomes a serial killer who murders several women in order to prevent them from marrying her brother. She serves as a major antagonist in {{kns2}}.}} == Plot == While growing up in the secluded [[Hitogata]] settlement, Karen became romantically attracted to her brother, {{n|Ayato|Hinagami}}. However, as Ayato is the heir to the Hinagami family, his future marriage prospects are arranged in advance so that he marries a designated "Miko" that is trained by the Shigusa family to carry on the village traditions. {{spoiler|kns2|After the murder of [[Satsuki]], the incumbent Miko, Karen hopes to succeed her so that she can marry Ayato when he returns from his service in World War II. However, Karen learns that she is infertile, making her ineligible as a marriage candidate. Furthermore, although Ayato does return to Hitogata after World War II, he leaves shortly afterwards and cuts contact with his family. In 1957, Karen learns that Ayato has been found living in Tokyo. In order to monopolize her brother's love, Karen clandestinely learns the names of Ayato's current marriage candidates from {{n|Shizuru|Hinagami}} and plans to murder them, ultimately killing {{n|Mayu|Hinagata}}, {{n|Meguri|Takamiya}}, and {{n|Mizuki|Itose}} and disguising their deaths as being part of a curse originating from Hitogata. She also murders {{n|Yuka|Kirishima}} after mistakenly reading ユウ (Yū, as in {{n|Futami|Yu}}) as ユカ (Yuka) due to Shizuru's sloppy handwriting. Her crime spree ends when she is lured into a trap by {{n|Reiji|Tokisaka}} and {{n|Ayumu|Sato}}, and she is subsequently imprisoned.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == *Karen has an interest in fashion, a trait she shares with her childhood friend {{n|Meguri|Takamiya}}. {{kns2 characters}} aba436c0680b06130fb6dcfe9b4da0a43b366321 File:Yuu0501.png 6 486 1444 2023-06-14T22:45:14Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Yuu0101.png 6 487 1445 2023-06-14T22:45:18Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Yu Futami 0 488 1446 2023-06-14T22:45:26Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Yu | family name = Futami | jname = | image = <tabber> |-| Adult = [[File:yuu0501.png|x300px]] |-| Teenager = [[File:yuu0101.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is the heir to the Futami Inn. == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2..." wikitext text/x-wiki {{infobox character | given name = Yu | family name = Futami | jname = | image = <tabber> |-| Adult = [[File:yuu0501.png|x300px]] |-| Teenager = [[File:yuu0101.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is the heir to the Futami Inn. == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}} ece0ec52ac909ef0ebe0a719d083ee711745d8f3 1448 1446 2023-06-14T22:46:25Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Yu | family name = Futami | jname = | image = <tabber> |-| Adult = [[File:yuu0501.png|x300px]] |-| Teenager = [[File:yuu0101.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. She is the heir to the Futami Inn. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}} baadd0371aa5e4210c19b66a02f73844cb6006b8 Yu Futami/Family tree 0 489 1447 2023-06-14T22:45:43Z Otonashi Ayana 2 Created page with "{{Family tree/Shizuru's children}}" wikitext text/x-wiki {{Family tree/Shizuru's children}} fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e File:May0301.png 6 490 1449 2023-06-14T22:50:22Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Mayu Kamizono 0 491 1450 2023-06-14T22:50:29Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Mayu | family name = Kamizono | jname = | image = [[File:may0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse working at the [[Kuchiki Hospital]]. == Plot == {{spoiler|kns2|On November 29, 1957, Meguri is murdered in her home by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} <div style="cl..." wikitext text/x-wiki {{infobox character | given name = Mayu | family name = Kamizono | jname = | image = [[File:may0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse working at the [[Kuchiki Hospital]]. == Plot == {{spoiler|kns2|On November 29, 1957, Meguri is murdered in her home by {{n|Karen|Hinagami}}, who then stages her corpse to resemble the curse of Hinna-sama.}} <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}} 0481dbe2f49eeab327069b3dc32e9d3f4e156846 Mayu Kamizono/Family tree 0 492 1451 2023-06-14T22:50:42Z Otonashi Ayana 2 Created page with "{{Family tree/Shizuru's children}}" wikitext text/x-wiki {{Family tree/Shizuru's children}} fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e File:Sat0101.png 6 493 1452 2023-06-14T22:52:32Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Satsuki 0 315 1453 967 2023-06-14T22:52:35Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | name = Satsuki | jname = | image = [[File:sat0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''Satsuki''' is an enigmatic girl in the [[Hitogata]] settlement. {{kns2 characters}} 51e2c072301083bc0ec1bd3416f341275793823c File:Sat0201.png 6 494 1454 2023-06-14T22:54:46Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Meguri Takamiya/Family tree 0 495 1457 2023-06-15T00:58:46Z Otonashi Ayana 2 Created page with "{{Family tree/Shizuru's children}}" wikitext text/x-wiki {{Family tree/Shizuru's children}} fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e File:Koh0301.png 6 496 1458 2023-06-15T00:59:18Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Kohane Tori/Family tree 0 497 1459 2023-06-15T00:59:59Z Otonashi Ayana 2 Created page with "{{Family tree/Shizuru's children}}" wikitext text/x-wiki {{Family tree/Shizuru's children}} fa3bf1a0e6c9244c4e1bc821e398ca75cc898b7e Kohane Tori 0 498 1460 2023-06-15T01:00:03Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Kohane | family name = Tori | jname = | image = [[File:koh0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}}" wikitext text/x-wiki {{infobox character | given name = Kohane | family name = Tori | jname = | image = [[File:koh0301.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a student at [[Ouba Private Girls' Academy]]. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> {{kns2 characters}} dedff6a2f4c1b5c5c57c7f1c40d107535f0e72f2 File:Ryo0301.png 6 499 1461 2023-06-15T01:02:45Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Ryoichi Yaginuma 0 203 1462 1415 2023-06-15T01:03:37Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Ryoichi | family name = Yaginuma | jname = | image = [[File:ryo0301.png|x300px]] | aka = | gender = Male | age = | appearance = {{cartagra}} | seiyu = | relations = }}'''{{c}}''' is an ambitious police officer. He first appears in {{cartagra}}, having been hired to replace {{n|Shugo|Takashiro}} following his retirement from the police force. He takes on a greater role in {{kns}}, where he has since become a founding member of the [[w:National Police Agency (Japan)|NPA]]. == Plot == Yaginuma was a frequent patron of the [[Yukishiro]] brothel, with a preference for seeing [[Otoha]]. {{spoiler|cartagra|He plays a pivotal role in the arrest of {{n|Kazuma|Arishima}} after being convinced of his guilt by {{n|Shugo|Takashiro}}.}} {{cartagra characters|state=collapsed}} {{kns characters}} {{kns2 characters|state=collapsed}} 63255cbfe3a9d7ed395649336176e7d8be65cebe File:Skyo0101a.png 6 500 1463 2023-06-15T01:06:18Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Kyozo Uozumi 0 501 1464 2023-06-15T01:10:31Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Kyozo | family name = Uozumi | jname = 魚住 夾三 | image = [[File:skyo0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|魚住 夾三}} is a police officer working in Tokyo. He is an old friend of {{n|Reiji|Tokisaka}}, {{n|Shugo|Takashiro}}, {{n|Natsume|Takashiro}}, and {{n|Kyoko|Hazuki}}. == Plot == Uozumi is the..." wikitext text/x-wiki {{infobox character | given name = Kyozo | family name = Uozumi | jname = 魚住 夾三 | image = [[File:skyo0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|魚住 夾三}} is a police officer working in Tokyo. He is an old friend of {{n|Reiji|Tokisaka}}, {{n|Shugo|Takashiro}}, {{n|Natsume|Takashiro}}, and {{n|Kyoko|Hazuki}}. == Plot == Uozumi is the first detective assigned to the primary case of {{kns}}. {{spoiler|kns2|After {{kns|n}}, Uozumi was reassigned to another police department, taking him away from Tokyo.}} == Trivia == *Uozumi has a crush on {{n|Kyoko|Hazuki}}, however he hasn't revealed his feelings to her. {{kns characters}} 50a25e74d7b3cec904bc761f0d91ef09790d6adb 1465 1464 2023-06-15T01:10:52Z Otonashi Ayana 2 Otonashi Ayana moved page [[Uozumi Kyozo]] to [[Kyozo Uozumi]] without leaving a redirect wikitext text/x-wiki {{infobox character | given name = Kyozo | family name = Uozumi | jname = 魚住 夾三 | image = [[File:skyo0101a.png|x300px]] | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = | relations = }}{{nihongo|'''{{c}}'''|魚住 夾三}} is a police officer working in Tokyo. He is an old friend of {{n|Reiji|Tokisaka}}, {{n|Shugo|Takashiro}}, {{n|Natsume|Takashiro}}, and {{n|Kyoko|Hazuki}}. == Plot == Uozumi is the first detective assigned to the primary case of {{kns}}. {{spoiler|kns2|After {{kns|n}}, Uozumi was reassigned to another police department, taking him away from Tokyo.}} == Trivia == *Uozumi has a crush on {{n|Kyoko|Hazuki}}, however he hasn't revealed his feelings to her. {{kns characters}} 50a25e74d7b3cec904bc761f0d91ef09790d6adb Template:Kns characters 10 138 1466 1148 2023-06-15T01:11:21Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = kns characters | title = [[Kara no Shoujo|<span style="color:#202122; font-style:italic">Kara no Shōjo</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Reiji|Tokisaka}} * {{n|Kyozo|Uozumi}} * {{n|Shugo|Takashiro}} * {{n|Ryoichi|Yaginuma}} | group2 = [[Ouba Private Girls' Academy|<span style="color:#202122">Ouba Academy</span>]] | list2 = {{Navbox|child | group1 = Students | list1 = * {{n|Yukari|Tokisaka}} * {{n|Toko|Kuchiki}} * {{n|Toko|Mizuhara}} * {{n|Tsuzuriko|Yosomiya}} * {{n|Orihime|Tsukishima}} * {{n|Ayumu|Sato}} * {{n|Yui|Nishizono}} * {{n|Kei|Koizumi}} * {{n|Yumi|Takagawa}} | group2 = Faculty | list2 = * {{n|Tokio|Saeki}} * {{n|Nene|Akazaki}} * {{n|Tatsuhiko|Kusaka}} }} | group3 = Hospital Staff | list3 = * {{n|Yasutada|Kuchiki}} * {{n|Koharu|Yamanouchi}} * {{n|Naoki|Murase}} * {{n|Tamaki|Saito}} | group4 = Other | list4 = * {{n|Kyoko|Hazuki}} * {{n|Hatsune|Amemiya}} * {{n|Natsume|Takashiro}} * {{n|Kazuna|Takashiro}} * {{n|Yukiko|Mamiya}} * {{n|Shinzo|Mamiya}} * [[Stella]] * {{n|Chizuru|Kuchiki}} * {{n|Fumiya|Kuchiki}} * [[Shinji Mamiya|{{o|Shin|Katsuragi}}]] }} <includeonly> [[Category:Characters]] {{kns/cat}} </includeonly> 943af85efeaaaadcbb2ae0b2b8200b7e09f468d9 File:Shaz0101a.png 6 502 1467 2023-06-15T01:13:36Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Kyoko Hazuki 0 503 1468 2023-06-15T01:13:41Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Kyoko | family name = Hazuki | jname = 葉月 杏子 | image = [[File:shaz0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Kaname|Yuzuki}} }}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}. {{kns characters} {{kns2 characters|state=collapsed}}" wikitext text/x-wiki {{infobox character | given name = Kyoko | family name = Hazuki | jname = 葉月 杏子 | image = [[File:shaz0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Kaname|Yuzuki}} }}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}. {{kns characters} {{kns2 characters|state=collapsed}} a6773938fc3444e7d6447d7f416822bf9d9141d2 1469 1468 2023-06-15T01:13:52Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kyoko | family name = Hazuki | jname = 葉月 杏子 | image = [[File:shaz0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Kaname|Yuzuki}} }}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}. {{kns characters}} {{kns2 characters|state=collapsed}} 9149449f04de7e430a58f4a75e99a6520eeb18b7 1471 1469 2023-06-15T01:17:43Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kyoko | family name = Hazuki | jname = 葉月 杏子 | image = [[File:shaz0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = {{o|Kaname|Yuzuki}} }}{{nihongo|'''{{c}}'''|葉月 杏子}} is the proprietress of the [[Moon World]] coffee shop. She is an old friend of {{n|Reiji|Tokisaka}} and {{n|Kyozo|Uozumi}}. == Plot == {{spoiler|kns2|By the time of {{kns2}}, Kyoko has begun a sexual relationship with {{n|Reiji|Tokisaka}}, however neither of them see the relationship as romantic. {{n|Yukiko|Kayahara}} becomes endeared to Kyoko after visiting Moon World and becomes a regular customer. When her admiration becomes too strong, Yukiko stabs Kyoko in an attempt to "become" her. Not believing that Yukiko was acting maliciously, Kyoko refuses to admit who stabbed her when asked by the [[Kuchiki Hospital]] staff or the police.}} {{kns characters}} {{kns2 characters|state=collapsed}} bbe292bfeed64f389824e7b6994d966baee52ee9 File:Hat100a.png 6 504 1472 2023-06-15T01:21:24Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 File:Shat0101a.png 6 505 1473 2023-06-15T01:21:28Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Hatsune Amemiya 0 506 1474 2023-06-15T01:24:52Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Hatsune | family name = Amemiya | jname = 雨宮 初音 | image = <tabber> |-| Adult = [[File:shat0101a.png|x300px]] |-| Teenager = [[File:hat100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, but purely in a service role a..." wikitext text/x-wiki {{infobox character | given name = Hatsune | family name = Amemiya | jname = 雨宮 初音 | image = <tabber> |-| Adult = [[File:shat0101a.png|x300px]] |-| Teenager = [[File:hat100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, but purely in a service role as she was too young to take on clients. While at Yukishiro, she was taught to read by {{n|Shugo|Takashiro}}, whom she has a long-standing crush on. {{cartagra characters|state=collapsed}} {{kns characters}} 63a7c7cf54bc67d73a95c446ea62eb0902db69eb 1475 1474 2023-06-15T01:25:33Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Hatsune | family name = Amemiya | jname = 雨宮 初音 | image = <tabber> |-| Adult = [[File:shat0101a.png|x300px]] |-| Teenager = [[File:hat100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, though purely in a service role as she was too young to take on clients. While at Yukishiro, she was taught to read by {{n|Shugo|Takashiro}}, whom she has a long-standing crush on. {{cartagra characters|state=collapsed}} {{kns characters}} 60c0b24f244d199c50b5c04a52c04c201fc21aa6 1476 1475 2023-06-15T01:27:32Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Hatsune | family name = Amemiya | jname = 雨宮 初音 | image = <tabber> |-| Adult = [[File:shat0101a.png|x300px]] |-| Teenager = [[File:hat100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|雨宮 初音}} is a waitress at [[Moon World]]. She formerly worked at the [[Yukishiro]] brothel, though purely in a service role as she was too young to take on clients. While at Yukishiro, she was taught to read by {{n|Shugo|Takashiro}}, whom she has a long-standing crush on. == Plot == {{spoiler|kns2|After Shugo and Kazuna move to Zushi to raise their newborn child, Hatsune goes with them to work as their babysitter.}} {{cartagra characters|state=collapsed}} {{kns characters}} 354a61133f87a2db74b94ecb17a5b4adbb3142a1 Template:Cartagra characters 10 201 1477 1369 2023-06-15T01:30:57Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] * [[Hatsune Amemiya]] | group3 = Other | list3 = * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * {{n|Daisaku|Arata}} }}<includeonly> [[Category:Characters]] [[Category:Cartagra]] </includeonly> 721d13ea542d92bd328b5c31036c34c1f5b92276 1478 1477 2023-06-15T01:32:00Z Otonashi Ayana 2 wikitext text/x-wiki {{Navbox | name = cartagra characters | title = [[Cartagra|<span style="color:#202122; font-style:italic">Cartagra</span>]] Characters | state = {{{state|}}} | listclass = hlist | group1 = Detectives | list1 = * {{n|Shugo|Takashiro}} * {{n|Aoki|Toji}} * {{n|Arishima|Kazuma}} * {{n|Ryoichi|Yaginuma}} | group2 = Yukishiro | list2 = * [[Ujaku]] * [[Rin]] * [[Otoha]] * [[Koyuki]] * [[Seri]] * {{n|Hatsune|Amemiya}} | group3 = Other | list3 = * {{n|Kazuna|Kozuki}} * {{n|Yura|Kozuki}} * {{n|Nana|Takashiro}} * {{n|Takako|Ayasaki}} * {{n|Kaori|Fukamizu}} * {{n|Tokiko|Shigusa}} * {{n|Akao|Ikuma}} * {{n|Daisaku|Arata}} }}<includeonly> [[Category:Characters]] [[Category:Cartagra]] </includeonly> 034cd0b7ad81ae391808b0725ce27cffaaa70a93 Masaki Tomoyuki 0 304 1479 1215 2023-06-15T01:42:37Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Masaki | family name = Tomoyuki | jname = 智之 真崎 | image = [[File:tom0101.png|x300px]] | aka = {{o|Ayato|Hinagami}}<br \>Rihito | gender = Male | age = | appearance = {{kns2}} | seiyu = }}{{nihongo|'''{{c}}'''|智之 真崎}}{{spoiler|kns2|, born as {{nihongo|'''{{o|Ayato|Hinagami}}'''|雛神 理人}},}} is a man who is falsely accused of the murder of {{n|Mayu|Kamizono}}. After his name is cleared, he is recruited by {{n|Reiji|Tokisaka}} as an assistant detective. == Plot == Masaki was born as {{o|Ayato|Hinagami}}, the heir to the Hinagami family, as well as the Hinagami Pharmaceuticals company. The enraged Ayato strangled Saya, killing her. After realizing what he had done, Ayato fled Hitogata. During World War II, Ayato befriended another soldier named Masaki Tomoyuki. By the end of the war, Ayato was sole survivor of his unit and Masaki Tomoyuki died from disease while in Luzon. Seeing an opportunity, Ayato assumed the man's identity upon returning to Japan. <div style="clear:both"> == Relationships == {{family tree}} {{hitogata family tree notice}}</div> == Trivia == * Masaki is notably tall, described as being taller than {{n|Reiji|Tokisaka}}. {{kns2 characters}} 17835745e302b932972756167d498142b38403c3 Kazuna Takashiro 0 292 1480 909 2023-06-15T01:47:36Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Kazuna | family name = Takashiro | jname = 高城 和菜 | image = <tabber> |-| Adult = [[File:skaz0101a.png|x300px]] |-| Teenager = [[File:kad100a.png|x300px]] </tabber> | aka = | gender = Female | age = | appearance = {{cartagra}} | seiyu = }}{{nihongo|'''{{c}}'''|高城 和菜}}, née '''Kozuki''', is a famous actress and the wife of {{n|Shugo|Takashiro}}. {{cartagra characters|state=collapsed}} {{kns characters}} 0e3b05ec67f8ebe38d3902cb568529b1d68ba3a1 Blessed Congregation 0 295 1481 1422 2023-06-15T18:11:22Z Otonashi Ayana 2 wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. == History == === Congregation of the Blessed === The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}. === Senri === After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him. After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction. === Blessed Congregation === After the dissolution of Senri, {{o|Tokihiro|Oribe}} reached out to the remnants of Senri and returned the cult to its origins, renaming it as the Blessed Congregation. {o|Keigo|Utsugi}} returned to the cult in a fiduciary position, amassing enough funds for the Congregation to open a moneylending business as well as an orphanage called [[White Lily Garden]]. == Known Members == {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} 2c63854c15177b169a1904b51252537007aba98e 1482 1481 2023-06-15T18:11:50Z Otonashi Ayana 2 /* Blessed Congregation */ wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. == History == === Congregation of the Blessed === The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}. === Senri === After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him. After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction. === Blessed Congregation === After the dissolution of Senri, {{o|Tokihiro|Oribe}} reached out to the remnants of Senri and returned the cult to its origins, renaming it as the Blessed Congregation. {{o|Keigo|Utsugi}} returned to the cult in a fiduciary position, amassing enough funds for the Congregation to open a moneylending business as well as an orphanage called [[White Lily Garden]]. == Known Members == {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} 9e4279f8093ee6f41f90cef3844e8dd96c8f60df 1483 1482 2023-06-15T18:12:31Z Otonashi Ayana 2 wikitext text/x-wiki The '''Blessed Congregation''', formerly '''Congregation of the Blessed''' and '''Senri''', is a new-age religious cult. == History == === Congregation of the Blessed === The cult was first founded by {{n|Michio|Shigusa}} along with {{n|Keigo|Utsugi}}. === Senri === After learning that Michio had slept with his wife, {{n|Kazuma|Arishima}} murders him. After this, {{n|Tokihiro|Oribe}} formed a faction within the organization called the Oribe faction. === Blessed Congregation === After the dissolution of Senri, {{o|Tokihiro|Oribe}} reached out to the remnants of Senri and returned the cult to its origins, renaming it as the Blessed Congregation. {{o|Keigo|Utsugi}} returned to the cult in a fiduciary position, amassing enough funds for the Congregation to open a moneylending business as well as an orphanage called [[White Lily Garden]]. == Known Members == {{spoiler|kns2| {{n|Naori|Kuroya}} | bullet = yes }} {{spoiler|kns2| {{n|Yukiko|Kayahara}} | bullet = yes }} {{cartagra/cat}} {{kns2/cat}} eaf6cdf5f71a952f2748d6e52a05ffef833bcbfe Template:Cartagra/cat 10 507 1484 2023-06-15T18:13:02Z Otonashi Ayana 2 Created page with "<includeonly>[[Category:Cartagra]]</includeonly>" wikitext text/x-wiki <includeonly>[[Category:Cartagra]]</includeonly> 8af3b141f2f82c43ebda716706923adb261379d4 File:Saw0701.png 6 508 1485 2023-06-15T21:46:19Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Nanako Sawashiro 0 325 1486 1129 2023-06-15T21:46:22Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Nanako | family name = Sawashiro | jname = | image = [[File:saw0701.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a nurse from the [[Hitogata]] settlement. She worked for the Kuroya clinic while in Hitogata, however after moving to Tokyo she began working as a part-time nurse at the [[Kuchiki Hospital]]. == Plot == Nanako spent most of her life in the [[Hitogata]] settlement with her father, Ginji Sawashiro. She was regularly subjected to sexual abuse at her father's hands, including being forced into prostitution. She and her father eventually moved to Tokyo together, where she murdered him with the help of {{n|Naori|Kuroya}}. She began working at the [[Kuchiki Hospital]] as a part-time nurse and later took on a second job at the New Leaf Garden nursery. {{kns2 characters}} 68dec19bd2bcbc696f876f26fde54eb8b6e155ec File:Say0101.png 6 509 1487 2023-06-15T21:46:45Z Otonashi Ayana 2 File uploaded with MsUpload wikitext text/x-wiki File uploaded with MsUpload a655f04485ff507c02499d137d22a0d3e0ea32c2 Saya Shigusa 0 483 1488 1432 2023-06-15T21:46:56Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Saya | family name = Shigusa | jname = | image = [[File:say0101.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns2}} | seiyu = }}'''{{c}}''' is a resident of the [[Hitogata]] settlement. == Plot == Saya is a former Miko. She gave birth to [[Ayako]] after an affair with {{n|Hideomi|Hinagami}}. == Trivia == {{spoiler|kns2|Saya is sexually attracted to limbs; after dismembering the corpses of Rika and Satsuki, she stores their limbs in boxes she keeps in the basement beneath the Shigusa shrine storehouse. On a second playthrough of {{kns2|n}}, a scene depicts Saya using one of Satsuki's dismembered arms to masturbate.|bullet=yes}} {{kns2 characters}} 33b67eba2d0e69c88b9cfa9bf3604ac19659ae74 MediaWiki:Common.css 8 7 1489 1400 2023-09-13T05:33:05Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } :not(h1) .character-name:hover .family-name{ text-decoration: underline; } :not(h1) .character-name:hover .given-name{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -10px 10px 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ cc55d611a714e84f162212733fec997ae6062b80 1490 1489 2023-09-13T05:33:50Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } .character-name:hover .family-name{ text-decoration: underline; } .character-name:hover .given-name{ text-decoration: underline; } h1{ pointer-events:none; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -10px 10px 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 9ea2a9b17f00a820fcb0028384fc84036f7ebe57 1493 1490 2023-09-13T05:53:03Z Otonashi Ayana 2 css text/css @import url('https://fonts.googleapis.com/css2?family=Merienda&display=swap'); :root{ --handwriting: Merienda; --color-theme: #DB5555; --color-theme-2: #D39292; --color-theme-3: #D99F9F; --color-base: #333231; --color-base-2: #232323; --color-white: #E0E0E0; --color-white-2: #F5F5F5;f --color-blue: rgb(132, 166, 247) } /* Variable lines that don't work with templatestyles because of course */ /* cell spacing for navbox cells */ /* Borders above 2nd, 3rd, etc. rows */ /* TODO: figure out how to replace tr as structure; * with div structure it should be just a matter of first-child */ tr + tr > .navbox-abovebelow, tr + tr > .navbox-group, tr + tr > .navbox-image, tr + tr > .navbox-list { border-top: 2px solid #fdfdfd; /* Must match background color */ } .navbox-title { background-color: var(--color-theme); /* Level 1 color */ } .navbox-abovebelow, .navbox-group, .navbox-subgroup .navbox-title { background-color: var(--color-theme-2); /* Level 2 color */ } .navbox-subgroup .navbox-group, .navbox-subgroup .navbox-abovebelow { background-color: var(--color-theme-3); /* Level 3 color */ } .mw-logo-wordmark{ font-family:var(--handwriting); } .item-title{ font-family:var(--handwriting); pointer-events:none; } .tree-table{ background-color:white; padding: 2em; } .tree-fade > table{ position: relative; } .tree-fade > table::after{ content: ''; position: absolute; top: 0; left: 0; height: 100%; width: 100%; background-image: linear-gradient(white, transparent 56px); mix-blend-mode: screen; pointer-events: none; } .tree-width td { min-width:10px; } .charbox .name{ pointer-events:none; } .tabber__tabs{ justify-content:center; } .tabber__panel{ overflow:hidden; } .tabber__header{ margin-bottom: 10px; } a .character-name:hover .family-name{ text-decoration: underline; } a .character-name:hover .given-name{ text-decoration: underline; } .mw-body::before{ content: ''; position: absolute; top: -195px; left: 0; width:100%; height:100%; background: url("https://static.miraheze.org/karanoshoujowiki/7/76/Bg_yukiko.png"); background-repeat: no-repeat; background-position: bottom right; background-size: 50%; opacity: 0.25; transform: scaleX(-100%); mix-blend-mode: multiply; pointer-events: none; } .mw-parser-output{ box-shadow: -10px 10px 10px white; background-color: white; } .mw-dismissable-notice{ display:flex; flex-direction:row-reverse; justify-content:center; align-items:center; background-color: #F8F9FA; border:1px solid #A2A9B1; } /* * This is the CSS common to all desktop skins on en.Wikipedia. * Styling inside .mw-parser-output should generally use TemplateStyles. */ /* Reset italic styling set by user agent */ cite, dfn { font-style: inherit; } /* Straight quote marks for <q> */ q { quotes: '"' '"' "'" "'"; } /* Avoid collision of blockquote with floating elements by swapping margin and padding */ blockquote { overflow: hidden; margin: 1em 0; padding: 0 40px; } /* Consistent size for <small>, <sub> and <sup> */ small { font-size: 85%; } .mw-body-content sub, .mw-body-content sup { font-size: 80%; } /* Same spacing for indented and unindented paragraphs on talk pages */ .ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } /* Reduce page jumps by hiding collapsed/dismissed content */ .client-js .mw-special-Watchlist #watchlist-message, .client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child), /* Avoid FOUC/reflows on collapsed elements. */ /* This copies MediaWiki's solution for T42812 to apply to innercollapse/outercollapse (T325115). */ /* TODO: Use :is() selector at some reasonable future when support is good for Most Clients */ /* Reference: https://gerrit.wikimedia.org/g/mediawiki/core/+/ecda06cb2aef55b77c4b4d7ecda492d634419ead/resources/src/jquery/jquery.makeCollapsible.styles.less#75 */ .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody, .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ), .client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content, /* Hide charinsert base for those not using the gadget */ #editpage-specialchars { display: none; } /* Make the list of references smaller * Keep in sync with Template:Refbegin/styles.css * And Template:Reflist/styles.css */ ol.references { font-size: 90%; margin-bottom: 0.5em; } /* Cite customizations for Parsoid * Once everything uses the one true parser these are just customizations */ .references span[ rel~='mw:referencedBy' ] > a:before { content: counter( mw-ref-linkback, lower-alpha ); } /* Styling for jQuery makeCollapsible, matching that of collapseButton */ .mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; } .mw-collapsible-leftside-toggle .mw-collapsible-toggle { /* @noflip */ float: left; } /* Lists in wikitable data cells are always left-aligned */ .wikitable td ul, .wikitable td ol, .wikitable td dl { /* @noflip */ text-align: left; } /* Fix for hieroglyphs specificity issue in infoboxes ([[phab:T43869]]) */ .mw-parser-output table.mw-hiero-table td { vertical-align: middle; } /* Change the external link icon to a PDF icon for all PDF files */ .mw-parser-output a[href$=".pdf"].external, .mw-parser-output a[href*=".pdf?"].external, .mw-parser-output a[href*=".pdf#"].external, .mw-parser-output a[href$=".PDF"].external, .mw-parser-output a[href*=".PDF?"].external, .mw-parser-output a[href*=".PDF#"].external { background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; /* @noflip */ padding: 8px 18px 8px 0; } /* System messages styled similarly to fmbox */ div.mw-warning-with-logexcerpt, div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon, div.titleblacklist-warning { clear: both; margin: 0.2em 0; border: 1px solid #bb7070; background-color: #ffdbdb; padding: 0.25em 0.9em; box-sizing: border-box; } /* default colors for partial block message */ .mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt { border-color: #fc3; background-color: #fef6e7; } /* Increase the height of the image upload box */ #wpUploadDescription { height: 13em; } /* Minimum thumb width */ .thumbinner { min-width: 100px; } /* Prevent floating boxes from overlapping any category listings, file histories, edit previews, and edit [Show changes] views. */ #mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } /* Styling for tags in changes pages */ .mw-tag-markers { font-style: italic; font-size: 90%; } /* Hide stuff meant for accounts with special permissions. Made visible again in [[MediaWiki:Group-checkuser.css]], [[MediaWiki:Group-sysop.css]], [[MediaWiki:Group-abusefilter.css]], [[MediaWiki:Group-abusefilter-helper.css]], [[MediaWiki:Group-patroller.css]], [[MediaWiki:Group-templateeditor.css]], [[MediaWiki:Group-extendedmover.css]], [[MediaWiki:Group-extendedconfirmed.css]], and [[Mediawiki:Group-autoconfirmed.css]]. */ .checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, .patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, .autoconfirmed-show, .user-show { display: none; } /* Hide the redlink generated by {{Editnotice}}, this overrides the ".sysop-show { display: none; }" above that applies to the same link as well. See [[phab:T45013]] Hide the images in editnotices to keep them readable in VE view. Long term, editnotices should become a core feature so that they can be designed responsive. */ .ve-ui-mwNoticesPopupTool-item .editnotice-redlink, .ve-ui-mwNoticesPopupTool-item .mbox-image, .ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } /* Remove bullets when there are multiple edit page warnings */ ul.permissions-errors { margin: 0; } ul.permissions-errors > li { list-style: none; } /* larger inline math */ span.mwe-math-mathml-inline { font-size: 118%; } /* Make <math display="block"> be left aligned with one space indent for * compatibility with style conventions */ .mwe-math-fallback-image-display, .mwe-math-mathml-display { margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; } .mwe-math-mathml-display math { display: inline; } @media screen { /* Gallery styles background changes are restricted to screen view. In printing we should avoid applying backgrounds. */ /* The backgrounds for galleries. */ #content .gallerybox div.thumb { /* Light gray padding */ background-color: #f8f9fa; } /* Put a chequered background behind images, only visible if they have transparency. '.filehistory a img' and '#file img:hover' are handled by MediaWiki core (as of 1.19) */ .gallerybox .thumb img { background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; } /* But not on articles, user pages, or portals. */ .ns-0 .gallerybox .thumb img, .ns-2 .gallerybox .thumb img, .ns-100 .gallerybox .thumb img { background-image: none; } /* Display "From Wikipedia, the free encyclopedia" in skins that support it, do not apply to print mode */ #siteSub { display: block; } } /* Hide FlaggedRevs notice UI when there are no pending changes */ .flaggedrevs_draft_synced, .flaggedrevs_stable_synced, /* "Temporary" to remove links in sidebar T255381 */ #t-upload, /* Hide broken download box on Special:Book pending T285400 */ .mw-special-Book #coll-downloadbox { display: none; } /* * BELOW HERE THERE BE SOONTOBE TEMPLATESTYLES THINGS; * SEE [[MediaWiki talk:Common.css/to do]] */ /* Infobox template style */ .infobox { border: 1px solid #a2a9b1; border-spacing: 3px; background-color: #f8f9fa; color: black; /* @noflip */ margin: 0.5em 0 0.5em 1em; padding: 0.2em; /* @noflip */ float: right; /* @noflip */ clear: right; font-size: 88%; line-height: 1.5em; width: 22em; } .infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, .infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { vertical-align: top; } .infobox-label, .infobox-data, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox th, .infobox td { /* @noflip */ text-align: left; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-above, .infobox .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { font-size: 125%; font-weight: bold; text-align: center; } .infobox-title, /* Remove element selector when every .infobox thing is using the standard module/templates */ .infobox caption { padding: 0.2em; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, .infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } /* Remove .infobox when element selectors above are removed */ .infobox .infobox-navbar { /* @noflip */ text-align: right; } /* Normal font styling for wikitable row headers with scope="row" tag */ .wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] { font-weight: normal; /* @noflip */ text-align: left; } /* Remove underlines from certain links */ .nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } /* Prevent line breaks in silly places where desired (nowrap) and links when we don't want them to (nowraplinks a) */ .nowrap, .nowraplinks a { white-space: nowrap; } /* But allow wrapping where desired: */ .wrap, .wraplinks a { white-space: normal; } /* texhtml class for inline math (based on generic times-serif class) */ span.texhtml { font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; font-size: 118%; line-height: 1; white-space: nowrap; /* Force tabular and lining display for texhtml */ -webkit-font-feature-settings: "lnum", "tnum", "kern" 0; font-feature-settings: "lnum", "tnum", "kern" 0; font-variant-numeric: lining-nums tabular-nums; font-kerning: none; } span.texhtml span.texhtml { font-size: 100%; } @media screen { .nochecker .gallerybox .thumb img { background-image: none; } } /* Put anything you mean to be a sitewide addition above the TemplateStyles * comment above. */ 9a26ca7c38d2a610281e2c75da2d3b8c5752c5d9 Stella 0 293 1491 1195 2023-09-13T05:34:52Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Stella | family name = Maris | jname = | image = [[File:ssta0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led to her being bullied for much of her childhood and she subsequently became a selective mute for several years. She is the twin sister of {{n|Celestial|Stella}}; the two can only be differentiated by the moles near their left eye. == Relationships == {{kns characters}} ce47894f72dc032c87e9adc59624b6527ea3de48 1492 1491 2023-09-13T05:35:28Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Maris | family name = Stella | jname = | image = [[File:ssta0101a.png|x300px]] | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }}'''{{c}}''', often referred to as simply '''Stella''', is an employee of the Ueno Art Museum. She is half-Italian and half-Japanese. She was raised in Japan, however her European appearance led to her being bullied for much of her childhood and she subsequently became a selective mute for several years. She is the twin sister of {{n|Celestial|Stella}}; the two can only be differentiated by the moles near their left eye. == Relationships == {{kns characters}} 655318a4e57bfb0015663d5eaf7d5812e11acc31 Yasutada Kuchiki 0 511 1495 2023-10-01T13:55:26Z Otonashi Ayana 2 Created blank page wikitext text/x-wiki da39a3ee5e6b4b0d3255bfef95601890afd80709 1498 1495 2023-10-01T14:01:01Z Otonashi Ayana 2 wikitext text/x-wiki {{#genealogy:tree|descendants=List|delimiter=char|format=mermaid}} 683f7155651729fc973777b1eb58a78cc45bef0d 1500 1498 2023-10-01T14:04:01Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Yasutada | family name = Kuchiki | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }} 75e1d701a6a5c432738305f39709c651cb3b1a08 Fumiya Kuchiki 0 512 1496 2023-10-01T13:55:32Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Fumiya | family name = Kuchiki | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }} == Relationships == {{#genealogy:parent|Yasutada Kuchiki}}" wikitext text/x-wiki {{infobox character | given name = Fumiya | family name = Kuchiki | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }} == Relationships == {{#genealogy:parent|Yasutada Kuchiki}} 1bd0eb8b80ced1266024e37ae003b8b78f0b6e88 1499 1496 2023-10-01T14:03:29Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Fumiya | family name = Kuchiki | jname = | image = | aka = | gender = Male | age = | appearance = {{kns}} | seiyu = }} 713a1626e7d38462adb671c9f665a6b12d156898 Chizuru Kuchiki 0 513 1497 2023-10-01T13:56:40Z Otonashi Ayana 2 Created page with "{{infobox character | given name = Chizuru | family name = Kuchiki | jname = | image = | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} == Relationships == {{#genealogy:parent|Yasutada Kuchiki}}" wikitext text/x-wiki {{infobox character | given name = Chizuru | family name = Kuchiki | jname = | image = | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} == Relationships == {{#genealogy:parent|Yasutada Kuchiki}} 5488d4a7e8d647fae6e1103c1f9972045947cea1 1501 1497 2023-10-01T14:04:17Z Otonashi Ayana 2 wikitext text/x-wiki {{infobox character | given name = Chizuru | family name = Kuchiki | jname = | image = | aka = | gender = Female | age = | appearance = {{kns}} | seiyu = }} 2130c9fbb7c9a6c99ad362a07f5244607bf47da5 Kara no Shoujo - The Second Episode 0 182 1502 1352 2023-10-01T14:07:33Z Otonashi Ayana 2 wikitext text/x-wiki {{DISPLAYTITLE:''Kara no Shōjo — The Second Episode''}}{{infobox game | title = Kara no Shōjo — The Second Episode | jtitle = 虚ノ少女 | image = [[File:Cover kara no shoujo 2.jpg|245px]] | developer = Innocent Grey | publisher = {{plainlist | * Innocent Grey * MangaGamer * Shiravune }} | director = {{o|Miki|Sugina}} | writer = {{o|Miya|Suzuka}} | artist = {{o|Miki|Sugina}} | composer = Manyo | platform = Microsoft Windows | release = {{plainlist | ; Original :February 8, 2013 }} | prev = {{kns}} | next = {{kns3}} }} '''''Kara no Shōjo — The Second Episode''''', originally released as {{nihongo|'''''Uro no Shōjo'''''|虚ノ少女}} and later released under the title '''''The Shell Part II: Purgatorio''''', is a mystery visual novel developed by [[Innocent Grey]]. It serves as the second mainline entry into the ''Kara no Shōjo'' series. The story follows private detective {{n|Reiji|Tokisaka}} as he is drawn into a bizarre murder case that is seemingly tied to the faiths of a remote village, while simultaneously continuing his search for {{n|Toko|Kuchiki}}. It was first released on February 8, 2013. == Premise == In late 1957, {{n|Reiji|Tokisaka}} is still no closer to finding {{n|Shinji|Mamiya}} and {{n|Toko|Kuchiki}}. After another string of murders begins in Tokyo that is seemingly tied to the spiritual traditions of an isolated village in rural Japan, Reiji and his newest assistant, {{n|Masaki|Tomoyuki}} set out to solve the case. == Trivia == *{{kns2|n}} is heavily inspired by Dante's ''[[w:Purgatorio|Purgatorio]]'', with each of the game's chapters being named after the seven terraces Dante passes through while climbing Mount Purgatory. == See also == * [[How to see spoilers|See spoilers]] * [[{{PAGENAME}}/Endings|Endings]] {{kns2/cat}} fabc29843ec00aeaa8e781f694031fe8f4425030